From 9d5d891fe32673b3eec609919dbe5c082a56ed03 Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Sat, 11 Sep 2021 14:47:01 -0400 Subject: [PATCH] Desktop, Mobile: Resolves #5295: Update Mermaid 8.10.2 -> 8.12.1 and fix gitGraph crash (#5448) --- packages/app-desktop/package-lock.json | 19512 +--------------- .../atom-one-dark-reasonable.css.base64.js | 2 +- .../highlight.js/atom-one-light.css.base64.js | 2 +- packages/app-mobile/pluginAssets/index.js | 2 +- .../mermaid/mermaid.min.js.base64.js | 2 +- packages/lib/package-lock.json | 8984 +------ .../highlight.js/atom-one-dark-reasonable.css | 76 +- .../assets/highlight.js/atom-one-light.css | 97 +- .../renderer/assets/mermaid/mermaid.min.js | 12 +- packages/renderer/package-lock.json | 8785 +------ packages/renderer/package.json | 2 +- 11 files changed, 250 insertions(+), 37226 deletions(-) diff --git a/packages/app-desktop/package-lock.json b/packages/app-desktop/package-lock.json index f1e3ae9ebdd..eba8854f0a1 100644 --- a/packages/app-desktop/package-lock.json +++ b/packages/app-desktop/package-lock.json @@ -1,19211 +1,33 @@ { "name": "@joplin/app-desktop", "version": "2.4.5", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@joplin/app-desktop", - "version": "2.4.5", - "license": "MIT", - "dependencies": { - "@fortawesome/fontawesome-free": "^5.13.0", - "async-mutex": "^0.1.3", - "codemirror": "^5.56.0", - "color": "^3.1.2", - "compare-versions": "^3.2.1", - "countable": "^3.0.1", - "debounce": "^1.2.0", - "electron-context-menu": "^0.15.0", - "electron-is-dev": "^0.3.0", - "electron-window-state": "^4.1.1", - "file-uri-to-path": "^2.0.0", - "formatcoords": "^1.1.3", - "fs-extra": "^5.0.0", - "highlight.js": "^10.2.1", - "immer": "^7.0.5", - "keytar": "^7.0.0", - "mark.js": "^8.11.1", - "md5": "^2.2.1", - "moment": "^2.22.2", - "node-fetch": "^1.7.3", - "node-notifier": "^8.0.0", - "pretty-bytes": "^5.3.0", - "re-resizable": "^6.5.4", - "react": "16.13.1", - "react-datetime": "^2.14.0", - "react-dom": "16.9.0", - "react-redux": "^5.0.7", - "react-select": "^2.4.3", - "react-toggle-button": "^2.2.0", - "react-tooltip": "^3.10.0", - "redux": "^3.7.2", - "reselect": "^4.0.0", - "roboto-fontface": "^0.10.0", - "smalltalk": "^2.5.1", - "styled-components": "^5.1.1", - "styled-system": "^5.1.5", - "taboverride": "^4.0.3", - "tinymce": "^5.2.0" - }, - "devDependencies": { - "@testing-library/react-hooks": "^3.4.2", - "@types/jest": "^26.0.15", - "@types/node": "^14.14.6", - "@types/react": "16.9.55", - "@types/react-redux": "^7.1.9", - "@types/styled-components": "^5.1.4", - "ajv": "^6.5.0", - "app-builder-bin": "^1.9.11", - "babel-cli": "^6.26.0", - "babel-preset-react": "^6.24.1", - "electron": "^10.1.6", - "electron-builder": "22.9.1", - "electron-notarize": "^1.0.0", - "electron-rebuild": "^2.3.2", - "glob": "^7.1.6", - "gulp": "^4.0.2", - "jest": "^26.6.3", - "js-sha512": "^0.8.0", - "react-test-renderer": "^16.14.0", - "typescript": "^4.0.5" - }, - "optionalDependencies": { - "7zip-bin-linux": "^1.0.1", - "7zip-bin-mac": "^1.0.1", - "7zip-bin-win": "^2.1.1" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/core": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", - "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.1", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.1", - "@babel/parser": "^7.12.3", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/core/node_modules/@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/core/node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/core/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/core/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", - "dependencies": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/generator/node_modules/@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/generator/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/generator/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-function-name/node_modules/@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-function-name/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-get-function-arity/node_modules/@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-get-function-arity/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", - "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-module-transforms/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helper-module-transforms/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-replace-supers/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helper-replace-supers/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-simple-access/node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-simple-access/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dependencies": { - "@babel/types": "^7.11.0" - } - }, - "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helper-split-export-declaration/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "node_modules/@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/parser": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz", - "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/traverse": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz", - "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.5", - "@babel/types": "^7.12.5", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/types": { - "version": "7.12.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz", - "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/helpers/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/helpers/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helpers/node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/helpers/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/helpers/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", - "dependencies": { - "regenerator-runtime": "^0.13.2" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - }, - "node_modules/@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/template/node_modules/@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/template/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/@babel/traverse/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", - "dependencies": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@babel/types/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/@babel/types/node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@develar/schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", - "dev": true, - "dependencies": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@develar/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@develar/schema-utils/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/@develar/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@electron/get": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.4.tgz", - "integrity": "sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^9.6.0", - "progress": "^2.0.3", - "semver": "^6.2.0", - "sumchecker": "^3.0.1" - }, - "engines": { - "node": ">=8.6" - }, - "optionalDependencies": { - "global-agent": "^2.0.2", - "global-tunnel-ng": "^2.7.1" - } - }, - "node_modules/@electron/get/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@electron/get/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@electron/get/node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/@electron/get/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@electron/get/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@emotion/babel-utils": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/@emotion/babel-utils/-/babel-utils-0.6.10.tgz", - "integrity": "sha512-/fnkM/LTEp3jKe++T0KyTszVGWNKPNOUJfjNKLO17BzQ6QPxgbg3whayom1Qr2oLFH3V92tDymU+dT5q676uow==", - "dependencies": { - "@emotion/hash": "^0.6.6", - "@emotion/memoize": "^0.6.6", - "@emotion/serialize": "^0.9.1", - "convert-source-map": "^1.5.1", - "find-root": "^1.1.0", - "source-map": "^0.7.2" - } - }, - "node_modules/@emotion/babel-utils/node_modules/convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/@emotion/babel-utils/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@emotion/hash": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz", - "integrity": "sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ==" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", - "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", - "dependencies": { - "@emotion/memoize": "0.7.4" - } - }, - "node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", - "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==" - }, - "node_modules/@emotion/memoize": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz", - "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ==" - }, - "node_modules/@emotion/serialize": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.9.1.tgz", - "integrity": "sha512-zTuAFtyPvCctHBEL8KZ5lJuwBanGSutFEncqLn/m9T1a6a93smBStK+bZzcNPgj4QS8Rkw9VTwJGhRIUVO8zsQ==", - "dependencies": { - "@emotion/hash": "^0.6.6", - "@emotion/memoize": "^0.6.6", - "@emotion/unitless": "^0.6.7", - "@emotion/utils": "^0.8.2" - } - }, - "node_modules/@emotion/stylis": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.7.1.tgz", - "integrity": "sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ==" - }, - "node_modules/@emotion/unitless": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.6.7.tgz", - "integrity": "sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg==" - }, - "node_modules/@emotion/utils": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz", - "integrity": "sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw==" - }, - "node_modules/@fortawesome/fontawesome-free": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz", - "integrity": "sha512-xKOeQEl5O47GPZYIMToj6uuA2syyFlq9EMSl2ui0uytjY9xbe8XS0pexNWmxrdcCyNGyDmLyYw5FtKsalBUeOg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/core/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/@jest/reporters/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@jest/reporters/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/source-map/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@jest/source-map/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@malept/cross-spawn-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.0.tgz", - "integrity": "sha512-GeIK5rfU1Yd7BZJQPTGZMMmcZy5nhRToPXZcjaDwQDRSewdhp648GT2E4dh+L7+Io7AOW6WQ+GR44QSzja4qxg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "url": "https://github.com/malept/cross-spawn-promise?sponsor=1" - } - }, - "node_modules/@malept/cross-spawn-promise/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@malept/cross-spawn-promise/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@malept/cross-spawn-promise/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@malept/cross-spawn-promise/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@malept/cross-spawn-promise/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@styled-system/background": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", - "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/border": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", - "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/color": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", - "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", - "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", - "dependencies": { - "object-assign": "^4.1.1" - } - }, - "node_modules/@styled-system/css": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", - "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==" - }, - "node_modules/@styled-system/flexbox": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", - "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/grid": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", - "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/layout": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", - "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/position": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", - "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/shadow": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", - "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/space": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", - "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/typography": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", - "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/variant": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", - "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", - "dependencies": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@testing-library/react-hooks": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@testing-library/react-hooks/-/react-hooks-3.4.2.tgz", - "integrity": "sha512-RfPG0ckOzUIVeIqlOc1YztKgFW+ON8Y5xaSPbiBkfj9nMkkiLhLeBXT5icfPX65oJV/zCZu4z8EVnUc6GY9C5A==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.5.4", - "@types/testing-library__react-hooks": "^3.4.0" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-test-renderer": ">=16.9.0" - } - }, - "node_modules/@testing-library/react-hooks/node_modules/@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - } - }, - "node_modules/@testing-library/react-hooks/node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.3.tgz", - "integrity": "sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.15.tgz", - "integrity": "sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", - "dev": true, - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "node_modules/@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", - "dev": true - }, - "node_modules/@types/fs-extra": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.11.tgz", - "integrity": "sha512-mZsifGG4QeQ7hlkhO56u7zt/ycBgGxSVsFI/6lGTU34VtwkiqrrSDgw0+ygs8kFGWcXnFQWMrzF2h7TtDFNixA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dev": true, - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/hoist-non-react-statics/node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "26.0.15", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz", - "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==", - "dev": true, - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "node_modules/@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "14.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", - "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true - }, - "node_modules/@types/react": { - "version": "16.9.55", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.55.tgz", - "integrity": "sha512-6KLe6lkILeRwyyy7yG9rULKJ0sXplUsl98MGoCfpteXf9sPWFWWMknDcsvubcpaTdBuxtsLF6HDUwdApZL/xIg==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-native": { - "version": "0.63.34", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.63.34.tgz", - "integrity": "sha512-6syTIfUt+DY4mJBoO0Y5i4jsDg0I7v31XIPRgsJZAlHeMY9p9GehtGd4VpQKB/NgzLiGzx9ahJPE8w+0lt/WxA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-redux": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.9.tgz", - "integrity": "sha512-mpC0jqxhP4mhmOl3P4ipRsgTgbNofMRXJb08Ms6gekViLj61v1hOZEKWDCyWsdONr6EjEA6ZHXC446wdywDe0w==", - "dev": true, - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, - "node_modules/@types/react-redux/node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/@types/react-redux/node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/@types/react-redux/node_modules/redux": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", - "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "node_modules/@types/react-redux/node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/react-test-renderer": { - "version": "16.9.3", - "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-16.9.3.tgz", - "integrity": "sha512-wJ7IlN5NI82XMLOyHSa+cNN4Z0I+8/YaLl04uDgcZ+W+ExWCmCiVTLT/7fRNqzy4OhStZcUwIqLNF7q+AdW43Q==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react/node_modules/csstype": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz", - "integrity": "sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==", - "dev": true - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "node_modules/@types/styled-components": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.4.tgz", - "integrity": "sha512-78f5Zuy0v/LTQNOYfpH+CINHpchzMMmAt9amY2YNtSgsk1TmlKm8L2Wijss/mtTrsUAVTm2CdGB8VOM65vA8xg==", - "dev": true, - "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "@types/react-native": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/styled-components/node_modules/csstype": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.4.tgz", - "integrity": "sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA==", - "dev": true - }, - "node_modules/@types/testing-library__react-hooks": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@types/testing-library__react-hooks/-/testing-library__react-hooks-3.4.1.tgz", - "integrity": "sha512-G4JdzEcq61fUyV6wVW9ebHWEiLK2iQvaBuCHHn9eMSbZzVh4Z4wHnUGIvQOYCCYeu5DnUtFyNYuAAgbSaO/43Q==", - "dev": true, - "dependencies": { - "@types/react-test-renderer": "*" - } - }, - "node_modules/@types/yargs": { - "version": "15.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz", - "integrity": "sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "node_modules/7zip-bin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", - "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", - "dev": true - }, - "node_modules/7zip-bin-linux": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz", - "integrity": "sha512-Wv1uEEeHbTiS1+ycpwUxYNuIcyohU6Y6vEqY3NquBkeqy0YhVdsNUGsj0XKSRciHR6LoJSEUuqYUexmws3zH7Q==", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/7zip-bin-mac": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz", - "integrity": "sha1-Pmh3i78JJq3GgVlCcHRQXUdVXAI=", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/7zip-bin-win": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz", - "integrity": "sha512-uPHXapEmUtlUKTBx4asWMlxtFUWXzEY0KVEgU7QKhgO2LJzzM3kYxM6yOyUZTtYE6mhK4dDn3FDut9SCQWHzgg==", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", - "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^4.2.1" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "dependencies": { - "type-fest": "^0.11.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/app-builder-bin": { - "version": "1.9.11", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.9.11.tgz", - "integrity": "sha512-GeB00tbuMeRa5NfYpKAnE3m2Ztj5QKa8pdrYKkg2CxZgyQn3iqJEUzy1EWMS6O1a1pX8wJxPLkEzUghg43bXWQ==", - "dev": true - }, - "node_modules/app-builder-lib": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-22.9.1.tgz", - "integrity": "sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A==", - "dev": true, - "dependencies": { - "@develar/schema-utils": "~2.6.5", - "7zip-bin": "~5.0.3", - "async-exit-hook": "^2.0.1", - "bluebird-lst": "^1.0.9", - "builder-util": "22.9.1", - "builder-util-runtime": "8.7.2", - "chromium-pickle-js": "^0.2.0", - "debug": "^4.3.0", - "ejs": "^3.1.5", - "electron-publish": "22.9.1", - "fs-extra": "^9.0.1", - "hosted-git-info": "^3.0.5", - "is-ci": "^2.0.0", - "isbinaryfile": "^4.0.6", - "js-yaml": "^3.14.0", - "lazy-val": "^1.0.4", - "minimatch": "^3.0.4", - "normalize-package-data": "^2.5.0", - "read-config-file": "6.0.0", - "sanitize-filename": "^1.6.3", - "semver": "^7.3.2", - "temp-file": "^3.3.7" - }, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/app-builder-lib/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/app-builder-lib/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/app-builder-lib/node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/app-builder-lib/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/app-builder-lib/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/app-builder-lib/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/app-builder-lib/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-sort/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/async-done/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "node_modules/async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/async-mutex": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.1.3.tgz", - "integrity": "sha1-Cq0hEjaXlas/F+M3RFVtLs9UdWY=" - }, - "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "dependencies": { - "async-done": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "dependencies": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" - }, - "bin": { - "babel": "bin/babel.js", - "babel-doctor": "bin/babel-doctor.js", - "babel-external-helpers": "bin/babel-external-helpers.js", - "babel-node": "bin/babel-node.js" - }, - "optionalDependencies": { - "chokidar": "^1.6.1" - } - }, - "node_modules/babel-cli/node_modules/anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "node_modules/babel-cli/node_modules/arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "optional": true, - "dependencies": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - }, - "optionalDependencies": { - "fsevents": "^1.0.0" - } - }, - "node_modules/babel-cli/node_modules/expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "optional": true, - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "bundleDependencies": [ - "node-pre-gyp" - ], - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/abbrev": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/aproba": { - "version": "1.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/are-we-there-yet": { - "version": "1.1.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/balanced-match": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/chownr": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/code-point-at": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/debug": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/detect-libc": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/fs-minipass": { - "version": "1.2.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^2.2.1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/gauge": { - "version": "2.7.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/glob": { - "version": "7.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/ignore-walk": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/ini": { - "version": "1.3.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/minimist": { - "version": "0.0.8", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/minipass": { - "version": "2.3.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/minizlib": { - "version": "1.2.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^2.2.1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/mkdirp": { - "version": "0.5.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/ms": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/needle": { - "version": "2.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/node-pre-gyp": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/nopt": { - "version": "4.0.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/npm-bundled": { - "version": "1.0.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/npm-packlist": { - "version": "1.4.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/npmlog": { - "version": "4.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/number-is-nan": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/once": { - "version": "1.4.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/os-homedir": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/osenv": { - "version": "0.1.5", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/process-nextick-args": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/rc": { - "version": "1.2.8", - "dev": true, - "inBundle": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "optional": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/rc/node_modules/minimist": { - "version": "1.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/readable-stream": { - "version": "2.3.6", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/sax": { - "version": "1.2.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/semver": { - "version": "5.7.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/signal-exit": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/string-width": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/strip-json-comments": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/tar": { - "version": "4.4.8", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/wide-align": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/fsevents/node_modules/yallist": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "ISC", - "optional": true - }, - "node_modules/babel-cli/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/babel-cli/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-cli/node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.0", - "debug": "^2.6.8", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.7", - "slash": "^1.0.0", - "source-map": "^0.5.6" - } - }, - "node_modules/babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.6", - "trim-right": "^1.0.1" - } - }, - "node_modules/babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" - } - }, - "node_modules/babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-emotion": { - "version": "9.2.11", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz", - "integrity": "sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/babel-utils": "^0.6.4", - "@emotion/hash": "^0.6.2", - "@emotion/memoize": "^0.6.1", - "@emotion/stylis": "^0.7.0", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "find-root": "^1.1.0", - "mkdirp": "^0.5.1", - "source-map": "^0.5.7", - "touch": "^2.0.1" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-plugin-macros": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz", - "integrity": "sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q==", - "dependencies": { - "@babel/runtime": "^7.4.2", - "cosmiconfig": "^5.2.0", - "resolve": "^1.10.0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.11.1.tgz", - "integrity": "sha512-YwrInHyKUk1PU3avIRdiLyCpM++18Rs1NgyMXEAQC33rIXs/vro0A+stf4sT0Gf22Got+xRWB8Cm0tw+qkRzBA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11" - }, - "peerDependencies": { - "styled-components": ">= 2" - } - }, - "node_modules/babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" - }, - "node_modules/babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, - "dependencies": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true, - "dependencies": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true, - "dependencies": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true, - "dependencies": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - } - }, - "node_modules/babel-polyfill/node_modules/core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true - }, - "node_modules/babel-polyfill/node_modules/regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, - "dependencies": { - "babel-plugin-transform-flow-strip-types": "^6.22.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true, - "dependencies": { - "babel-plugin-syntax-jsx": "^6.3.13", - "babel-plugin-transform-react-display-name": "^6.23.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-plugin-transform-react-jsx-self": "^6.22.0", - "babel-plugin-transform-react-jsx-source": "^6.22.0", - "babel-preset-flow": "^6.23.0" - } - }, - "node_modules/babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "node_modules/babel-register/node_modules/core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-runtime/node_modules/core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", - "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", - "dev": true, - "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bindings/node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bl/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bluebird-lst": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", - "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5" - } - }, - "node_modules/boolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.3.tgz", - "integrity": "sha512-EqrTKXQX6Z3A2nRmMEIlAIfjQOgFnVO2nqZGpbcsPnYGWBwpFqzlrozU1dy+S2iqfYDLh26ef4KrgTxu9xQrxA==", - "dev": true, - "optional": true - }, - "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.0.tgz", - "integrity": "sha512-cd+5r1VLBwUqTrmnzW+D7ABkJUM6mr7uv1dv+6jRw4Rcl7tFIFHDqHPL98LhpGFn3dbAt3gtLxtrWp4m1kFrqg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", - "dev": true - }, - "node_modules/builder-util": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-22.9.1.tgz", - "integrity": "sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw==", - "dev": true, - "dependencies": { - "@types/debug": "^4.1.5", - "@types/fs-extra": "^9.0.1", - "7zip-bin": "~5.0.3", - "app-builder-bin": "3.5.10", - "bluebird-lst": "^1.0.9", - "builder-util-runtime": "8.7.2", - "chalk": "^4.1.0", - "debug": "^4.3.0", - "fs-extra": "^9.0.1", - "is-ci": "^2.0.0", - "js-yaml": "^3.14.0", - "source-map-support": "^0.5.19", - "stat-mode": "^1.0.0", - "temp-file": "^3.3.7" - } - }, - "node_modules/builder-util-runtime": { - "version": "8.7.2", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz", - "integrity": "sha512-xBqv+8bg6cfnzAQK1k3OGpfaHg+QkPgIgpEkXNhouZ0WiUkyZCftuRc2LYzQrLucFywpa14Xbc6+hTbpq83yRA==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=8.2.5" - } - }, - "node_modules/builder-util-runtime/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/builder-util-runtime/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/builder-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/builder-util/node_modules/app-builder-bin": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-3.5.10.tgz", - "integrity": "sha512-Jd+GW68lR0NeetgZDo47PdWBEPdnD+p0jEa7XaxjRC8u6Oo/wgJsfKUkORRgr2NpkD19IFKN50P6JYy04XHFLQ==", - "dev": true - }, - "node_modules/builder-util/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/builder-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/builder-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/builder-util/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/builder-util/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builder-util/node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/builder-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/builder-util/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/builder-util/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/builder-util/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/builder-util/node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/builder-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/builder-util/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", - "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "engines": { - "node": ">=4" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "engines": { - "node": "*" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/chromium-pickle-js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", - "dev": true - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.0.0.tgz", - "integrity": "sha512-C4hp+8GCIFVsUUiXcw+ce+7wexVWImw8rQrgMBFsqerx9LvvcGlwm6sMjQYAEmV/Xb87xc1b5Ttx505MSpZVqg==", - "dependencies": { - "slice-ansi": "^2.1.0", - "string-width": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", - "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/cloneable-readable/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/cloneable-readable/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/cloneable-readable/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codemirror": { - "version": "5.56.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.56.0.tgz", - "integrity": "sha512-MfKVmYgifXjQpLSgpETuih7A7WTTIsxvKfSLGseTY5+qt0E1UD1wblZGM6WLenORo8sgmf+3X+WTe2WF7mufyw==" - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-map/node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "node_modules/compare-versions": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.2.1.tgz", - "integrity": "sha512-2y2nHcopMG/NAyk6vWXlLs86XeM9sik4jmx1tKIgzMi9/RQ2eo758RGpxQO3ErihHmg0RlQITPqgz73y6s7quA==" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "optional": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", - "dev": true, - "dependencies": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/countable": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/countable/-/countable-3.0.1.tgz", - "integrity": "sha512-dz/sdi+RFpHJKMen5RAB9EKpCKd/q5WMfxG3SbdbQ3Pak4+SEPmDhVWZF0GTTHwjqjR+7DmiZHzZiFJ4qeAzmg==" - }, - "node_modules/create-emotion": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.2.12.tgz", - "integrity": "sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA==", - "dependencies": { - "@emotion/hash": "^0.6.2", - "@emotion/memoize": "^0.6.1", - "@emotion/stylis": "^0.7.0", - "@emotion/unitless": "^0.6.2", - "csstype": "^2.5.2", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10" - } - }, - "node_modules/create-react-class": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", - "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", - "dependencies": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.4.tgz", - "integrity": "sha512-lAJUJP3M6HxFXbqtGRc0iZrdyeN+WzOWeY0q/VnFzI+kqVrYIzC7bWlKqCW7oCIdzoPkvfp82EVvrTlQ8zsWQg==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "dependencies": { - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-compare/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", - "dev": true, - "optional": true - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/dmg-builder": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-22.9.1.tgz", - "integrity": "sha512-jc+DAirqmQrNT6KbDHdfEp8D1kD0DBTnsLhwUR3MX+hMBun5bT134LQzpdK0GKvd22GqF8L1Cz/NOgaVjscAXQ==", - "dev": true, - "dependencies": { - "app-builder-lib": "22.9.1", - "builder-util": "22.9.1", - "fs-extra": "^9.0.1", - "iconv-lite": "^0.6.2", - "js-yaml": "^3.14.0", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/dmg-builder/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dmg-builder/node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/dmg-builder/node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dmg-builder/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/dmg-builder/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "dependencies": { - "jsbn": "~0.1.0" - } - }, - "node_modules/ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", - "dev": true, - "dependencies": { - "jake": "^10.6.1" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/electron/-/electron-10.4.5.tgz", - "integrity": "sha512-sEJ71VvaPMm+Dqj/BncZVDoQRRKRO8SSQALcY1iiJL9Wuy8c1QAhm8LDOgqnwD0cf/9ZuN8Iqoq6gVJ206AzYw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@electron/get": "^1.0.1", - "@types/node": "^12.0.12", - "extract-zip": "^1.0.3" - }, - "bin": { - "electron": "cli.js" - }, - "engines": { - "node": ">= 8.6" - } - }, - "node_modules/electron-builder": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-22.9.1.tgz", - "integrity": "sha512-GXPt8l5Mxwm1QKYopUM6/Tdh9W3695G6Ax+IFyj5pQ51G4SD5L1uq4/RkPSsOgs3rP7jNSV6g6OfDzdtVufPdA==", - "dev": true, - "dependencies": { - "@types/yargs": "^15.0.5", - "app-builder-lib": "22.9.1", - "bluebird-lst": "^1.0.9", - "builder-util": "22.9.1", - "builder-util-runtime": "8.7.2", - "chalk": "^4.1.0", - "dmg-builder": "22.9.1", - "fs-extra": "^9.0.1", - "is-ci": "^2.0.0", - "lazy-val": "^1.0.4", - "read-config-file": "6.0.0", - "sanitize-filename": "^1.6.3", - "update-notifier": "^4.1.1", - "yargs": "^16.0.3" - }, - "bin": { - "electron-builder": "out/cli/cli.js", - "install-app-deps": "out/cli/install-app-deps.js" - }, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/electron-builder/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-builder/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/electron-builder/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/electron-builder/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/electron-builder/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/electron-builder/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/electron-builder/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/electron-builder/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-builder/node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/electron-builder/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-builder/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-builder/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-builder/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-builder/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-builder/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-builder/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-builder/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/electron-builder/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-builder/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-context-menu": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/electron-context-menu/-/electron-context-menu-0.15.0.tgz", - "integrity": "sha512-XLdtbX90NPkWycG3IzwtCmfX4ggu+lofNOW1nVRStb+ScFs49WTourW1k77Z4DTyThR3gUHg3UPXVBMbW1gNsg==", - "dependencies": { - "cli-truncate": "^2.0.0", - "electron-dl": "^1.2.0", - "electron-is-dev": "^1.0.1" - } - }, - "node_modules/electron-context-menu/node_modules/electron-is-dev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-1.1.0.tgz", - "integrity": "sha512-Z1qA/1oHNowGtSBIcWk0pcLEqYT/j+13xUw/MYOrBUOL4X7VN0i0KCTf5SqyvMPmW5pSPKbo28wkxMxzZ20YnQ==" - }, - "node_modules/electron-dl": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/electron-dl/-/electron-dl-1.14.0.tgz", - "integrity": "sha512-4okyei42a1mLsvLK7hLrIfd20EQzB18nIlLTwBV992aMSmTGLUEFRTmO1MfSslGNrzD8nuPuy1l/VxO8so4lig==", - "dependencies": { - "ext-name": "^5.0.0", - "pupa": "^1.0.0", - "unused-filename": "^1.0.0" - } - }, - "node_modules/electron-is-dev": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", - "integrity": "sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4=" - }, - "node_modules/electron-notarize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz", - "integrity": "sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-notarize/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-notarize/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-notarize/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/electron-notarize/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-notarize/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-notarize/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/electron-notarize/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-publish": { - "version": "22.9.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.9.1.tgz", - "integrity": "sha512-ducLjRJLEeU87FaTCWaUyDjCoLXHkawkltP2zqS/n2PyGke54ZIql0tBuUheht4EpR8AhFbVJ11spSn1gy8r6w==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^9.0.1", - "bluebird-lst": "^1.0.9", - "builder-util": "22.9.1", - "builder-util-runtime": "8.7.2", - "chalk": "^4.1.0", - "fs-extra": "^9.0.1", - "lazy-val": "^1.0.4", - "mime": "^2.4.6" - } - }, - "node_modules/electron-publish/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/electron-publish/node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/electron-publish/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/electron-publish/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/electron-publish/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-publish/node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/electron-publish/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-publish/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-publish/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-publish/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-rebuild": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-2.3.2.tgz", - "integrity": "sha512-VLd3iIn65PmYWmvL+nx0oKspbohkDUhCAz8I2EWbMJcOFzWKW1UXJZ+ZG53iEDJFldm9PahE4q2Bx3ns4bdzeQ==", - "dev": true, - "dependencies": { - "@malept/cross-spawn-promise": "^1.1.0", - "colors": "^1.3.3", - "debug": "^4.1.1", - "detect-libc": "^1.0.3", - "fs-extra": "^9.0.1", - "got": "^11.7.0", - "lzma-native": "^6.0.1", - "node-abi": "^2.19.1", - "node-gyp": "^7.1.0", - "ora": "^5.1.0", - "tar": "^6.0.5", - "yargs": "^16.0.0" - }, - "bin": { - "electron-rebuild": "lib/src/cli.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/electron-rebuild/node_modules/@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/electron-rebuild/node_modules/@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "dev": true, - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-rebuild/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-rebuild/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/electron-rebuild/node_modules/cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-rebuild/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/electron-rebuild/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/electron-rebuild/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/electron-rebuild/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-rebuild/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-rebuild/node_modules/defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-rebuild/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/electron-rebuild/node_modules/fs-extra": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", - "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-rebuild/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-rebuild/node_modules/got": { - "version": "11.8.0", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.0.tgz", - "integrity": "sha512-k9noyoIIY9EejuhaBNLyZ31D5328LeqnyPNXJQb2XlJZcKakLqN5m6O/ikhq/0lw56kUYS54fVm+D1x57YC9oQ==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/electron-rebuild/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/electron-rebuild/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-rebuild/node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/electron-rebuild/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron-rebuild/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-rebuild/node_modules/keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/electron-rebuild/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-rebuild/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/electron-rebuild/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/electron-rebuild/node_modules/node-abi": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", - "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", - "dev": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/electron-rebuild/node_modules/p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-rebuild/node_modules/responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "dependencies": { - "lowercase-keys": "^2.0.0" - } - }, - "node_modules/electron-rebuild/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-rebuild/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-rebuild/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/electron-rebuild/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/electron-rebuild/node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-rebuild/node_modules/yargs": { - "version": "16.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.1.tgz", - "integrity": "sha512-hAD1RcFP/wfgfxgMVswPE+z3tlPFtxG8/yWUrG2i17sTWGCGqWnxKcLTF4cUKDUK8fzokwsmO9H0TDkRbMHy8w==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/electron-window-state": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/electron-window-state/-/electron-window-state-4.1.1.tgz", - "integrity": "sha1-azT9wxs4UU3+yLfI97XUrdtnYy0=", - "dependencies": { - "deep-equal": "^1.0.1", - "jsonfile": "^2.2.3", - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/electron-window-state/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/electron/node_modules/@types/node": { - "version": "12.20.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.12.tgz", - "integrity": "sha512-KQZ1al2hKOONAs2MFv+yTQP1LkDWMrRJ9YCVRalXltOfXsBmH5IownLxQaiq0lnAHwAViLnh2aTYqrPcRGEbgg==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/emotion": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/emotion/-/emotion-9.2.12.tgz", - "integrity": "sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ==", - "dependencies": { - "babel-plugin-emotion": "^9.2.11", - "create-emotion": "^9.2.12" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dependencies": { - "iconv-lite": "~0.4.13" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-paths": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", - "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true, - "optional": true - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "optional": true, - "dependencies": { - "fill-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "optional": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-range/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "dependencies": { - "type": "^2.0.0" - } - }, - "node_modules/ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", - "dependencies": { - "mime-db": "^1.28.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "optional": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/formatcoords": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/formatcoords/-/formatcoords-1.1.3.tgz", - "integrity": "sha1-dS8FarL+NMHUrooZBIzgw44W7QM=" - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.2.1.tgz", - "integrity": "sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "optional": true, - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/glob-base/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/glob-watcher/node_modules/chokidar/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", - "bundleDependencies": [ - "node-pre-gyp" - ], - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/abbrev": { - "version": "1.1.1", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/ansi-regex": { - "version": "2.1.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/aproba": { - "version": "1.2.0", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/are-we-there-yet": { - "version": "1.1.5", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/balanced-match": { - "version": "1.0.0", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/brace-expansion": { - "version": "1.1.11", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/chownr": { - "version": "1.1.3", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/code-point-at": { - "version": "1.1.0", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/concat-map": { - "version": "0.0.1", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/console-control-strings": { - "version": "1.1.0", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/core-util-is": { - "version": "1.0.2", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/debug": { - "version": "3.2.6", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/deep-extend": { - "version": "0.6.0", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/delegates": { - "version": "1.0.0", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/detect-libc": { - "version": "1.0.3", - "extraneous": true, - "inBundle": true, - "license": "Apache-2.0", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/fs-minipass": { - "version": "1.2.7", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/fs.realpath": { - "version": "1.0.0", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/gauge": { - "version": "2.7.4", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/glob": { - "version": "7.1.6", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/has-unicode": { - "version": "2.0.1", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/iconv-lite": { - "version": "0.4.24", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/ignore-walk": { - "version": "3.0.3", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/inflight": { - "version": "1.0.6", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/inherits": { - "version": "2.0.4", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/ini": { - "version": "1.3.5", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "*" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/isarray": { - "version": "1.0.0", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/minimatch": { - "version": "3.0.4", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/minimist": { - "version": "0.0.8", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/minipass": { - "version": "2.9.0", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/minizlib": { - "version": "1.3.3", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/mkdirp": { - "version": "0.5.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/ms": { - "version": "2.1.2", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/needle": { - "version": "2.4.0", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/node-pre-gyp": { - "version": "0.14.0", - "extraneous": true, - "inBundle": true, - "license": "BSD-3-Clause", - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/nopt": { - "version": "4.0.1", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/npm-bundled": { - "version": "1.1.1", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/npm-packlist": { - "version": "1.4.7", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/npmlog": { - "version": "4.1.2", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/number-is-nan": { - "version": "1.0.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/object-assign": { - "version": "4.1.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/once": { - "version": "1.4.0", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/os-homedir": { - "version": "1.0.2", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/os-tmpdir": { - "version": "1.0.2", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/osenv": { - "version": "0.1.5", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/path-is-absolute": { - "version": "1.0.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/process-nextick-args": { - "version": "2.0.1", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/rc": { - "version": "1.2.8", - "extraneous": true, - "inBundle": true, - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/rc/node_modules/minimist": { - "version": "1.2.0", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/readable-stream": { - "version": "2.3.6", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/rimraf": { - "version": "2.7.1", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/safe-buffer": { - "version": "5.1.2", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/safer-buffer": { - "version": "2.1.2", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/sax": { - "version": "1.2.4", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/semver": { - "version": "5.7.1", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/set-blocking": { - "version": "2.0.0", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/signal-exit": { - "version": "3.0.2", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/string_decoder": { - "version": "1.1.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/string-width": { - "version": "1.0.2", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/strip-ansi": { - "version": "3.0.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/strip-json-comments": { - "version": "2.0.1", - "extraneous": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/tar": { - "version": "4.4.13", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/util-deprecate": { - "version": "1.0.2", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/wide-align": { - "version": "1.1.3", - "extraneous": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/wrappy": { - "version": "1.0.2", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/fsevents/node_modules/yallist": { - "version": "3.1.1", - "extraneous": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/glob-watcher/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/glob-watcher/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-agent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.2.0.tgz", - "integrity": "sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg==", - "dev": true, - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "core-js": "^3.6.5", - "es6-error": "^4.1.1", - "matcher": "^3.0.0", - "roarr": "^2.15.3", - "semver": "^7.3.2", - "serialize-error": "^7.0.1" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/global-agent/node_modules/core-js": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.12.1.tgz", - "integrity": "sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/global-agent/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "dependencies": { - "ini": "1.3.7" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", - "dev": true - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-tunnel-ng": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", - "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", - "dev": true, - "optional": true, - "dependencies": { - "encodeurl": "^1.0.2", - "lodash": "^4.17.10", - "npm-conf": "^1.1.3", - "tunnel": "^0.0.6" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globalthis": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz", - "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==", - "dev": true, - "optional": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" - }, - "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/gulp/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/gulp/node_modules/gulp-cli": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", - "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.1.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp/node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "node_modules/gulp/node_modules/v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp/node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "node_modules/gulp/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp/node_modules/y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "node_modules/gulp/node_modules/yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "node_modules/gulp/node_modules/yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0" - } - }, - "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "dependencies": { - "glogg": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/har-validator/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/har-validator/node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/har-validator/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/highlight.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.2.1.tgz", - "integrity": "sha512-A+sckVPIb9zQTUydC9lpRX1qRFO/N0OKEh0NwIr65ckvWA/oMY8v9P3+kGRK3w2ULSh9E8v5MszXafodQ6039g==", - "deprecated": "Potential vulnerability. Please upgrade to @latest", - "engines": { - "node": "*" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" - }, - "node_modules/home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew==", - "dev": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "1.0.0-beta.5.2", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", - "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", - "dev": true, - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/immer": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.5.tgz", - "integrity": "sha512-TtRAKZyuqld2eYjvWgXISLJ0ZlOl1OOTzRmrmiY8SlB0dnAhZ1OiykIDL5KDFNaPHDXiLfGQFNJGtet8z8AEmg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-primitive": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true - }, - "node_modules/is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isbinaryfile": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", - "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", - "dev": true, - "dependencies": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-haste-map/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-haste-map/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-resolve/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-resolve/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/resolve": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", - "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.0.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jest-resolve/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-serializer/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-sha512": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", - "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "node_modules/jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", - "dev": true - }, - "node_modules/keytar": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.0.0.tgz", - "integrity": "sha512-uvmdb5ZE2NgegcUDrmhutI9BUh+bTbt8+bwPliOMiLiWmrV76Tfg6DyI7Ud903a/4xlkJpKGnR0TyRpRyFOc3A==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^3.0.0", - "prebuild-install": "5.3.5" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lazy-val": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz", - "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==", - "dev": true - }, - "node_modules/lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.4.tgz", - "integrity": "sha1-3MHXVS4VCgZABzupyzHXDwMpUOc=" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dependencies": { - "js-tokens": "^3.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lzma-native": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/lzma-native/-/lzma-native-6.0.1.tgz", - "integrity": "sha512-O6oWF0xe1AFvOCjU8uOZBZ/lhjaMNwHfVNaqVMqmoQXlRwBcFWpCAToiZOdXcKVMdo/5s/D0a2QgA5laMErxHQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^1.6.0", - "node-pre-gyp": "^0.11.0", - "readable-stream": "^2.3.5", - "rimraf": "^2.7.1" - }, - "bin": { - "lzmajs": "bin/lzmajs" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/lzma-native/node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", - "dev": true - }, - "node_modules/lzma-native/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/lzma-native/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lzma-native/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha1-GA8fnr74sOY45BZq1S24eb6y/8U=" - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matcher": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", - "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", - "dev": true, - "optional": true, - "dependencies": { - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true, - "optional": true - }, - "node_modules/md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", - "dependencies": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" - } - }, - "node_modules/memoize-one": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.4.tgz", - "integrity": "sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minipass/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/minipass/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/mkdirp/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/modify-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/modify-filename/-/modify-filename-1.1.0.tgz", - "integrity": "sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/needle": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", - "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-abi": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.16.0.tgz", - "integrity": "sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA==", - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-addon-api": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz", - "integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg==" - }, - "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/node-gyp/node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/node-pre-gyp/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/node-pre-gyp/node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/node-pre-gyp/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", - "dev": true, - "optional": true, - "dependencies": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "dev": true, - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.defaults/node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.map/node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "optional": true, - "dependencies": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.reduce/node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.1.0.tgz", - "integrity": "sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.4.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-each-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.1.0.tgz", - "integrity": "sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "optional": true, - "dependencies": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "node_modules/prebuild-install": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.5.tgz", - "integrity": "sha512-YmMO7dph9CYKi5IR/BzjOJlRzpxGGVo1EsLSUZ0mt/Mq0HWZIHOKHHcHdT69yG54C9m6i45GpItwRHpk0Py7Uw==", - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", - "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/prop-types/node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true, - "optional": true - }, - "node_modules/psl": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", - "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-1.0.0.tgz", - "integrity": "sha1-mpVopa9+ZXuEYqbp1TKHQ1YM7/Y=", - "engines": { - "node": ">=4" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/randomatic/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/re-resizable": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/re-resizable/-/re-resizable-6.5.4.tgz", - "integrity": "sha512-7T3L1lexB2zkZIDmzRJbwdq+xGFuRkrEVQIf5hBPnh7JuS9kG9Yc8XgIaxTWic1kU7jVlDgqzfId/gvmpBCjpA==", - "dependencies": { - "fast-memoize": "^2.5.1" - } - }, - "node_modules/react": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", - "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-datetime": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/react-datetime/-/react-datetime-2.14.0.tgz", - "integrity": "sha512-BUWIzMLRGzWQSYyJf0mivLyDgw4KCTFYn8zW50UTl2qB3xd/BH/TgPzfgDvAScNbiXwWpXei/GCoc6nI2J3GgA==", - "dependencies": { - "create-react-class": "^15.5.2", - "object-assign": "^3.0.0", - "prop-types": "^15.5.7", - "react-onclickoutside": "^6.5.0" - }, - "peerDependencies": { - "moment": ">=2.16.0", - "react": ">=0.13", - "react-dom": ">=0.13" - } - }, - "node_modules/react-datetime/node_modules/object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.15.0" - }, - "peerDependencies": { - "react": "^16.0.0" - } - }, - "node_modules/react-dom/node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/react-dom/node_modules/prop-types/node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/react-input-autosize": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.2.tgz", - "integrity": "sha512-jQJgYCA3S0j+cuOwzuCd1OjmBmnZLdqQdiLKRYrsMMzbjUrVDS5RvJUDwJqA7sKuksDuzFtm6hZGKFu7Mjk5aw==", - "dependencies": { - "prop-types": "^15.5.8" - }, - "peerDependencies": { - "react": "^0.14.9 || ^15.3.0 || ^16.0.0-rc || ^16.0" - } - }, - "node_modules/react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-motion": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", - "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", - "dependencies": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" - }, - "peerDependencies": { - "react": "^0.14.9 || ^15.3.0 || ^16.0.0" - } - }, - "node_modules/react-motion/node_modules/performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, - "node_modules/react-onclickoutside": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz", - "integrity": "sha512-p84kBqGaMoa7VYT0vZ/aOYRfJB+gw34yjpda1Z5KeLflg70HipZOT+MXQenEhdkPAABuE2Astq4zEPdMqUQxcg==", - "peerDependencies": { - "react": "^15.5.x || ^16.x", - "react-dom": "^15.5.x || ^16.x" - } - }, - "node_modules/react-redux": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", - "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==", - "dependencies": { - "hoist-non-react-statics": "^2.5.0", - "invariant": "^2.0.0", - "lodash": "^4.17.5", - "lodash-es": "^4.17.5", - "loose-envify": "^1.1.0", - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0-0 || ^16.0.0-0", - "redux": "^2.0.0 || ^3.0.0 || ^4.0.0-0" - } - }, - "node_modules/react-redux/node_modules/lodash-es": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.10.tgz", - "integrity": "sha512-iesFYPmxYYGTcmQK0sL8bX3TGHyM6b2qREaB4kamHfQyfPJP0xgoGxp19nsH16nsfquLdiyKyX3mQkfiSGV8Rg==" - }, - "node_modules/react-select": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/react-select/-/react-select-2.4.3.tgz", - "integrity": "sha512-cmxNaiHpviRYkojeW9rGEUJ4jpX7QTmPe2wcscwA4d1lStzw/cJtr4ft5H2O/YhfpkrcwaLghu3XmEYdXhBo8Q==", - "dependencies": { - "classnames": "^2.2.5", - "emotion": "^9.1.2", - "memoize-one": "^5.0.0", - "prop-types": "^15.6.0", - "raf": "^3.4.0", - "react-input-autosize": "^2.2.1", - "react-transition-group": "^2.2.1" - }, - "peerDependencies": { - "react": "^15.3.0 || ^16.0.0", - "react-dom": "^15.3.0 || ^16.0.0" - } - }, - "node_modules/react-test-renderer": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz", - "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/react-test-renderer/node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/react-toggle-button": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/react-toggle-button/-/react-toggle-button-2.2.0.tgz", - "integrity": "sha1-obkhQ6oN9BRkL8sUHwh59UW8Wok=", - "dependencies": { - "prop-types": "^15.6.0", - "react-motion": "^0.5.2" - }, - "peerDependencies": { - "react": ">=0.13.2 || ^0.14 || ^15.0.0" - } - }, - "node_modules/react-tooltip": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-3.10.0.tgz", - "integrity": "sha512-GGdxJvM1zSFztkTP7gCQbLTstWr1OOoMpJ5WZUGhimj0nhRY+MPz+92MpEnKmj0cftJ9Pd/M6FfSl0sfzmZWkg==", - "dependencies": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0" - }, - "engines": { - "node": ">=4.2.1" - }, - "peerDependencies": { - "react": ">=0.14", - "react-dom": ">=0.14" - } - }, - "node_modules/react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dependencies": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": ">=15.0.0", - "react-dom": ">=15.0.0" - } - }, - "node_modules/react-transition-group/node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/react-transition-group/node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/read-config-file": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.0.0.tgz", - "integrity": "sha512-PHjROSdpceKUmqS06wqwP92VrM46PZSTubmNIMJ5DrMwg1OgenSTSEHIkCa6TiOJ+y/J0xnG1fFwG3M+Oi1aNA==", - "dev": true, - "dependencies": { - "dotenv": "^8.2.0", - "dotenv-expand": "^5.1.0", - "js-yaml": "^3.13.1", - "json5": "^2.1.2", - "lazy-val": "^1.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/read-config-file/node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "dependencies": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", - "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", - "dev": true - }, - "node_modules/regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "optional": true, - "dependencies": { - "is-equal-shallow": "^0.1.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/request/node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "dependencies": { - "mime-db": "1.44.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/request/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/request/node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/reselect": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", - "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" - }, - "node_modules/resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", - "dependencies": { - "path-parse": "^1.0.6" - } - }, - "node_modules/resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", - "dev": true - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "dependencies": { - "value-or-function": "^3.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/roarr": { - "version": "2.15.4", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", - "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", - "dev": true, - "optional": true, - "dependencies": { - "boolean": "^3.0.1", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/roboto-fontface": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", - "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dev": true, - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", - "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true, - "optional": true - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "dependencies": { - "sver-compat": "^1.5.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "optional": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "node_modules/signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "engines": { - "node": ">=4" - } - }, - "node_modules/smalltalk": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/smalltalk/-/smalltalk-2.5.1.tgz", - "integrity": "sha512-LZYd80hd9DkXBUnm5AyMdMNx9XCxYZZskmrp3W6M77jhOEvzQ9SpDqtvDE7e8y1lfMeIAG9nIFU6Y5quZoXV5g==", - "dependencies": { - "currify": "^2.0.3", - "es6-promise": "^4.1.1", - "fullstore": "^1.0.0" - } - }, - "node_modules/smalltalk/node_modules/currify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/currify/-/currify-2.0.6.tgz", - "integrity": "sha512-F0lbcoBkA2FMcejFeHJkDEhQ1AvVkTpkn9PMzJch+7mHy5WdteZ9t+nhT6cOdga4uRay3rjvprgp8tUkixFy8w==" - }, - "node_modules/smalltalk/node_modules/fullstore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fullstore/-/fullstore-1.1.0.tgz", - "integrity": "sha512-XNlCWr3KBIL97G8mTR+dZ/J648ECCffflfFRgZW3Zm7pO0PYnH/ZCbwZjV1Dw4LrrDdhV6gnayiIcmdIY4JTsw==" - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", - "dependencies": { - "sort-keys": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "dependencies": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true, - "optional": true - }, - "node_modules/sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "dashdash": "^1.12.0", - "getpass": "^0.1.1", - "safer-buffer": "^2.0.2" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - }, - "optionalDependencies": { - "bcrypt-pbkdf": "^1.0.0", - "ecc-jsbn": "~0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - } - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", - "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stat-mode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", - "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/styled-components": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.1.1.tgz", - "integrity": "sha512-1ps8ZAYu2Husx+Vz8D+MvXwEwvMwFv+hqqUwhNlDN5ybg6A+3xyW1ECrAgywhvXapNfXiz79jJyU0x22z0FFTg==", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^0.8.8", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" - } - }, - "node_modules/styled-components/node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "node_modules/styled-components/node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/styled-components/node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/styled-components/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/styled-system": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", - "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", - "dependencies": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, - "node_modules/stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==" - }, - "node_modules/stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "peerDependencies": { - "stylis": "^3.5.0" - } - }, - "node_modules/sumchecker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", - "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/sumchecker/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/sumchecker/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/taboverride": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/taboverride/-/taboverride-4.0.3.tgz", - "integrity": "sha1-M5JAEqLzr17mCcXzDhvSanX75qk=" - }, - "node_modules/tar": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", - "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.0.0" - } - }, - "node_modules/tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/temp-file": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.3.7.tgz", - "integrity": "sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g==", - "dev": true, - "dependencies": { - "async-exit-hook": "^2.0.1", - "fs-extra": "^8.1.0" - } - }, - "node_modules/temp-file/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/temp-file/node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/through2/node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tinymce": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/tinymce/-/tinymce-5.8.0.tgz", - "integrity": "sha512-1bOI3k+1D76rVjAJC3XkHezXJVghurnKBDREF1STHBLTQUY17XTbaDNJUxNgJqJHa2xg1udd5I1bzdfSd77DGw==" - }, - "node_modules/tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "dependencies": { - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/touch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/touch/-/touch-2.0.2.tgz", - "integrity": "sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A==", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "dev": true, - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undertaker": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", - "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unused-filename": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unused-filename/-/unused-filename-1.0.0.tgz", - "integrity": "sha1-00CID3GuIRXrqhMlvvBcxmhEacY=", - "dependencies": { - "modify-filename": "^1.1.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "dependencies": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/update-notifier/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/update-notifier/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true, - "bin": { - "user-home": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "dependencies": { - "user-home": "^1.1.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl/node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "dependencies": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } + "dependencies": { + "7zip-bin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", + "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", + "dev": true }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } + "7zip-bin-linux": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz", + "integrity": "sha512-Wv1uEEeHbTiS1+ycpwUxYNuIcyohU6Y6vEqY3NquBkeqy0YhVdsNUGsj0XKSRciHR6LoJSEUuqYUexmws3zH7Q==", + "optional": true }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } + "7zip-bin-mac": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz", + "integrity": "sha1-Pmh3i78JJq3GgVlCcHRQXUdVXAI=", + "optional": true }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } + "7zip-bin-win": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz", + "integrity": "sha512-uPHXapEmUtlUKTBx4asWMlxtFUWXzEY0KVEgU7QKhgO2LJzzM3kYxM6yOyUZTtYE6mhK4dDn3FDut9SCQWHzgg==", + "optional": true }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - }, - "dependencies": { "@babel/code-frame": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", @@ -21536,30 +2358,6 @@ "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", "dev": true }, - "7zip-bin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.0.3.tgz", - "integrity": "sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA==", - "dev": true - }, - "7zip-bin-linux": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/7zip-bin-linux/-/7zip-bin-linux-1.3.1.tgz", - "integrity": "sha512-Wv1uEEeHbTiS1+ycpwUxYNuIcyohU6Y6vEqY3NquBkeqy0YhVdsNUGsj0XKSRciHR6LoJSEUuqYUexmws3zH7Q==", - "optional": true - }, - "7zip-bin-mac": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/7zip-bin-mac/-/7zip-bin-mac-1.0.1.tgz", - "integrity": "sha1-Pmh3i78JJq3GgVlCcHRQXUdVXAI=", - "optional": true - }, - "7zip-bin-win": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/7zip-bin-win/-/7zip-bin-win-2.2.0.tgz", - "integrity": "sha512-uPHXapEmUtlUKTBx4asWMlxtFUWXzEY0KVEgU7QKhgO2LJzzM3kYxM6yOyUZTtYE6mhK4dDn3FDut9SCQWHzgg==", - "optional": true - }, "abab": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", @@ -21609,8 +2407,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "ansi-align": { "version": "3.0.0", @@ -21737,8 +2534,8 @@ "integrity": "sha512-KfXim/fiNwFW2SKffsjEMdAU7RbbEXn62x5YyXle1b4j9X/wEHW9iwox8De6y0hJdR+/kCC/49lI+VgNwLhV7A==", "dev": true, "requires": { - "@develar/schema-utils": "~2.6.5", "7zip-bin": "~5.0.3", + "@develar/schema-utils": "~2.6.5", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", "builder-util": "22.9.1", @@ -22648,24 +3445,24 @@ "dev": true, "optional": true }, - "string_decoder": { - "version": "1.1.1", + "string-width": { + "version": "1.0.2", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "string-width": { - "version": "1.0.2", + "string_decoder": { + "version": "1.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -23603,9 +4400,9 @@ "integrity": "sha512-5hN/XOaYu4ZQUS6F+5CXE6jTo+NAnVqAxDuKGSaHWb9bejfv/rluChTLoY3/nJh7RFjkoyVjvFJv7zQDB1QmHw==", "dev": true, "requires": { + "7zip-bin": "~5.0.3", "@types/debug": "^4.1.5", "@types/fs-extra": "^9.0.1", - "7zip-bin": "~5.0.3", "app-builder-bin": "3.5.10", "bluebird-lst": "^1.0.9", "builder-util-runtime": "8.7.2", @@ -26587,22 +7384,26 @@ "abbrev": { "version": "1.1.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "ansi-regex": { "version": "2.1.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "are-we-there-yet": { "version": "1.1.5", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -26611,12 +7412,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -26625,32 +7428,38 @@ "chownr": { "version": "1.1.3", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "code-point-at": { "version": "1.1.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "debug": { "version": "3.2.6", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "ms": "^2.1.1" } @@ -26658,22 +7467,26 @@ "deep-extend": { "version": "0.6.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "delegates": { "version": "1.0.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "detect-libc": { "version": "1.0.3", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "fs-minipass": { "version": "1.2.7", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "minipass": "^2.6.0" } @@ -26681,12 +7494,14 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "gauge": { "version": "2.7.4", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -26701,7 +7516,8 @@ "glob": { "version": "7.1.6", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -26714,12 +7530,14 @@ "has-unicode": { "version": "2.0.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "iconv-lite": { "version": "0.4.24", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -26727,7 +7545,8 @@ "ignore-walk": { "version": "3.0.3", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "minimatch": "^3.0.4" } @@ -26735,7 +7554,8 @@ "inflight": { "version": "1.0.6", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -26744,17 +7564,20 @@ "inherits": { "version": "2.0.4", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -26762,12 +7585,14 @@ "isarray": { "version": "1.0.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "minimatch": { "version": "3.0.4", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -26775,12 +7600,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "minipass": { "version": "2.9.0", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -26789,7 +7616,8 @@ "minizlib": { "version": "1.3.3", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "minipass": "^2.9.0" } @@ -26797,7 +7625,8 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -26805,12 +7634,14 @@ "ms": { "version": "2.1.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "needle": { "version": "2.4.0", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -26820,7 +7651,8 @@ "node-pre-gyp": { "version": "0.14.0", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", @@ -26837,7 +7669,8 @@ "nopt": { "version": "4.0.1", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "abbrev": "1", "osenv": "^0.1.4" @@ -26846,7 +7679,8 @@ "npm-bundled": { "version": "1.1.1", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "npm-normalize-package-bin": "^1.0.1" } @@ -26854,12 +7688,14 @@ "npm-normalize-package-bin": { "version": "1.0.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "npm-packlist": { "version": "1.4.7", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" @@ -26868,7 +7704,8 @@ "npmlog": { "version": "4.1.2", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -26879,17 +7716,20 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "once": { "version": "1.4.0", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -26897,17 +7737,20 @@ "os-homedir": { "version": "1.0.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "osenv": { "version": "0.1.5", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -26916,17 +7759,20 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "process-nextick-args": { "version": "2.0.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "rc": { "version": "1.2.8", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -26937,14 +7783,16 @@ "minimist": { "version": "1.2.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true } } }, "readable-stream": { "version": "2.3.6", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -26958,7 +7806,8 @@ "rimraf": { "version": "2.7.1", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "glob": "^7.1.3" } @@ -26966,55 +7815,64 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "sax": { "version": "1.2.4", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "semver": { "version": "5.7.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, - "extraneous": true - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "extraneous": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "dev": true, + "optional": true }, "string-width": { "version": "1.0.2", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "strip-ansi": { "version": "3.0.1", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -27022,12 +7880,14 @@ "strip-json-comments": { "version": "2.0.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "tar": { "version": "4.4.13", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", @@ -27041,12 +7901,14 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "wide-align": { "version": "1.1.3", "bundled": true, - "extraneous": true, + "dev": true, + "optional": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -27054,12 +7916,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "extraneous": true + "dev": true, + "optional": true }, "yallist": { "version": "3.1.1", "bundled": true, - "extraneous": true + "dev": true, + "optional": true } } }, @@ -28972,8 +9836,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "26.0.0", @@ -31899,8 +12762,7 @@ "react-onclickoutside": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.7.1.tgz", - "integrity": "sha512-p84kBqGaMoa7VYT0vZ/aOYRfJB+gw34yjpda1Z5KeLflg70HipZOT+MXQenEhdkPAABuE2Astq4zEPdMqUQxcg==", - "requires": {} + "integrity": "sha512-p84kBqGaMoa7VYT0vZ/aOYRfJB+gw34yjpda1Z5KeLflg70HipZOT+MXQenEhdkPAABuE2Astq4zEPdMqUQxcg==" }, "react-redux": { "version": "5.0.7", @@ -33071,14 +13933,6 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "string-length": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", @@ -33116,6 +13970,14 @@ "strip-ansi": "^3.0.0" } }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -33223,8 +14085,7 @@ "stylis-rule-sheet": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", - "requires": {} + "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==" }, "sumchecker": { "version": "3.0.1", @@ -34379,8 +15240,7 @@ "version": "7.4.0", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz", "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==", - "dev": true, - "requires": {} + "dev": true }, "xdg-basedir": { "version": "4.0.0", diff --git a/packages/app-mobile/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js b/packages/app-mobile/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js index e7a0b3f6307..48c7c407b71 100644 --- a/packages/app-mobile/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js +++ b/packages/app-mobile/pluginAssets/highlight.js/atom-one-dark-reasonable.css.base64.js @@ -1 +1 @@ -module.exports = `LyoKCkF0b20gT25lIERhcmsgV2l0aCBzdXBwb3J0IGZvciBSZWFzb25NTCBieSBHaWRpIE1vcnJpcywgYmFzZWQgb2ZmIHdvcmsgYnkgRGFuaWVsIEdhbWFnZQoKT3JpZ2luYWwgT25lIERhcmsgU3ludGF4IHRoZW1lIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2F0b20vb25lLWRhcmstc3ludGF4CgoqLwouaGxqcyB7CiAgZGlzcGxheTogYmxvY2s7CiAgb3ZlcmZsb3cteDogYXV0bzsKICBwYWRkaW5nOiAwLjVlbTsKICBjb2xvcjogI2FiYjJiZjsKICBiYWNrZ3JvdW5kOiAjMjgyYzM0Owp9Ci5obGpzLWtleXdvcmQsIC5obGpzLW9wZXJhdG9yIHsKICBjb2xvcjogI0Y5MjY3MjsKfQouaGxqcy1wYXR0ZXJuLW1hdGNoIHsKICBjb2xvcjogI0Y5MjY3MjsKfQouaGxqcy1wYXR0ZXJuLW1hdGNoIC5obGpzLWNvbnN0cnVjdG9yIHsKICBjb2xvcjogIzYxYWVlZTsKfQouaGxqcy1mdW5jdGlvbiB7CiAgY29sb3I6ICM2MWFlZWU7Cn0KLmhsanMtZnVuY3Rpb24gLmhsanMtcGFyYW1zIHsKICBjb2xvcjogI0E2RTIyRTsKfQouaGxqcy1mdW5jdGlvbiAuaGxqcy1wYXJhbXMgLmhsanMtdHlwaW5nIHsKICBjb2xvcjogI0ZEOTcxRjsKfQouaGxqcy1tb2R1bGUtYWNjZXNzIC5obGpzLW1vZHVsZSB7CiAgY29sb3I6ICM3ZTU3YzI7Cn0KLmhsanMtY29uc3RydWN0b3IgewogIGNvbG9yOiAjZTJiOTNkOwp9Ci5obGpzLWNvbnN0cnVjdG9yIC5obGpzLXN0cmluZyB7CiAgY29sb3I6ICM5Q0NDNjU7Cn0KLmhsanMtY29tbWVudCwgLmhsanMtcXVvdGUgewogIGNvbG9yOiAjYjE4ZWIxOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQouaGxqcy1kb2N0YWcsIC5obGpzLWZvcm11bGEgewogIGNvbG9yOiAjYzY3OGRkOwp9Ci5obGpzLXNlY3Rpb24sIC5obGpzLW5hbWUsIC5obGpzLXNlbGVjdG9yLXRhZywgLmhsanMtZGVsZXRpb24sIC5obGpzLXN1YnN0IHsKICBjb2xvcjogI2UwNmM3NTsKfQouaGxqcy1saXRlcmFsIHsKICBjb2xvcjogIzU2YjZjMjsKfQouaGxqcy1zdHJpbmcsIC5obGpzLXJlZ2V4cCwgLmhsanMtYWRkaXRpb24sIC5obGpzLWF0dHJpYnV0ZSwgLmhsanMtbWV0YS1zdHJpbmcgewogIGNvbG9yOiAjOThjMzc5Owp9Ci5obGpzLWJ1aWx0X2luLCAuaGxqcy1jbGFzcyAuaGxqcy10aXRsZSB7CiAgY29sb3I6ICNlNmMwN2I7Cn0KLmhsanMtYXR0ciwgLmhsanMtdmFyaWFibGUsIC5obGpzLXRlbXBsYXRlLXZhcmlhYmxlLCAuaGxqcy10eXBlLCAuaGxqcy1zZWxlY3Rvci1jbGFzcywgLmhsanMtc2VsZWN0b3ItYXR0ciwgLmhsanMtc2VsZWN0b3ItcHNldWRvLCAuaGxqcy1udW1iZXIgewogIGNvbG9yOiAjZDE5YTY2Owp9Ci5obGpzLXN5bWJvbCwgLmhsanMtYnVsbGV0LCAuaGxqcy1saW5rLCAuaGxqcy1tZXRhLCAuaGxqcy1zZWxlY3Rvci1pZCwgLmhsanMtdGl0bGUgewogIGNvbG9yOiAjNjFhZWVlOwp9Ci5obGpzLWVtcGhhc2lzIHsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KLmhsanMtc3Ryb25nIHsKICBmb250LXdlaWdodDogYm9sZDsKfQouaGxqcy1saW5rIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQo=`; \ No newline at end of file +module.exports = `cHJlIGNvZGUuaGxqc3tkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjFlbX1jb2RlLmhsanN7cGFkZGluZzozcHggNXB4fS5obGpze2NvbG9yOiNhYmIyYmY7YmFja2dyb3VuZDojMjgyYzM0fS5obGpzLWtleXdvcmQsLmhsanMtb3BlcmF0b3IsLmhsanMtcGF0dGVybi1tYXRjaHtjb2xvcjojZjkyNjcyfS5obGpzLWZ1bmN0aW9uLC5obGpzLXBhdHRlcm4tbWF0Y2ggLmhsanMtY29uc3RydWN0b3J7Y29sb3I6IzYxYWVlZX0uaGxqcy1mdW5jdGlvbiAuaGxqcy1wYXJhbXN7Y29sb3I6I2E2ZTIyZX0uaGxqcy1mdW5jdGlvbiAuaGxqcy1wYXJhbXMgLmhsanMtdHlwaW5ne2NvbG9yOiNmZDk3MWZ9LmhsanMtbW9kdWxlLWFjY2VzcyAuaGxqcy1tb2R1bGV7Y29sb3I6IzdlNTdjMn0uaGxqcy1jb25zdHJ1Y3Rvcntjb2xvcjojZTJiOTNkfS5obGpzLWNvbnN0cnVjdG9yIC5obGpzLXN0cmluZ3tjb2xvcjojOWNjYzY1fS5obGpzLWNvbW1lbnQsLmhsanMtcXVvdGV7Y29sb3I6I2IxOGViMTtmb250LXN0eWxlOml0YWxpY30uaGxqcy1kb2N0YWcsLmhsanMtZm9ybXVsYXtjb2xvcjojYzY3OGRkfS5obGpzLWRlbGV0aW9uLC5obGpzLW5hbWUsLmhsanMtc2VjdGlvbiwuaGxqcy1zZWxlY3Rvci10YWcsLmhsanMtc3Vic3R7Y29sb3I6I2UwNmM3NX0uaGxqcy1saXRlcmFse2NvbG9yOiM1NmI2YzJ9LmhsanMtYWRkaXRpb24sLmhsanMtYXR0cmlidXRlLC5obGpzLW1ldGEgLmhsanMtc3RyaW5nLC5obGpzLXJlZ2V4cCwuaGxqcy1zdHJpbmd7Y29sb3I6Izk4YzM3OX0uaGxqcy1idWlsdF9pbiwuaGxqcy1jbGFzcyAuaGxqcy10aXRsZSwuaGxqcy10aXRsZS5jbGFzc197Y29sb3I6I2U2YzA3Yn0uaGxqcy1hdHRyLC5obGpzLW51bWJlciwuaGxqcy1zZWxlY3Rvci1hdHRyLC5obGpzLXNlbGVjdG9yLWNsYXNzLC5obGpzLXNlbGVjdG9yLXBzZXVkbywuaGxqcy10ZW1wbGF0ZS12YXJpYWJsZSwuaGxqcy10eXBlLC5obGpzLXZhcmlhYmxle2NvbG9yOiNkMTlhNjZ9LmhsanMtYnVsbGV0LC5obGpzLWxpbmssLmhsanMtbWV0YSwuaGxqcy1zZWxlY3Rvci1pZCwuaGxqcy1zeW1ib2wsLmhsanMtdGl0bGV7Y29sb3I6IzYxYWVlZX0uaGxqcy1lbXBoYXNpc3tmb250LXN0eWxlOml0YWxpY30uaGxqcy1zdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfS5obGpzLWxpbmt7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX0=`; \ No newline at end of file diff --git a/packages/app-mobile/pluginAssets/highlight.js/atom-one-light.css.base64.js b/packages/app-mobile/pluginAssets/highlight.js/atom-one-light.css.base64.js index 0223dfcb04c..0fd3fa8a183 100644 --- a/packages/app-mobile/pluginAssets/highlight.js/atom-one-light.css.base64.js +++ b/packages/app-mobile/pluginAssets/highlight.js/atom-one-light.css.base64.js @@ -1 +1 @@ -module.exports = `LyoKCkF0b20gT25lIExpZ2h0IGJ5IERhbmllbCBHYW1hZ2UKT3JpZ2luYWwgT25lIExpZ2h0IFN5bnRheCB0aGVtZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hdG9tL29uZS1saWdodC1zeW50YXgKCmJhc2U6ICAgICNmYWZhZmEKbW9uby0xOiAgIzM4M2E0Mgptb25vLTI6ICAjNjg2Yjc3Cm1vbm8tMzogICNhMGExYTcKaHVlLTE6ICAgIzAxODRiYgpodWUtMjogICAjNDA3OGYyCmh1ZS0zOiAgICNhNjI2YTQKaHVlLTQ6ICAgIzUwYTE0ZgpodWUtNTogICAjZTQ1NjQ5Cmh1ZS01LTI6ICNjOTEyNDMKaHVlLTY6ICAgIzk4NjgwMQpodWUtNi0yOiAjYzE4NDAxCgoqLwoKLmhsanMgewogIGRpc3BsYXk6IGJsb2NrOwogIG92ZXJmbG93LXg6IGF1dG87CiAgcGFkZGluZzogMC41ZW07CiAgY29sb3I6ICMzODNhNDI7CiAgYmFja2dyb3VuZDogI2ZhZmFmYTsKfQoKLmhsanMtY29tbWVudCwKLmhsanMtcXVvdGUgewogIGNvbG9yOiAjYTBhMWE3OwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmhsanMtZG9jdGFnLAouaGxqcy1rZXl3b3JkLAouaGxqcy1mb3JtdWxhIHsKICBjb2xvcjogI2E2MjZhNDsKfQoKLmhsanMtc2VjdGlvbiwKLmhsanMtbmFtZSwKLmhsanMtc2VsZWN0b3ItdGFnLAouaGxqcy1kZWxldGlvbiwKLmhsanMtc3Vic3QgewogIGNvbG9yOiAjZTQ1NjQ5Owp9CgouaGxqcy1saXRlcmFsIHsKICBjb2xvcjogIzAxODRiYjsKfQoKLmhsanMtc3RyaW5nLAouaGxqcy1yZWdleHAsCi5obGpzLWFkZGl0aW9uLAouaGxqcy1hdHRyaWJ1dGUsCi5obGpzLW1ldGEtc3RyaW5nIHsKICBjb2xvcjogIzUwYTE0ZjsKfQoKLmhsanMtYnVpbHRfaW4sCi5obGpzLWNsYXNzIC5obGpzLXRpdGxlIHsKICBjb2xvcjogI2MxODQwMTsKfQoKLmhsanMtYXR0ciwKLmhsanMtdmFyaWFibGUsCi5obGpzLXRlbXBsYXRlLXZhcmlhYmxlLAouaGxqcy10eXBlLAouaGxqcy1zZWxlY3Rvci1jbGFzcywKLmhsanMtc2VsZWN0b3ItYXR0ciwKLmhsanMtc2VsZWN0b3ItcHNldWRvLAouaGxqcy1udW1iZXIgewogIGNvbG9yOiAjOTg2ODAxOwp9CgouaGxqcy1zeW1ib2wsCi5obGpzLWJ1bGxldCwKLmhsanMtbGluaywKLmhsanMtbWV0YSwKLmhsanMtc2VsZWN0b3ItaWQsCi5obGpzLXRpdGxlIHsKICBjb2xvcjogIzQwNzhmMjsKfQoKLmhsanMtZW1waGFzaXMgewogIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmhsanMtc3Ryb25nIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKLmhsanMtbGluayB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0K`; \ No newline at end of file +module.exports = `cHJlIGNvZGUuaGxqc3tkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjFlbX1jb2RlLmhsanN7cGFkZGluZzozcHggNXB4fS5obGpze2NvbG9yOiMzODNhNDI7YmFja2dyb3VuZDojZmFmYWZhfS5obGpzLWNvbW1lbnQsLmhsanMtcXVvdGV7Y29sb3I6I2EwYTFhNztmb250LXN0eWxlOml0YWxpY30uaGxqcy1kb2N0YWcsLmhsanMtZm9ybXVsYSwuaGxqcy1rZXl3b3Jke2NvbG9yOiNhNjI2YTR9LmhsanMtZGVsZXRpb24sLmhsanMtbmFtZSwuaGxqcy1zZWN0aW9uLC5obGpzLXNlbGVjdG9yLXRhZywuaGxqcy1zdWJzdHtjb2xvcjojZTQ1NjQ5fS5obGpzLWxpdGVyYWx7Y29sb3I6IzAxODRiYn0uaGxqcy1hZGRpdGlvbiwuaGxqcy1hdHRyaWJ1dGUsLmhsanMtbWV0YSAuaGxqcy1zdHJpbmcsLmhsanMtcmVnZXhwLC5obGpzLXN0cmluZ3tjb2xvcjojNTBhMTRmfS5obGpzLWF0dHIsLmhsanMtbnVtYmVyLC5obGpzLXNlbGVjdG9yLWF0dHIsLmhsanMtc2VsZWN0b3ItY2xhc3MsLmhsanMtc2VsZWN0b3ItcHNldWRvLC5obGpzLXRlbXBsYXRlLXZhcmlhYmxlLC5obGpzLXR5cGUsLmhsanMtdmFyaWFibGV7Y29sb3I6Izk4NjgwMX0uaGxqcy1idWxsZXQsLmhsanMtbGluaywuaGxqcy1tZXRhLC5obGpzLXNlbGVjdG9yLWlkLC5obGpzLXN5bWJvbCwuaGxqcy10aXRsZXtjb2xvcjojNDA3OGYyfS5obGpzLWJ1aWx0X2luLC5obGpzLWNsYXNzIC5obGpzLXRpdGxlLC5obGpzLXRpdGxlLmNsYXNzX3tjb2xvcjojYzE4NDAxfS5obGpzLWVtcGhhc2lze2ZvbnQtc3R5bGU6aXRhbGljfS5obGpzLXN0cm9uZ3tmb250LXdlaWdodDo3MDB9LmhsanMtbGlua3t0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQ==`; \ No newline at end of file diff --git a/packages/app-mobile/pluginAssets/index.js b/packages/app-mobile/pluginAssets/index.js index eb1b5748ef2..4af18055828 100644 --- a/packages/app-mobile/pluginAssets/index.js +++ b/packages/app-mobile/pluginAssets/index.js @@ -1,5 +1,5 @@ module.exports = { -hash:"6608023b8053b48e0eec248644475e33", files: { +hash:"de3871f000c87478973d7cd0913bd3ff", files: { 'highlight.js/atom-one-dark-reasonable.css': { data: require('./highlight.js/atom-one-dark-reasonable.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'highlight.js/atom-one-light.css': { data: require('./highlight.js/atom-one-light.css.base64.js'), mime: 'text/css', encoding: 'base64' }, 'katex/fonts/KaTeX_AMS-Regular.woff2': { data: require('./katex/fonts/KaTeX_AMS-Regular.woff2.base64.js'), mime: 'application/octet-stream', encoding: 'base64' }, diff --git a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js index c5d906cac4e..cabc5420656 100644 --- a/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js +++ b/packages/app-mobile/pluginAssets/mermaid/mermaid.min.js.base64.js @@ -1 +1 @@ -module.exports = `IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIGk9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPXQsbi5jPWUsbi5kPWZ1bmN0aW9uKHQsZSxyKXtuLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1uKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KW4uZChyLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIHJ9LG4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUsImEiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPSIiLG4obi5zPTM4NCl9KFtmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKTt2YXIgcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0saT1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gcihlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fTt2YXIgYT1pKHIpLG89YS5yaWdodCxzPWEubGVmdCxjPW8sdT1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWwpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPWUoaSxpPXRbKytuXSk7cmV0dXJuIGF9O2Z1bmN0aW9uIGwodCxlKXtyZXR1cm5bdCxlXX12YXIgaD1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWwpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9LGY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0scD1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1kKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1kKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9LHk9ZnVuY3Rpb24odCxlKXt2YXIgbj1wKHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59LGc9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49dFtvXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sdj1BcnJheS5wcm90b3R5cGUsbT12LnNsaWNlLGI9di5tYXAseD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LF89ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGs9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytyPGk7KWFbcl09dCtyKm47cmV0dXJuIGF9LHc9TWF0aC5zcXJ0KDUwKSxFPU1hdGguc3FydCgxMCksVD1NYXRoLnNxcnQoMiksQz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1TKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiByJiZhLnJldmVyc2UoKSxhfTtmdW5jdGlvbiBTKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49dz8xMDphPj1FPzU6YT49VD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PXc/MTA6YT49RT81OmE+PVQ/MjoxKX1mdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj13P2kqPTEwOmE+PUU/aSo9NTphPj1UJiYoaSo9MiksZTx0Py1pOml9dmFyIE09ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LE89ZnVuY3Rpb24oKXt2YXIgdD1fLGU9ZyxuPU07ZnVuY3Rpb24gcihyKXt2YXIgaSxhLG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyk7Zm9yKGk9MDtpPG87KytpKXNbaV09dChyW2ldLGkscik7dmFyIHU9ZShzKSxsPXVbMF0saD11WzFdLGY9bihzLGwsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9QShsLGgsZiksZj1rKE1hdGguY2VpbChsL2YpKmYsaCxmKSk7Zm9yKHZhciBkPWYubGVuZ3RoO2ZbMF08PWw7KWYuc2hpZnQoKSwtLWQ7Zm9yKDtmW2QtMV0+aDspZi5wb3AoKSwtLWQ7dmFyIHAseT1uZXcgQXJyYXkoZCsxKTtmb3IoaT0wO2k8PWQ7KytpKShwPXlbaV09W10pLngwPWk+MD9mW2ktMV06bCxwLngxPWk8ZD9mW2ldOmg7Zm9yKGk9MDtpPG87KytpKWw8PShhPXNbaV0pJiZhPD1oJiZ5W2MoZixhLDAsZCldLnB1c2gocltpXSk7cmV0dXJuIHl9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTp4KGUpLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6eChbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT94KG0uY2FsbCh0KSk6eCh0KSxyKTpufSxyfSxCPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1uJiYobj1kKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxOPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD1iLmNhbGwodCxkKS5zb3J0KHIpLE1hdGguY2VpbCgobi1lKS8oMiooQih0LC43NSktQih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSp5KHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEw9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9LEk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49ZCh0W2FdKSk/LS1pOm8rPW47ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPWQoZSh0W2FdLGEsdCkpKT8tLWk6bys9bjtpZihpKXJldHVybiBvL2l9LFI9ZnVuY3Rpb24odCxlKXt2YXIgbixpPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KythPGk7KWlzTmFOKG49ZCh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPGk7KWlzTmFOKG49ZChlKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIEIoby5zb3J0KHIpLC41KX0sRj1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufSxQPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49dFthXSkmJnI+biYmKHI9bil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZyPm4mJihyPW4pO3JldHVybiByfSxqPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pO24tLTspcltuXT10W2Vbbl1dO3JldHVybiByfSxZPWZ1bmN0aW9uKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4saSxhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9cik7KythPG47KShlKGk9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9aSxvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX0sej1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksYT0obnVsbD09bj90Lmxlbmd0aDpuKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxyPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1yO3JldHVybiB0fSxVPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPHI7KShuPSt0W2ldKSYmKGErPW4pO2Vsc2UgZm9yKDsrK2k8cjspKG49K2UodFtpXSxpLHQpKSYmKGErPW4pO3JldHVybiBhfSwkPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49UCh0LHEpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9O2Z1bmN0aW9uIHEodCl7cmV0dXJuIHQubGVuZ3RofXZhciBXPWZ1bmN0aW9uKCl7cmV0dXJuICQoYXJndW1lbnRzKX0sVj1BcnJheS5wcm90b3R5cGUuc2xpY2UsSD1mdW5jdGlvbih0KXtyZXR1cm4gdH07ZnVuY3Rpb24gRyh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIFgodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBaKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gUSh0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBLKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIEoodCxlKXt2YXIgbj1bXSxyPW51bGwsaT1udWxsLGE9NixvPTYscz0zLGM9MT09PXR8fDQ9PT10Py0xOjEsdT00PT09dHx8Mj09PXQ/IngiOiJ5IixsPTE9PT10fHwzPT09dD9HOlg7ZnVuY3Rpb24gaChoKXt2YXIgZj1udWxsPT1yP2UudGlja3M/ZS50aWNrcy5hcHBseShlLG4pOmUuZG9tYWluKCk6cixkPW51bGw9PWk/ZS50aWNrRm9ybWF0P2UudGlja0Zvcm1hdC5hcHBseShlLG4pOkg6aSxwPU1hdGgubWF4KGEsMCkrcyx5PWUucmFuZ2UoKSxnPSt5WzBdKy41LHY9K3lbeS5sZW5ndGgtMV0rLjUsbT0oZS5iYW5kd2lkdGg/UTpaKShlLmNvcHkoKSksYj1oLnNlbGVjdGlvbj9oLnNlbGVjdGlvbigpOmgseD1iLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxfPWIuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoZixlKS5vcmRlcigpLGs9Xy5leGl0KCksdz1fLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksRT1fLnNlbGVjdCgibGluZSIpLFQ9Xy5zZWxlY3QoInRleHQiKTt4PXgubWVyZ2UoeC5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksXz1fLm1lcmdlKHcpLEU9RS5tZXJnZSh3LmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIodSsiMiIsYyphKSksVD1ULm1lcmdlKHcuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIodSxjKnApLmF0dHIoImR5IiwxPT09dD8iMGVtIjozPT09dD8iMC43MWVtIjoiMC4zMmVtIikpLGghPT1iJiYoeD14LnRyYW5zaXRpb24oaCksXz1fLnRyYW5zaXRpb24oaCksRT1FLnRyYW5zaXRpb24oaCksVD1ULnRyYW5zaXRpb24oaCksaz1rLnRyYW5zaXRpb24oaCkuYXR0cigib3BhY2l0eSIsMWUtNikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9bSh0KSk/bCh0KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSksdy5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiBsKGUmJmlzRmluaXRlKGU9ZSh0KSk/ZTptKHQpKX0pKSksay5yZW1vdmUoKSx4LmF0dHIoImQiLDQ9PT10fHwyPT10P28/Ik0iK2MqbysiLCIrZysiSDAuNVYiK3YrIkgiK2MqbzoiTTAuNSwiK2crIlYiK3Y6bz8iTSIrZysiLCIrYypvKyJWMC41SCIrdisiViIrYypvOiJNIitnKyIsMC41SCIrdiksXy5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbChtKHQpKX0pKSxFLmF0dHIodSsiMiIsYyphKSxULmF0dHIodSxjKnApLnRleHQoZCksYi5maWx0ZXIoSykuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PXQ/InN0YXJ0Ijo0PT09dD8iZW5kIjoibWlkZGxlIiksYi5lYWNoKChmdW5jdGlvbigpe3RoaXMuX19heGlzPW19KSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxoKTplfSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIG49Vi5jYWxsKGFyZ3VtZW50cyksaH0saC50aWNrQXJndW1lbnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/W106Vi5jYWxsKHQpLGgpOm4uc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDpWLmNhbGwodCksaCk6ciYmci5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW89K3QsaCk6YX0saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGgpOmF9LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCxoKTpvfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGgpOnN9LGh9ZnVuY3Rpb24gdHQodCl7cmV0dXJuIEooMSx0KX1mdW5jdGlvbiBldCh0KXtyZXR1cm4gSigyLHQpfWZ1bmN0aW9uIG50KHQpe3JldHVybiBKKDMsdCl9ZnVuY3Rpb24gcnQodCl7cmV0dXJuIEooNCx0KX12YXIgaXQ9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gYXQoKXtmb3IodmFyIHQsZT0wLG49YXJndW1lbnRzLmxlbmd0aCxyPXt9O2U8bjsrK2Upe2lmKCEodD1hcmd1bWVudHNbZV0rIiIpfHx0IGluIHJ8fC9bXHMuXS8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIit0KTtyW3RdPVtdfXJldHVybiBuZXcgb3Qocil9ZnVuY3Rpb24gb3QodCl7dGhpcy5fPXR9ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgbj0iIixyPXQuaW5kZXhPZigiLiIpO2lmKHI+PTAmJihuPXQuc2xpY2UocisxKSx0PXQuc2xpY2UoMCxyKSksdCYmIWUuaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7cmV0dXJue3R5cGU6dCxuYW1lOm59fSkpfWZ1bmN0aW9uIGN0KHQsZSl7Zm9yKHZhciBuLHI9MCxpPXQubGVuZ3RoO3I8aTsrK3IpaWYoKG49dFtyXSkubmFtZT09PWUpcmV0dXJuIG4udmFsdWV9ZnVuY3Rpb24gdXQodCxlLG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZih0W3JdLm5hbWU9PT1lKXt0W3JdPWl0LHQ9dC5zbGljZSgwLHIpLmNvbmNhdCh0LnNsaWNlKHIrMSkpO2JyZWFrfXJldHVybiBudWxsIT1uJiZ0LnB1c2goe25hbWU6ZSx2YWx1ZTpufSksdH1vdC5wcm90b3R5cGU9YXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvdCxvbjpmdW5jdGlvbih0LGUpe3ZhciBuLHI9dGhpcy5fLGk9c3QodCsiIixyKSxhPS0xLG89aS5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrZSk7Zm9yKDsrK2E8bzspaWYobj0odD1pW2FdKS50eXBlKXJbbl09dXQocltuXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihuIGluIHIpcltuXT11dChyW25dLHQubmFtZSxudWxsKTtyZXR1cm4gdGhpc31mb3IoOysrYTxvOylpZigobj0odD1pW2FdKS50eXBlKSYmKG49Y3QocltuXSx0Lm5hbWUpKSlyZXR1cm4gbn0sY29weTpmdW5jdGlvbigpe3ZhciB0PXt9LGU9dGhpcy5fO2Zvcih2YXIgbiBpbiBlKXRbbl09ZVtuXS5zbGljZSgpO3JldHVybiBuZXcgb3QodCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigobj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBuLHIsaT1uZXcgQXJyYXkobiksYT0wO2E8bjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAsbj0ocj10aGlzLl9bdF0pLmxlbmd0aDthPG47KythKXJbYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLG4pe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciByPXRoaXMuX1t0XSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXJbaV0udmFsdWUuYXBwbHkoZSxuKX19O3ZhciBsdD1hdDtmdW5jdGlvbiBodCgpe312YXIgZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/aHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHQpfX07ZnVuY3Rpb24gZHQoKXtyZXR1cm5bXX12YXIgcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/ZHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHQpfX0seXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyh0KX19LGd0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgQXJyYXkodC5sZW5ndGgpfTtmdW5jdGlvbiB2dCh0LGUpe3RoaXMub3duZXJEb2N1bWVudD10Lm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9dC5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD10LHRoaXMuX19kYXRhX189ZX12dC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnZ0LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKHQsZSl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHQpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbCh0KX19O2Z1bmN0aW9uIG10KHQsZSxuLHIsaSxhKXtmb3IodmFyIG8scz0wLGM9ZS5sZW5ndGgsdT1hLmxlbmd0aDtzPHU7KytzKShvPWVbc10pPyhvLl9fZGF0YV9fPWFbc10scltzXT1vKTpuW3NdPW5ldyB2dCh0LGFbc10pO2Zvcig7czxjOysrcykobz1lW3NdKSYmKGlbc109byl9ZnVuY3Rpb24gYnQodCxlLG4scixpLGEsbyl7dmFyIHMsYyx1LGw9e30saD1lLmxlbmd0aCxmPWEubGVuZ3RoLGQ9bmV3IEFycmF5KGgpO2ZvcihzPTA7czxoOysrcykoYz1lW3NdKSYmKGRbc109dT0iJCIrby5jYWxsKGMsYy5fX2RhdGFfXyxzLGUpLHUgaW4gbD9pW3NdPWM6bFt1XT1jKTtmb3Iocz0wO3M8ZjsrK3MpKGM9bFt1PSIkIitvLmNhbGwodCxhW3NdLHMsYSldKT8ocltzXT1jLGMuX19kYXRhX189YVtzXSxsW3VdPW51bGwpOm5bc109bmV3IHZ0KHQsYVtzXSk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiZsW2Rbc11dPT09YyYmKGlbc109Yyl9ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIF90PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixrdD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6X3QseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifSx3dD1mdW5jdGlvbih0KXt2YXIgZT10Kz0iIixuPWUuaW5kZXhPZigiOiIpO3JldHVybiBuPj0wJiYieG1sbnMiIT09KGU9dC5zbGljZSgwLG4pKSYmKHQ9dC5zbGljZShuKzEpKSxrdC5oYXNPd25Qcm9wZXJ0eShlKT97c3BhY2U6a3RbZV0sbG9jYWw6dH06dH07ZnVuY3Rpb24gRXQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCl9fWZ1bmN0aW9uIFR0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKX19ZnVuY3Rpb24gQ3QodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSh0LGUpfX1mdW5jdGlvbiBTdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLGUpfX1mdW5jdGlvbiBBdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGUodCk6dGhpcy5zZXRBdHRyaWJ1dGUodCxuKX19ZnVuY3Rpb24gTXQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMucmVtb3ZlQXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxuKX19dmFyIE90PWZ1bmN0aW9uKHQpe3JldHVybiB0Lm93bmVyRG9jdW1lbnQmJnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8dC5kb2N1bWVudCYmdHx8dC5kZWZhdWx0Vmlld307ZnVuY3Rpb24gQnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX19ZnVuY3Rpb24gTnQodCxlLG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLG4pfX1mdW5jdGlvbiBEdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09cj90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxyLG4pfX1mdW5jdGlvbiBMdCh0LGUpe3JldHVybiB0LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoZSl8fE90KHQpLmdldENvbXB1dGVkU3R5bGUodCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGUpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3RdfX1mdW5jdGlvbiBSdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbdF09ZX19ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09bn19ZnVuY3Rpb24gUHQodCl7cmV0dXJuIHQudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGp0KHQpe3JldHVybiB0LmNsYXNzTGlzdHx8bmV3IFl0KHQpfWZ1bmN0aW9uIFl0KHQpe3RoaXMuX25vZGU9dCx0aGlzLl9uYW1lcz1QdCh0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHp0KHQsZSl7Zm9yKHZhciBuPWp0KHQpLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspbi5hZGQoZVtyXSl9ZnVuY3Rpb24gVXQodCxlKXtmb3IodmFyIG49anQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLnJlbW92ZShlW3JdKX1mdW5jdGlvbiAkdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt6dCh0aGlzLHQpfX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtVdCh0aGlzLHQpfX1mdW5jdGlvbiBXdCh0LGUpe3JldHVybiBmdW5jdGlvbigpeyhlLmFwcGx5KHRoaXMsYXJndW1lbnRzKT96dDpVdCkodGhpcyx0KX19WXQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dGhpcy5fbmFtZXMuaW5kZXhPZih0KTwwJiYodGhpcy5fbmFtZXMucHVzaCh0KSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbmFtZXMuaW5kZXhPZih0KTtlPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGUsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YodCk+PTB9fTtmdW5jdGlvbiBWdCgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gSHQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD10fX1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gWHQoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBadCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD10fX1mdW5jdGlvbiBRdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT1lPyIiOmV9fWZ1bmN0aW9uIEt0KCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEp0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gdGUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50LG49dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIG49PT1fdCYmZS5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09X3Q/ZS5jcmVhdGVFbGVtZW50KHQpOmUuY3JlYXRlRWxlbWVudE5TKG4sdCl9fWZ1bmN0aW9uIGVlKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHQuc3BhY2UsdC5sb2NhbCl9fXZhciBuZT1mdW5jdGlvbih0KXt2YXIgZT13dCh0KTtyZXR1cm4oZS5sb2NhbD9lZTp0ZSkoZSl9O2Z1bmN0aW9uIHJlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaWUoKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBhZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCExKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9ZnVuY3Rpb24gb2UoKXt2YXIgdD10aGlzLmNsb25lTm9kZSghMCksZT10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGU/ZS5pbnNlcnRCZWZvcmUodCx0aGlzLm5leHRTaWJsaW5nKTp0fXZhciBzZT17fSxjZT1udWxsOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJigib25tb3VzZWVudGVyImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8KHNlPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTtmdW5jdGlvbiB1ZSh0LGUsbil7cmV0dXJuIHQ9bGUodCxlLG4pLGZ1bmN0aW9uKGUpe3ZhciBuPWUucmVsYXRlZFRhcmdldDtuJiYobj09PXRoaXN8fDgmbi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBsZSh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPWNlO2NlPXI7dHJ5e3QuY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sZSxuKX1maW5hbGx5e2NlPWl9fX1mdW5jdGlvbiBoZSh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLykubWFwKChmdW5jdGlvbih0KXt2YXIgZT0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYoZT10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTplfX0pKX1mdW5jdGlvbiBmZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9fb247aWYoZSl7Zm9yKHZhciBuLHI9MCxpPS0xLGE9ZS5sZW5ndGg7cjxhOysrciluPWVbcl0sdC50eXBlJiZuLnR5cGUhPT10LnR5cGV8fG4ubmFtZSE9PXQubmFtZT9lWysraV09bjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobi50eXBlLG4ubGlzdGVuZXIsbi5jYXB0dXJlKTsrK2k/ZS5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gZGUodCxlLG4pe3ZhciByPXNlLmhhc093blByb3BlcnR5KHQudHlwZSk/dWU6bGU7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcyxjPXRoaXMuX19vbix1PXIoZSxhLG8pO2lmKGMpZm9yKHZhciBsPTAsaD1jLmxlbmd0aDtsPGg7KytsKWlmKChzPWNbbF0pLnR5cGU9PT10LnR5cGUmJnMubmFtZT09PXQubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyLHMuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKHMudHlwZSxzLmxpc3RlbmVyPXUscy5jYXB0dXJlPW4pLHZvaWQocy52YWx1ZT1lKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodC50eXBlLHUsbikscz17dHlwZTp0LnR5cGUsbmFtZTp0Lm5hbWUsdmFsdWU6ZSxsaXN0ZW5lcjp1LGNhcHR1cmU6bn0sYz9jLnB1c2gocyk6dGhpcy5fX29uPVtzXX19ZnVuY3Rpb24gcGUodCxlLG4scil7dmFyIGk9Y2U7dC5zb3VyY2VFdmVudD1jZSxjZT10O3RyeXtyZXR1cm4gZS5hcHBseShuLHIpfWZpbmFsbHl7Y2U9aX19ZnVuY3Rpb24geWUodCxlLG4pe3ZhciByPU90KHQpLGk9ci5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaT9pPW5ldyBpKGUsbik6KGk9ci5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxuPyhpLmluaXRFdmVudChlLG4uYnViYmxlcyxuLmNhbmNlbGFibGUpLGkuZGV0YWlsPW4uZGV0YWlsKTppLmluaXRFdmVudChlLCExLCExKSksdC5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIGdlKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHllKHRoaXMsdCxlKX19ZnVuY3Rpb24gdmUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geWUodGhpcyx0LGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dmFyIG1lPVtudWxsXTtmdW5jdGlvbiBiZSh0LGUpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZX1mdW5jdGlvbiB4ZSgpe3JldHVybiBuZXcgYmUoW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxtZSl9YmUucHJvdG90eXBlPXhlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YmUsc2VsZWN0OmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1mdCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvLHM9ZVtpXSxjPXMubGVuZ3RoLHU9cltpXT1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpKGE9c1tsXSkmJihvPXQuY2FsbChhLGEuX19kYXRhX18sbCxzKSkmJigiX19kYXRhX18iaW4gYSYmKG8uX19kYXRhX189YS5fX2RhdGFfXyksdVtsXT1vKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9cHQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPVtdLGk9W10sYT0wO2E8bjsrK2EpZm9yKHZhciBvLHM9ZVthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KShvPXNbdV0pJiYoci5wdXNoKHQuY2FsbChvLG8uX19kYXRhX18sdSxzKSksaS5wdXNoKG8pKTtyZXR1cm4gbmV3IGJlKHIsaSl9LGZpbHRlcjpmdW5jdGlvbih0KXsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eXQodCkpO2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj1lLmxlbmd0aCxyPW5ldyBBcnJheShuKSxpPTA7aTxuOysraSlmb3IodmFyIGEsbz1lW2ldLHM9by5sZW5ndGgsYz1yW2ldPVtdLHU9MDt1PHM7Kyt1KShhPW9bdV0pJiZ0LmNhbGwoYSxhLl9fZGF0YV9fLHUsbykmJmMucHVzaChhKTtyZXR1cm4gbmV3IGJlKHIsdGhpcy5fcGFyZW50cyl9LGRhdGE6ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGw9LTEsdGhpcy5lYWNoKChmdW5jdGlvbih0KXtwWysrbF09dH0pKSxwO3ZhciBuLHI9ZT9idDptdCxpPXRoaXMuX3BhcmVudHMsYT10aGlzLl9ncm91cHM7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJihuPXQsdD1mdW5jdGlvbigpe3JldHVybiBufSk7Zm9yKHZhciBvPWEubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGM9bmV3IEFycmF5KG8pLHU9bmV3IEFycmF5KG8pLGw9MDtsPG87KytsKXt2YXIgaD1pW2xdLGY9YVtsXSxkPWYubGVuZ3RoLHA9dC5jYWxsKGgsaCYmaC5fX2RhdGFfXyxsLGkpLHk9cC5sZW5ndGgsZz1jW2xdPW5ldyBBcnJheSh5KSx2PXNbbF09bmV3IEFycmF5KHkpO3IoaCxmLGcsdix1W2xdPW5ldyBBcnJheShkKSxwLGUpO2Zvcih2YXIgbSxiLHg9MCxfPTA7eDx5OysreClpZihtPWdbeF0pe2Zvcih4Pj1fJiYoXz14KzEpOyEoYj12W19dKSYmKytfPHk7KTttLl9uZXh0PWJ8fG51bGx9fXJldHVybihzPW5ldyBiZShzLGkpKS5fZW50ZXI9YyxzLl9leGl0PXUsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGJlKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKGd0KSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgYmUodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChndCksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuZW50ZXIoKSxpPXRoaXMsYT10aGlzLmV4aXQoKTtyZXR1cm4gcj0iZnVuY3Rpb24iPT10eXBlb2YgdD90KHIpOnIuYXBwZW5kKHQrIiIpLG51bGwhPWUmJihpPWUoaSkpLG51bGw9PW4/YS5yZW1vdmUoKTpuKGEpLHImJmk/ci5tZXJnZShpKS5vcmRlcigpOml9LG1lcmdlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj10Ll9ncm91cHMscj1lLmxlbmd0aCxpPW4ubGVuZ3RoLGE9TWF0aC5taW4ocixpKSxvPW5ldyBBcnJheShyKSxzPTA7czxhOysrcylmb3IodmFyIGMsdT1lW3NdLGw9bltzXSxoPXUubGVuZ3RoLGY9b1tzXT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpKGM9dVtkXXx8bFtkXSkmJihmW2RdPWMpO2Zvcig7czxyOysrcylvW3NdPWVbc107cmV0dXJuIG5ldyBiZShvLHRoaXMuX3BhcmVudHMpfSxvcmRlcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0tMSxuPXQubGVuZ3RoOysrZTxuOylmb3IodmFyIHIsaT10W2VdLGE9aS5sZW5ndGgtMSxvPWlbYV07LS1hPj0wOykocj1pW2FdKSYmKG8mJjReci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKSYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShyLG8pLG89cik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBlJiZuP3QoZS5fX2RhdGFfXyxuLl9fZGF0YV9fKTohZS0hbn10fHwodD14dCk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxyPW4ubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKXtmb3IodmFyIG8scz1uW2FdLGM9cy5sZW5ndGgsdT1pW2FdPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkobz1zW2xdKSYmKHVbbF09byk7dS5zb3J0KGUpfXJldHVybiBuZXcgYmUoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyx0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciB0PW5ldyBBcnJheSh0aGlzLnNpemUoKSksZT0tMTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3RbKytlXT10aGlzfSkpLHR9LG5vZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpZm9yKHZhciByPXRbZV0saT0wLGE9ci5sZW5ndGg7aTxhOysraSl7dmFyIG89cltpXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpeysrdH0pKSx0fSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiF0aGlzLm5vZGUoKX0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49MCxyPWUubGVuZ3RoO248cjsrK24pZm9yKHZhciBpLGE9ZVtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKShpPWFbb10pJiZ0LmNhbGwoaSxpLl9fZGF0YV9fLG8sYSk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24odCxlKXt2YXIgbj13dCh0KTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciByPXRoaXMubm9kZSgpO3JldHVybiBuLmxvY2FsP3IuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTpyLmdldEF0dHJpYnV0ZShuKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1lP24ubG9jYWw/VHQ6RXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/bi5sb2NhbD9NdDpBdDpuLmxvY2FsP1N0OkN0KShuLGUpKX0sc3R5bGU6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1lP0J0OiJmdW5jdGlvbiI9PXR5cGVvZiBlP0R0Ok50KSh0LGUsbnVsbD09bj8iIjpuKSk6THQodGhpcy5ub2RlKCksdCl9LHByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/SXQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/RnQ6UnQpKHQsZSkpOnRoaXMubm9kZSgpW3RdfSxjbGFzc2VkOmZ1bmN0aW9uKHQsZSl7dmFyIG49UHQodCsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHI9anQodGhpcy5ub2RlKCkpLGk9LTEsYT1uLmxlbmd0aDsrK2k8YTspaWYoIXIuY29udGFpbnMobltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/V3Q6ZT8kdDpxdCkobixlKSl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/VnQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P0d0Okh0KSh0KSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PXQ/WHQ6KCJmdW5jdGlvbiI9PXR5cGVvZiB0P1F0Olp0KSh0KSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goS3QpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goSnQpfSxhcHBlbmQ6ZnVuY3Rpb24odCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpuZSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSkpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5lKHQpLHI9bnVsbD09ZT9yZToiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ0KGUpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobi5hcHBseSh0aGlzLGFyZ3VtZW50cyksci5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSkpfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGllKX0sY2xvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VsZWN0KHQ/b2U6YWUpfSxkYXR1bTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE9aGUodCsiIiksbz1hLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihzPWU/ZGU6ZmUsbnVsbD09biYmKG49ITEpLHI9MDtyPG87KytyKXRoaXMuZWFjaChzKGFbcl0sZSxuKSk7cmV0dXJuIHRoaXN9dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKWZvcih2YXIgYyx1PTAsbD1zLmxlbmd0aDt1PGw7Kyt1KWZvcihyPTAsYz1zW3VdO3I8bzsrK3IpaWYoKGk9YVtyXSkudHlwZT09PWMudHlwZSYmaS5uYW1lPT09Yy5uYW1lKXJldHVybiBjLnZhbHVlfSxkaXNwYXRjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBlP3ZlOmdlKSh0LGUpKX19O3ZhciBfZT14ZSxrZT1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bmV3IGJlKFtbZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgYmUoW1t0XV0sbWUpfTtmdW5jdGlvbiB3ZSgpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBFZT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LFRlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49a2UodCkub24oImRyYWdzdGFydC5kcmFnIixFZSwhMCk7Im9uc2VsZWN0c3RhcnQiaW4gZT9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixFZSwhMCk6KGUuX19ub3NlbGVjdD1lLnN0eWxlLk1velVzZXJTZWxlY3QsZS5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9O2Z1bmN0aW9uIENlKHQsZSl7dmFyIG49dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1rZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2UmJihyLm9uKCJjbGljay5kcmFnIixFZSwhMCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyLm9uKCJjbGljay5kcmFnIixudWxsKX0pLDApKSwib25zZWxlY3RzdGFydCJpbiBuP3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihuLnN0eWxlLk1velVzZXJTZWxlY3Q9bi5fX25vc2VsZWN0LGRlbGV0ZSBuLl9fbm9zZWxlY3QpfXZhciBTZT1mdW5jdGlvbih0LGUsbil7dC5wcm90b3R5cGU9ZS5wcm90b3R5cGU9bixuLmNvbnN0cnVjdG9yPXR9O2Z1bmN0aW9uIEFlKHQsZSl7dmFyIG49T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSk7Zm9yKHZhciByIGluIGUpbltyXT1lW3JdO3JldHVybiBufWZ1bmN0aW9uIE1lKCl7fXZhciBPZT0iXFxzKihbKy1dP1xcZCspXFxzKiIsQmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsTmU9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLERlPS9eIyhbMC05YS1mXXszLDh9KSQvLExlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tPZSxPZSxPZV0rIlxcKSQiKSxJZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbTmUsTmUsTmVdKyJcXCkkIiksUmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tPZSxPZSxPZSxCZV0rIlxcKSQiKSxGZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW05lLE5lLE5lLEJlXSsiXFwpJCIpLFBlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tCZSxOZSxOZV0rIlxcKSQiKSxqZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW0JlLE5lLE5lLEJlXSsiXFwpJCIpLFllPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIHplKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gVWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiAkZSh0KXt2YXIgZSxuO3JldHVybiB0PSh0KyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwoZT1EZS5leGVjKHQpKT8obj1lWzFdLmxlbmd0aCxlPXBhcnNlSW50KGVbMV0sMTYpLDY9PT1uP3FlKGUpOjM9PT1uP25ldyBHZShlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKDE1JmUpPDw0fDE1JmUsMSk6OD09PW4/bmV3IEdlKGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1uP25ldyBHZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUxlLmV4ZWModCkpP25ldyBHZShlWzFdLGVbMl0sZVszXSwxKTooZT1JZS5leGVjKHQpKT9uZXcgR2UoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9UmUuZXhlYyh0KSk/V2UoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9RmUuZXhlYyh0KSk/V2UoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9UGUuZXhlYyh0KSk/S2UoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1qZS5leGVjKHQpKT9LZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOlllLmhhc093blByb3BlcnR5KHQpP3FlKFllW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgR2UoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gbmV3IEdlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBXZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IEdlKHQsZSxuLHIpfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTWV8fCh0PSRlKHQpKSx0P25ldyBHZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgR2V9ZnVuY3Rpb24gSGUodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ZlKHQpOm5ldyBHZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gR2UodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFhlKCl7cmV0dXJuIiMiK1FlKHRoaXMucikrUWUodGhpcy5nKStRZSh0aGlzLmIpfWZ1bmN0aW9uIFplKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gUWUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBLZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IGVuKHQsZSxuLHIpfWZ1bmN0aW9uIEplKHQpe2lmKHQgaW5zdGFuY2VvZiBlbilyZXR1cm4gbmV3IGVuKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE1lfHwodD0kZSh0KSksIXQpcmV0dXJuIG5ldyBlbjtpZih0IGluc3RhbmNlb2YgZW4pcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBlbihvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHRuKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9KZSh0KTpuZXcgZW4odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIGVuKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBubih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gcm4odCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn1TZShNZSwkZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp6ZSxmb3JtYXRIZXg6emUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIEplKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6VWUsdG9TdHJpbmc6VWV9KSxTZShHZSxIZSxBZShNZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEdlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBHZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlhlLGZvcm1hdEhleDpYZSxmb3JtYXRSZ2I6WmUsdG9TdHJpbmc6WmV9KSksU2UoZW4sdG4sQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBlbih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IEdlKG5uKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLG5uKHQsaSxyKSxubih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBhbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gcm4oKG4tci9lKSplLG8saSxhLHMpfX0sb249ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBybigobi1yL2UpKmUsaSxhLG8scyl9fSxzbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIGNuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gdW4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/Y24odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOnNuKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gbG4odCl7cmV0dXJuIDE9PSh0PSt0KT9objpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOnNuKGlzTmFOKGUpP246ZSl9fWZ1bmN0aW9uIGhuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP2NuKHQsbik6c24oaXNOYU4odCk/ZTp0KX12YXIgZm49ZnVuY3Rpb24gdChlKXt2YXIgbj1sbihlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1IZSh0KSkuciwoZT1IZShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPWhuKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBkbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPUhlKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fXZhciBwbj1kbihhbikseW49ZG4ob24pLGduPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fTtmdW5jdGlvbiB2bih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIG1uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHZuKGUpP2duOmJuKSh0LGUpfTtmdW5jdGlvbiBibih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPUFuKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319dmFyIHhuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQqKDEtcikrZSpyKSxufX0sX249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19LGtuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1Bbih0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fSx3bj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csRW49bmV3IFJlZ0V4cCh3bi5zb3VyY2UsImciKTt2YXIgVG4sQ24sU249ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT13bi5sYXN0SW5kZXg9RW4ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPXduLmV4ZWModCkpJiYocj1Fbi5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6X24obixyKX0pKSxhPUVuLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LEFuPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9zbihlKTooIm51bWJlciI9PT1yP19uOiJzdHJpbmciPT09cj8obj0kZShlKSk/KGU9bixmbik6U246ZSBpbnN0YW5jZW9mICRlP2ZuOmUgaW5zdGFuY2VvZiBEYXRlP3huOnZuKGUpP2duOkFycmF5LmlzQXJyYXkoZSk/Ym46ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP2tuOl9uKSh0LGUpfSxNbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPWNlO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfSxPbj1mdW5jdGlvbih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PWUuY2xpZW50WCxyLnk9ZS5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfSxCbj1mdW5jdGlvbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9TW4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBPbih0LHIpO3JldHVybiBudWxsfSxObj1mdW5jdGlvbih0KXt2YXIgZT1NbigpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxPbih0LGUpfSxEbj0wLExuPTAsSW49MCxSbj0wLEZuPTAsUG49MCxqbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxZbj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiB6bigpe3JldHVybiBGbnx8KFluKFVuKSxGbj1qbi5ub3coKStQbil9ZnVuY3Rpb24gVW4oKXtGbj0wfWZ1bmN0aW9uICRuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBxbih0LGUsbil7dmFyIHI9bmV3ICRuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gV24oKXt6bigpLCsrRG47Zm9yKHZhciB0LGU9VG47ZTspKHQ9Rm4tZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLURufWZ1bmN0aW9uIFZuKCl7Rm49KFJuPWpuLm5vdygpKStQbixEbj1Mbj0wO3RyeXtXbigpfWZpbmFsbHl7RG49MCxmdW5jdGlvbigpe3ZhciB0LGUsbj1UbixyPTEvMDtmb3IoO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpUbj1lKTtDbj10LEduKHIpfSgpLEZuPTB9fWZ1bmN0aW9uIEhuKCl7dmFyIHQ9am4ubm93KCksZT10LVJuO2U+MWUzJiYoUG4tPWUsUm49dCl9ZnVuY3Rpb24gR24odCl7RG58fChMbiYmKExuPWNsZWFyVGltZW91dChMbikpLHQtRm4+MjQ/KHQ8MS8wJiYoTG49c2V0VGltZW91dChWbix0LWpuLm5vdygpLVBuKSksSW4mJihJbj1jbGVhckludGVydmFsKEluKSkpOihJbnx8KFJuPWpuLm5vdygpLEluPXNldEludGVydmFsKEhuLDFlMykpLERuPTEsWW4oVm4pKSl9JG4ucHJvdG90eXBlPXFuLnByb3RvdHlwZT17Y29uc3RydWN0b3I6JG4scmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP3puKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fENuPT09dGhpc3x8KENuP0NuLl9uZXh0PXRoaXM6VG49dGhpcyxDbj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLEduKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLEduKCkpfX07dmFyIFhuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG47cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfSxabj1sdCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxRbj1bXSxLbj1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gWG4oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihYbigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1xbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpabix0d2VlbjpRbix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9O2Z1bmN0aW9uIEpuKHQsZSl7dmFyIG49ZXIodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiB0cih0LGUpe3ZhciBuPWVyKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIGVyKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59dmFyIG5yLHJyLGlyLGFyLG9yPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LHNyPTE4MC9NYXRoLlBJLGNyPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LHVyPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKnNyLHNrZXdYOk1hdGguYXRhbihjKSpzcixzY2FsZVg6byxzY2FsZVk6c319O2Z1bmN0aW9uIGxyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6X24odCxpKX0se2k6Yy0yLHg6X24ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4Ol9uKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4Ol9uKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4Ol9uKHQsbil9LHtpOnMtMix4Ol9uKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGhyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P2NyOihucnx8KG5yPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHJyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpcj1kb2N1bWVudC5kZWZhdWx0VmlldyksbnIuc3R5bGUudHJhbnNmb3JtPXQsdD1pci5nZXRDb21wdXRlZFN0eWxlKHJyLmFwcGVuZENoaWxkKG5yKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxyci5yZW1vdmVDaGlsZChuciksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksdXIoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLGZyPWxyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9jcjooYXJ8fChhcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxhci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9YXIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsdXIodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTpjcil9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIGRyKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT10cih0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIHByKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10cih0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiB5cih0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD10cih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LHIpLnZhbHVlW2VdfX12YXIgZ3I9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP19uOmUgaW5zdGFuY2VvZiAkZT9mbjoobj0kZShlKSk/KGU9bixmbik6U24pKHQsZSl9O2Z1bmN0aW9uIHZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBtcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIGJyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIHhyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBfcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHdyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBFcih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIFRyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmRXIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIENyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmd3IodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7Sm4odGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEFyKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtKbih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt0cih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIEJyKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3RyKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBOcih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/Sm46dHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIERyPV9lLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBMcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBJcih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gUnIodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJklyKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIEZyKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBQcih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZGcihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBqcj0wO2Z1bmN0aW9uIFlyKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiB6cih0KXtyZXR1cm4gX2UoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uIFVyKCl7cmV0dXJuKytqcn12YXIgJHI9X2UucHJvdG90eXBlO2Z1bmN0aW9uIHFyKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBXcih0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gVnIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9WXIucHJvdG90eXBlPXpyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZnQodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxLbihoW2ZdLGUsbixmLGgsZXIocyxuKSkpO3JldHVybiBuZXcgWXIoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXB0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPWVyKGMsbikseT0wLGc9ZC5sZW5ndGg7eTxnOysreSkoZj1kW3ldKSYmS24oZixlLG4seSxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyBZcihhLG8sZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD15dCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgWXIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aCxhPU1hdGgubWluKHIsaSksbz1uZXcgQXJyYXkocikscz0wO3M8YTsrK3MpZm9yKHZhciBjLHU9ZVtzXSxsPW5bc10saD11Lmxlbmd0aCxmPW9bc109bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKShjPXVbZF18fGxbZF0pJiYoZltkXT1jKTtmb3IoO3M8cjsrK3Mpb1tzXT1lW3NdO3JldHVybiBuZXcgWXIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERyKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj1VcigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKG89c1t1XSl7dmFyIGw9ZXIobyxlKTtLbihvLHQsbix1LHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOiRyLmNhbGwsbm9kZXM6JHIubm9kZXMsbm9kZTokci5ub2RlLHNpemU6JHIuc2l6ZSxlbXB0eTokci5lbXB0eSxlYWNoOiRyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2VyKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChOcihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49d3QodCkscj0idHJhbnNmb3JtIj09PW4/ZnI6Z3I7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/a3I6X3IpKG4scix5cih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9tcjp2cikobik6KG4ubG9jYWw/eHI6YnIpKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9d3QodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9UcjpDcikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9ocjpncjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1MdCh0aGlzLHQpLG89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksTHQodGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsTHIodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9THQodGhpcyx0KSksbz09PWM/bnVsbDpvPT09ciYmYz09PWk/YTooaT1jLGE9ZShyPW8scykpfX0odCxyLHlyKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvPSJzdHlsZS4iK2Uscz0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz10cih0aGlzLHQpLHU9Yy5vbixsPW51bGw9PWMudmFsdWVbb10/YXx8KGE9THIoZSkpOnZvaWQgMDt1PT09biYmaT09PWx8fChyPShuPXUpLmNvcHkoKSkub24ocyxpPWwpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89THQodGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsUnIodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oeXIodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLFByKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1lcih0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/ZHI6cHIpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/U3I6QXIpKGUsdCkpOmVyKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P01yOk9yKShlLHQpKTplcih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goQnIoZSx0KSk6ZXIodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj10cih0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSl9KSl9fTt2YXIgSHI9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlZyfTtmdW5jdGlvbiBHcih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBIci50aW1lPXpuKCksSHI7cmV0dXJuIG59X2UucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe29yKHRoaXMsdCl9KSl9LF9lLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIFlyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9VXIoKSwobj1IcikudGltZT16bigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJktuKG8sdCxlLHUscyxufHxHcihvLGUpKTtyZXR1cm4gbmV3IFlyKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgWHI9W251bGxdLFpyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyBZcihbW3RdXSxYcixlLCtyKTtyZXR1cm4gbnVsbH0sUXI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxLcj1mdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlbGVjdGlvbj1ufTtmdW5jdGlvbiBKcigpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB0aT1mdW5jdGlvbigpe2NlLnByZXZlbnREZWZhdWx0KCksY2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LGVpPXtuYW1lOiJkcmFnIn0sbmk9e25hbWU6InNwYWNlIn0scmk9e25hbWU6ImhhbmRsZSJ9LGlpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBhaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIG9pKHQpe3JldHVyblthaSh0WzBdKSxhaSh0WzFdKV19ZnVuY3Rpb24gc2kodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBCbihlLGNlLnRvdWNoZXMsdCl9fXZhciBjaT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKGdpKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sdWk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChnaSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGxpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChnaSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpvaSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0saGk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGZpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxkaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0scGk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0seWk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gZ2kodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gdmkoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBtaSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIGJpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIHhpKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24gX2kodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiBraSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIHdpKCl7cmV0dXJuIENpKGNpKX1mdW5jdGlvbiBFaSgpe3JldHVybiBDaSh1aSl9dmFyIFRpPWZ1bmN0aW9uKCl7cmV0dXJuIENpKGxpKX07ZnVuY3Rpb24gQ2kodCl7dmFyIGUsbj1taSxyPXZpLGk9YmksYT0hMCxvPWx0KCJzdGFydCIsImJydXNoIiwiZW5kIikscz02O2Z1bmN0aW9uIGMoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIseSkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW2dpKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9eGkodGhpcykuZXh0ZW50O2tlKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW2dpKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGhpLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciByPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBoaVt0LnR5cGVdfSkpLGUuZWFjaCh1KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixkKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHApLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB1KCl7dmFyIHQ9a2UodGhpcyksZT14aSh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLXMvMjplWzBdWzBdLXMvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tcy8yOmVbMF1bMV0tcy8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK3M6c30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rczpzfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gbCh0LGUsbil7cmV0dXJuIW4mJnQuX19icnVzaC5lbWl0dGVyfHxuZXcgaCh0LGUpfWZ1bmN0aW9uIGgodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLnN0YXRlPXQuX19icnVzaCx0aGlzLmFjdGl2ZT0wfWZ1bmN0aW9uIGYoKXtpZigoIWV8fGNlLnRvdWNoZXMpJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG4saSxvLHMsYyxoLGYsZCxwLHksZyx2PXRoaXMsbT1jZS50YXJnZXQuX19kYXRhX18udHlwZSxiPSJzZWxlY3Rpb24iPT09KGEmJmNlLm1ldGFLZXk/bT0ib3ZlcmxheSI6bSk/ZWk6YSYmY2UuYWx0S2V5P2lpOnJpLHg9dD09PXVpP251bGw6cGlbbV0sXz10PT09Y2k/bnVsbDp5aVttXSxrPXhpKHYpLHc9ay5leHRlbnQsRT1rLnNlbGVjdGlvbixUPXdbMF1bMF0sQz13WzBdWzFdLFM9d1sxXVswXSxBPXdbMV1bMV0sTT0wLE89MCxCPXgmJl8mJmEmJmNlLnNoaWZ0S2V5LE49Y2UudG91Y2hlcz9zaShjZS5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyKTpObixEPU4odiksTD1ELEk9bCh2LGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTsib3ZlcmxheSI9PT1tPyhFJiYocD0hMCksay5zZWxlY3Rpb249RT1bW249dD09PXVpP1Q6RFswXSxvPXQ9PT1jaT9DOkRbMV1dLFtjPXQ9PT11aT9TOm4sZj10PT09Y2k/QTpvXV0pOihuPUVbMF1bMF0sbz1FWzBdWzFdLGM9RVsxXVswXSxmPUVbMV1bMV0pLGk9bixzPW8saD1jLGQ9Zjt2YXIgUj1rZSh2KS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxGPVIuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsaGlbbV0pO2lmKGNlLnRvdWNoZXMpSS5tb3ZlZD1qLEkuZW5kZWQ9ejtlbHNle3ZhciBQPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLGosITApLm9uKCJtb3VzZXVwLmJydXNoIix6LCEwKTthJiZQLm9uKCJrZXlkb3duLmJydXNoIixVLCEwKS5vbigia2V5dXAuYnJ1c2giLCQsITApLFRlKGNlLnZpZXcpfUpyKCksb3IodiksdS5jYWxsKHYpLEkuc3RhcnQoKX1mdW5jdGlvbiBqKCl7dmFyIHQ9Tih2KTshQnx8eXx8Z3x8KE1hdGguYWJzKHRbMF0tTFswXSk+TWF0aC5hYnModFsxXS1MWzFdKT9nPSEwOnk9ITApLEw9dCxwPSEwLHRpKCksWSgpfWZ1bmN0aW9uIFkoKXt2YXIgdDtzd2l0Y2goTT1MWzBdLURbMF0sTz1MWzFdLURbMV0sYil7Y2FzZSBuaTpjYXNlIGVpOngmJihNPU1hdGgubWF4KFQtbixNYXRoLm1pbihTLWMsTSkpLGk9bitNLGg9YytNKSxfJiYoTz1NYXRoLm1heChDLW8sTWF0aC5taW4oQS1mLE8pKSxzPW8rTyxkPWYrTyk7YnJlYWs7Y2FzZSByaTp4PDA/KE09TWF0aC5tYXgoVC1uLE1hdGgubWluKFMtbixNKSksaT1uK00saD1jKTp4PjAmJihNPU1hdGgubWF4KFQtYyxNYXRoLm1pbihTLWMsTSkpLGk9bixoPWMrTSksXzwwPyhPPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLW8sTykpLHM9bytPLGQ9Zik6Xz4wJiYoTz1NYXRoLm1heChDLWYsTWF0aC5taW4oQS1mLE8pKSxzPW8sZD1mK08pO2JyZWFrO2Nhc2UgaWk6eCYmKGk9TWF0aC5tYXgoVCxNYXRoLm1pbihTLG4tTSp4KSksaD1NYXRoLm1heChULE1hdGgubWluKFMsYytNKngpKSksXyYmKHM9TWF0aC5tYXgoQyxNYXRoLm1pbihBLG8tTypfKSksZD1NYXRoLm1heChDLE1hdGgubWluKEEsZitPKl8pKSl9aDxpJiYoeCo9LTEsdD1uLG49YyxjPXQsdD1pLGk9aCxoPXQsbSBpbiBmaSYmRi5hdHRyKCJjdXJzb3IiLGhpW209ZmlbbV1dKSksZDxzJiYoXyo9LTEsdD1vLG89ZixmPXQsdD1zLHM9ZCxkPXQsbSBpbiBkaSYmRi5hdHRyKCJjdXJzb3IiLGhpW209ZGlbbV1dKSksay5zZWxlY3Rpb24mJihFPWsuc2VsZWN0aW9uKSx5JiYoaT1FWzBdWzBdLGg9RVsxXVswXSksZyYmKHM9RVswXVsxXSxkPUVbMV1bMV0pLEVbMF1bMF09PT1pJiZFWzBdWzFdPT09cyYmRVsxXVswXT09PWgmJkVbMV1bMV09PT1kfHwoay5zZWxlY3Rpb249W1tpLHNdLFtoLGRdXSx1LmNhbGwodiksSS5icnVzaCgpKX1mdW5jdGlvbiB6KCl7aWYoSnIoKSxjZS50b3VjaGVzKXtpZihjZS50b3VjaGVzLmxlbmd0aClyZXR1cm47ZSYmY2xlYXJUaW1lb3V0KGUpLGU9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlPW51bGx9KSw1MDApfWVsc2UgQ2UoY2UudmlldyxwKSxQLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTtSLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksRi5hdHRyKCJjdXJzb3IiLGhpLm92ZXJsYXkpLGsuc2VsZWN0aW9uJiYoRT1rLnNlbGVjdGlvbiksX2koRSkmJihrLnNlbGVjdGlvbj1udWxsLHUuY2FsbCh2KSksSS5lbmQoKX1mdW5jdGlvbiBVKCl7c3dpdGNoKGNlLmtleUNvZGUpe2Nhc2UgMTY6Qj14JiZfO2JyZWFrO2Nhc2UgMTg6Yj09PXJpJiYoeCYmKGM9aC1NKngsbj1pK00qeCksXyYmKGY9ZC1PKl8sbz1zK08qXyksYj1paSxZKCkpO2JyZWFrO2Nhc2UgMzI6YiE9PXJpJiZiIT09aWl8fCh4PDA/Yz1oLU06eD4wJiYobj1pLU0pLF88MD9mPWQtTzpfPjAmJihvPXMtTyksYj1uaSxGLmF0dHIoImN1cnNvciIsaGkuc2VsZWN0aW9uKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXRpKCl9ZnVuY3Rpb24gJCgpe3N3aXRjaChjZS5rZXlDb2RlKXtjYXNlIDE2OkImJih5PWc9Qj0hMSxZKCkpO2JyZWFrO2Nhc2UgMTg6Yj09PWlpJiYoeDwwP2M9aDp4PjAmJihuPWkpLF88MD9mPWQ6Xz4wJiYobz1zKSxiPXJpLFkoKSk7YnJlYWs7Y2FzZSAzMjpiPT09bmkmJihjZS5hbHRLZXk/KHgmJihjPWgtTSp4LG49aStNKngpLF8mJihmPWQtTypfLG89cytPKl8pLGI9aWkpOih4PDA/Yz1oOng+MCYmKG49aSksXzwwP2Y9ZDpfPjAmJihvPXMpLGI9cmkpLEYuYXR0cigiY3Vyc29yIixoaVttXSksWSgpKTticmVhaztkZWZhdWx0OnJldHVybn10aSgpfX1mdW5jdGlvbiBkKCl7bCh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBwKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiB5KCl7dmFyIGU9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBlLmV4dGVudD1vaShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZS5kaW09dCxlfXJldHVybiBjLm1vdmU9ZnVuY3Rpb24oZSxuKXtlLnNlbGVjdGlvbj9lLm9uKCJzdGFydC5icnVzaCIsKGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkpLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2VlbigiYnJ1c2giLChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1lLl9fYnJ1c2gsaT1sKGUsYXJndW1lbnRzKSxhPXIuc2VsZWN0aW9uLG89dC5pbnB1dCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuLHIuZXh0ZW50KSxzPUFuKGEsbyk7ZnVuY3Rpb24gYyh0KXtyLnNlbGVjdGlvbj0xPT09dCYmbnVsbD09PW8/bnVsbDpzKHQpLHUuY2FsbChlKSxpLmJydXNoKCl9cmV0dXJuIG51bGwhPT1hJiZudWxsIT09bz9jOmMoMSl9KSk6ZS5lYWNoKChmdW5jdGlvbigpe3ZhciBlPXRoaXMscj1hcmd1bWVudHMsaT1lLl9fYnJ1c2gsYT10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpuLGkuZXh0ZW50KSxvPWwoZSxyKS5iZWZvcmVzdGFydCgpO29yKGUpLGkuc2VsZWN0aW9uPW51bGw9PT1hP251bGw6YSx1LmNhbGwoZSksby5zdGFydCgpLmJydXNoKCkuZW5kKCl9KSl9LGMuY2xlYXI9ZnVuY3Rpb24odCl7Yy5tb3ZlKHQsbnVsbCl9LGgucHJvdG90eXBlPXtiZWZvcmVzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy5zdGF0ZS5lbWl0dGVyPXRoaXMsdGhpcy5zdGFydGluZz0hMCksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdGFydGluZz8odGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpOnRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxicnVzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVtaXQoImJydXNoIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy5zdGF0ZS5lbWl0dGVyLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oZSl7cGUobmV3IEtyKGMsZSx0Lm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbZSx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxjLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFyKG9pKHQpKSxjKTpufSxjLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFyKCEhdCksYyk6cn0sYy50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpRcighIXQpLGMpOml9LGMuaGFuZGxlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxjKTpzfSxjLmtleU1vZGlmaWVycz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0hIXQsYyk6YX0sYy5vbj1mdW5jdGlvbigpe3ZhciB0PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB0PT09bz9jOnR9LGN9dmFyIFNpPU1hdGguY29zLEFpPU1hdGguc2luLE1pPU1hdGguUEksT2k9TWkvMixCaT0yKk1pLE5pPU1hdGgubWF4O2Z1bmN0aW9uIERpKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiB0KGUuc291cmNlLnZhbHVlK2UudGFyZ2V0LnZhbHVlLG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKX19dmFyIExpPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPW51bGwsbj1udWxsLHI9bnVsbDtmdW5jdGlvbiBpKGkpe3ZhciBhLG8scyxjLHUsbCxoPWkubGVuZ3RoLGY9W10sZD1rKGgpLHA9W10seT1bXSxnPXkuZ3JvdXBzPW5ldyBBcnJheShoKSx2PW5ldyBBcnJheShoKmgpO2ZvcihhPTAsdT0tMTsrK3U8aDspe2ZvcihvPTAsbD0tMTsrK2w8aDspbys9aVt1XVtsXTtmLnB1c2gobykscC5wdXNoKGsoaCkpLGErPW99Zm9yKGUmJmQuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZShmW3RdLGZbbl0pfSkpLG4mJnAuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIG4oaVtlXVt0XSxpW2VdW3JdKX0pKX0pKSxjPShhPU5pKDAsQmktdCpoKS9hKT90OkJpL2gsbz0wLHU9LTE7Kyt1PGg7KXtmb3Iocz1vLGw9LTE7KytsPGg7KXt2YXIgbT1kW3VdLGI9cFttXVtsXSx4PWlbbV1bYl0sXz1vLHc9bys9eCphO3ZbYipoK21dPXtpbmRleDptLHN1YmluZGV4OmIsc3RhcnRBbmdsZTpfLGVuZEFuZ2xlOncsdmFsdWU6eH19Z1ttXT17aW5kZXg6bSxzdGFydEFuZ2xlOnMsZW5kQW5nbGU6byx2YWx1ZTpmW21dfSxvKz1jfWZvcih1PS0xOysrdTxoOylmb3IobD11LTE7KytsPGg7KXt2YXIgRT12W2wqaCt1XSxUPXZbdSpoK2xdOyhFLnZhbHVlfHxULnZhbHVlKSYmeS5wdXNoKEUudmFsdWU8VC52YWx1ZT97c291cmNlOlQsdGFyZ2V0OkV9Ontzb3VyY2U6RSx0YXJnZXQ6VH0pfXJldHVybiByP3kuc29ydChyKTp5fXJldHVybiBpLnBhZEFuZ2xlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU5pKDAsZSksaSk6dH0saS5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaSk6ZX0saS5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaSk6bn0saS5zb3J0Q2hvcmRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3I9bnVsbDoocj1EaSh0KSkuXz10LGkpOnImJnIuX30saX0sSWk9QXJyYXkucHJvdG90eXBlLnNsaWNlLFJpPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sRmk9TWF0aC5QSSxQaT0yKkZpLGppPVBpLTFlLTY7ZnVuY3Rpb24gWWkoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiB6aSgpe3JldHVybiBuZXcgWWl9WWkucHJvdG90eXBlPXppLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WWksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K24pKyIsIisodGhpcy5feTE9K3IpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtuKyIsIisgK3IrIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dD0rdCxlPStlLG49K24scj0rcixpPStpO3ZhciBhPXRoaXMuX3gxLG89dGhpcy5feTEscz1uLXQsYz1yLWUsdT1hLXQsbD1vLWUsaD11KnUrbCpsO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMobCpzLWMqdSk+MWUtNiYmaSl7dmFyIGY9bi1hLGQ9ci1vLHA9cypzK2MqYyx5PWYqZitkKmQsZz1NYXRoLnNxcnQocCksdj1NYXRoLnNxcnQoaCksbT1pKk1hdGgudGFuKChGaS1NYXRoLmFjb3MoKHAraC15KS8oMipnKnYpKSkvMiksYj1tL3YseD1tL2c7TWF0aC5hYnMoYi0xKT4xZS02JiYodGhpcy5fKz0iTCIrKHQrYip1KSsiLCIrKGUrYipsKSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKGwqZj51KmQpKyIsIisodGhpcy5feDE9dCt4KnMpKyIsIisodGhpcy5feTE9ZSt4KmMpfWVsc2UgdGhpcy5fKz0iTCIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9ZSk7ZWxzZTt9LGFyYzpmdW5jdGlvbih0LGUsbixyLGksYSl7dD0rdCxlPStlLGE9ISFhO3ZhciBvPShuPStuKSpNYXRoLmNvcyhyKSxzPW4qTWF0aC5zaW4ociksYz10K28sdT1lK3MsbD0xXmEsaD1hP3ItaTppLXI7aWYobjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK24pO251bGw9PT10aGlzLl94MT90aGlzLl8rPSJNIitjKyIsIit1OihNYXRoLmFicyh0aGlzLl94MS1jKT4xZS02fHxNYXRoLmFicyh0aGlzLl95MS11KT4xZS02KSYmKHRoaXMuXys9IkwiK2MrIiwiK3UpLG4mJihoPDAmJihoPWglUGkrUGkpLGg+amk/dGhpcy5fKz0iQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0LW8pKyIsIisoZS1zKSsiQSIrbisiLCIrbisiLDAsMSwiK2wrIiwiKyh0aGlzLl94MT1jKSsiLCIrKHRoaXMuX3kxPXUpOmg+MWUtNiYmKHRoaXMuXys9IkEiK24rIiwiK24rIiwwLCIrICsoaD49RmkpKyIsIitsKyIsIisodGhpcy5feDE9dCtuKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPWUrbipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbih0LGUsbixyKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpKyJoIisgK24rInYiKyArcisiaCIrLW4rIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgVWk9emk7ZnVuY3Rpb24gJGkodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIHFpKHQpe3JldHVybiB0LnRhcmdldH1mdW5jdGlvbiBXaSh0KXtyZXR1cm4gdC5yYWRpdXN9ZnVuY3Rpb24gVmkodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBIaSh0KXtyZXR1cm4gdC5lbmRBbmdsZX12YXIgR2k9ZnVuY3Rpb24oKXt2YXIgdD0kaSxlPXFpLG49V2kscj1WaSxpPUhpLGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1JaS5jYWxsKGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMscyksdT1lLmFwcGx5KHRoaXMscyksbD0rbi5hcHBseSh0aGlzLChzWzBdPWMscykpLGg9ci5hcHBseSh0aGlzLHMpLU9pLGY9aS5hcHBseSh0aGlzLHMpLU9pLGQ9bCpTaShoKSxwPWwqQWkoaCkseT0rbi5hcHBseSh0aGlzLChzWzBdPXUscykpLGc9ci5hcHBseSh0aGlzLHMpLU9pLHY9aS5hcHBseSh0aGlzLHMpLU9pO2lmKGF8fChhPW89VWkoKSksYS5tb3ZlVG8oZCxwKSxhLmFyYygwLDAsbCxoLGYpLGg9PT1nJiZmPT09dnx8KGEucXVhZHJhdGljQ3VydmVUbygwLDAseSpTaShnKSx5KkFpKGcpKSxhLmFyYygwLDAseSxnLHYpKSxhLnF1YWRyYXRpY0N1cnZlVG8oMCwwLGQscCksYS5jbG9zZVBhdGgoKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSaSgrdCksbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UmkoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSaSgrdCksbyk6aX0sby5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTp0fSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfTtmdW5jdGlvbiBYaSgpe31mdW5jdGlvbiBaaSh0LGUpe3ZhciBuPW5ldyBYaTtpZih0IGluc3RhbmNlb2YgWGkpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgcixpPS0xLGE9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysraTxhOyluLnNldChpLHRbaV0pO2Vsc2UgZm9yKDsrK2k8YTspbi5zZXQoZShyPXRbaV0saSx0KSxyKX1lbHNlIGlmKHQpZm9yKHZhciBvIGluIHQpbi5zZXQobyx0W29dKTtyZXR1cm4gbn1YaS5wcm90b3R5cGU9WmkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpYaSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgUWk9WmksS2k9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj1bXSxpPVtdO2Z1bmN0aW9uIGEobixpLG8scyl7aWYoaT49ci5sZW5ndGgpcmV0dXJuIG51bGwhPXQmJm4uc29ydCh0KSxudWxsIT1lP2Uobik6bjtmb3IodmFyIGMsdSxsLGg9LTEsZj1uLmxlbmd0aCxkPXJbaSsrXSxwPVFpKCkseT1vKCk7KytoPGY7KShsPXAuZ2V0KGM9ZCh1PW5baF0pKyIiKSk/bC5wdXNoKHUpOnAuc2V0KGMsW3VdKTtyZXR1cm4gcC5lYWNoKChmdW5jdGlvbih0LGUpe3MoeSxlLGEodCxpLG8scykpfSkpLHl9cmV0dXJuIG49e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsSmksdGEpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGEodCwwLGVhLG5hKX0sZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChuLGEpe2lmKCsrYT5yLmxlbmd0aClyZXR1cm4gbjt2YXIgbyxzPWlbYS0xXTtyZXR1cm4gbnVsbCE9ZSYmYT49ci5sZW5ndGg/bz1uLmVudHJpZXMoKToobz1bXSxuLmVhY2goKGZ1bmN0aW9uKGUsbil7by5wdXNoKHtrZXk6bix2YWx1ZXM6dChlLGEpfSl9KSkpLG51bGwhPXM/by5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzKHQua2V5LGUua2V5KX0pKTpvfShhKHQsMCxlYSxuYSksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gci5wdXNoKHQpLG59LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBpW3IubGVuZ3RoLTFdPXQsbn0sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLG59LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LG59fX07ZnVuY3Rpb24gSmkoKXtyZXR1cm57fX1mdW5jdGlvbiB0YSh0LGUsbil7dFtlXT1ufWZ1bmN0aW9uIGVhKCl7cmV0dXJuIFFpKCl9ZnVuY3Rpb24gbmEodCxlLG4pe3Quc2V0KGUsbil9ZnVuY3Rpb24gcmEoKXt9dmFyIGlhPVFpLnByb3RvdHlwZTtmdW5jdGlvbiBhYSh0LGUpe3ZhciBuPW5ldyByYTtpZih0IGluc3RhbmNlb2YgcmEpdC5lYWNoKChmdW5jdGlvbih0KXtuLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciByPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrcjxpOyluLmFkZCh0W3JdKTtlbHNlIGZvcig7KytyPGk7KW4uYWRkKGUodFtyXSxyLHQpKX1yZXR1cm4gbn1yYS5wcm90b3R5cGU9YWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyYSxoYXM6aWEuaGFzLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpc1siJCIrKHQrPSIiKV09dCx0aGlzfSxyZW1vdmU6aWEucmVtb3ZlLGNsZWFyOmlhLmNsZWFyLHZhbHVlczppYS5rZXlzLHNpemU6aWEuc2l6ZSxlbXB0eTppYS5lbXB0eSxlYWNoOmlhLmVhY2h9O3ZhciBvYT1hYSxzYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2gobik7cmV0dXJuIGV9LGNhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh0W25dKTtyZXR1cm4gZX0sdWE9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHtrZXk6bix2YWx1ZTp0W25dfSk7cmV0dXJuIGV9LGxhPU1hdGguUEkvMTgwLGhhPTE4MC9NYXRoLlBJO2Z1bmN0aW9uIGZhKHQpe2lmKHQgaW5zdGFuY2VvZiB5YSlyZXR1cm4gbmV3IHlhKHQubCx0LmEsdC5iLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBFYSh0KTt0IGluc3RhbmNlb2YgR2V8fCh0PVZlKHQpKTt2YXIgZSxuLHI9YmEodC5yKSxpPWJhKHQuZyksYT1iYSh0LmIpLG89Z2EoKC4yMjI1MDQ1KnIrLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gcj09PWkmJmk9PT1hP2U9bj1vOihlPWdhKCguNDM2MDc0NypyKy4zODUwNjQ5KmkrLjE0MzA4MDQqYSkvLjk2NDIyKSxuPWdhKCguMDEzOTMyMipyKy4wOTcxMDQ1KmkrLjcxNDE3MzMqYSkvLjgyNTIxKSksbmV3IHlhKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tbiksdC5vcGFjaXR5KX1mdW5jdGlvbiBkYSh0LGUpe3JldHVybiBuZXcgeWEodCwwLDAsbnVsbD09ZT8xOmUpfWZ1bmN0aW9uIHBhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mYSh0KTpuZXcgeWEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHlhKHQsZSxuLHIpe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBnYSh0KXtyZXR1cm4gdD42LzI5Kig2LzI5KSooNi8yOSk/TWF0aC5wb3codCwxLzMpOnQvKDYvMjkqMyooNi8yOSkpKzQvMjl9ZnVuY3Rpb24gdmEodCl7cmV0dXJuIHQ+Ni8yOT90KnQqdDo2LzI5KjMqKDYvMjkpKih0LTQvMjkpfWZ1bmN0aW9uIG1hKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gYmEodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24geGEodCl7aWYodCBpbnN0YW5jZW9mIHdhKXJldHVybiBuZXcgd2EodC5oLHQuYyx0LmwsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgeWF8fCh0PWZhKHQpKSwwPT09dC5hJiYwPT09dC5iKXJldHVybiBuZXcgd2EoTmFOLDA8dC5sJiZ0Lmw8MTAwPzA6TmFOLHQubCx0Lm9wYWNpdHkpO3ZhciBlPU1hdGguYXRhbjIodC5iLHQuYSkqaGE7cmV0dXJuIG5ldyB3YShlPDA/ZSszNjA6ZSxNYXRoLnNxcnQodC5hKnQuYSt0LmIqdC5iKSx0LmwsdC5vcGFjaXR5KX1mdW5jdGlvbiBfYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKG4sZSx0LG51bGw9PXI/MTpyKX1mdW5jdGlvbiBrYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/eGEodCk6bmV3IHdhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiB3YSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5jPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9ZnVuY3Rpb24gRWEodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IHlhKHQubCwwLDAsdC5vcGFjaXR5KTt2YXIgZT10LmgqbGE7cmV0dXJuIG5ldyB5YSh0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfVNlKHlhLHBhLEFlKE1lLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IHlhKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeWEodGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD0odGhpcy5sKzE2KS8xMTYsZT1pc05hTih0aGlzLmEpP3Q6dCt0aGlzLmEvNTAwLG49aXNOYU4odGhpcy5iKT90OnQtdGhpcy5iLzIwMDtyZXR1cm4gbmV3IEdlKG1hKDMuMTMzODU2MSooZT0uOTY0MjIqdmEoZSkpLTEuNjE2ODY2NyoodD0xKnZhKHQpKS0uNDkwNjE0Nioobj0uODI1MjEqdmEobikpKSxtYSgtLjk3ODc2ODQqZSsxLjkxNjE0MTUqdCsuMDMzNDU0Km4pLG1hKC4wNzE5NDUzKmUtLjIyODk5MTQqdCsxLjQwNTI0MjcqbiksdGhpcy5vcGFjaXR5KX19KSksU2Uod2Esa2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgd2EodGhpcy5oLHRoaXMuYyx0aGlzLmwrMTgqKG51bGw9PXQ/MTp0KSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB3YSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBFYSh0aGlzKS5yZ2IoKX19KSk7dmFyIFRhPS0uMjkyMjcsQ2E9LTEuNzg4NDUwMzgwNixTYT0zLjUxNzI5ODI0MzgsQWE9LS42NTU3NjM2NjY3OTk5OTk5O2Z1bmN0aW9uIE1hKHQpe2lmKHQgaW5zdGFuY2VvZiBCYSlyZXR1cm4gbmV3IEJhKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7dCBpbnN0YW5jZW9mIEdlfHwodD1WZSh0KSk7dmFyIGU9dC5yLzI1NSxuPXQuZy8yNTUscj10LmIvMjU1LGk9KEFhKnIrQ2EqZS1TYSpuKS8oQWErQ2EtU2EpLGE9ci1pLG89KDEuOTcyOTQqKG4taSktVGEqYSkvLS45MDY0OSxzPU1hdGguc3FydChvKm8rYSphKS8oMS45NzI5NCppKigxLWkpKSxjPXM/TWF0aC5hdGFuMihvLGEpKmhhLTEyMDpOYU47cmV0dXJuIG5ldyBCYShjPDA/YyszNjA6YyxzLGksdC5vcGFjaXR5KX1mdW5jdGlvbiBPYSh0LGUsbixyKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/TWEodCk6bmV3IEJhKHQsZSxuLG51bGw9PXI/MTpyKX1mdW5jdGlvbiBCYSh0LGUsbixyKXt0aGlzLmg9K3QsdGhpcy5zPStlLHRoaXMubD0rbix0aGlzLm9wYWNpdHk9K3J9U2UoQmEsT2EsQWUoTWUse2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBCYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBCYSh0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqbGEsZT0rdGhpcy5sLG49aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLHI9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IEdlKDI1NSooZStuKigtLjE0ODYxKnIrMS43ODI3NyppKSksMjU1KihlK24qKFRhKnIrLS45MDY0OSppKSksMjU1KihlK24qKDEuOTcyOTQqcikpLHRoaXMub3BhY2l0eSl9fSkpO3ZhciBOYT1BcnJheS5wcm90b3R5cGUuc2xpY2UsRGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxMYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LElhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHI9LTEsaT1lLmxlbmd0aDsrK3I8aTspaWYobj1SYSh0LGVbcl0pKXJldHVybiBuO3JldHVybiAwfTtmdW5jdGlvbiBSYSh0LGUpe2Zvcih2YXIgbj1lWzBdLHI9ZVsxXSxpPS0xLGE9MCxvPXQubGVuZ3RoLHM9by0xO2E8bztzPWErKyl7dmFyIGM9dFthXSx1PWNbMF0sbD1jWzFdLGg9dFtzXSxmPWhbMF0sZD1oWzFdO2lmKEZhKGMsaCxlKSlyZXR1cm4gMDtsPnIhPWQ+ciYmbjwoZi11KSooci1sKS8oZC1sKSt1JiYoaT0taSl9cmV0dXJuIGl9ZnVuY3Rpb24gRmEodCxlLG4pe3ZhciByLGksYSxvO3JldHVybiBmdW5jdGlvbih0LGUsbil7cmV0dXJuKGVbMF0tdFswXSkqKG5bMV0tdFsxXSk9PShuWzBdLXRbMF0pKihlWzFdLXRbMV0pfSh0LGUsbikmJihpPXRbcj0rKHRbMF09PT1lWzBdKV0sYT1uW3JdLG89ZVtyXSxpPD1hJiZhPD1vfHxvPD1hJiZhPD1pKX12YXIgUGE9ZnVuY3Rpb24oKXt9LGphPVtbXSxbW1sxLDEuNV0sWy41LDFdXV0sW1tbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWy41LDFdXV0sW1tbMSwuNV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbLjUsMV1dLFtbMSwuNV0sWzEuNSwxXV1dLFtbWzEsLjVdLFsxLDEuNV1dXSxbW1sxLC41XSxbLjUsMV1dXSxbW1suNSwxXSxbMSwuNV1dXSxbW1sxLDEuNV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEsLjVdXSxbWzEuNSwxXSxbMSwxLjVdXV0sW1tbMS41LDFdLFsxLC41XV1dLFtbWy41LDFdLFsxLjUsMV1dXSxbW1sxLDEuNV0sWzEuNSwxXV1dLFtbWy41LDFdLFsxLDEuNV1dXSxbXV0sWWE9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPU0scj1zO2Z1bmN0aW9uIGkodCl7dmFyIGU9bih0KTtpZihBcnJheS5pc0FycmF5KGUpKWU9ZS5zbGljZSgpLnNvcnQoRGEpO2Vsc2V7dmFyIHI9Zyh0KSxpPXJbMF0sbz1yWzFdO2U9QShpLG8sZSksZT1rKE1hdGguZmxvb3IoaS9lKSplLE1hdGguZmxvb3Ioby9lKSplLGUpfXJldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEodCxlKX0pKX1mdW5jdGlvbiBhKG4saSl7dmFyIGE9W10scz1bXTtyZXR1cm4gZnVuY3Rpb24obixyLGkpe3ZhciBhLHMsYyx1LGwsaCxmPW5ldyBBcnJheSxkPW5ldyBBcnJheTthPXM9LTEsdT1uWzBdPj1yLGphW3U8PDFdLmZvckVhY2gocCk7Zm9yKDsrK2E8dC0xOyljPXUsdT1uW2ErMV0+PXIsamFbY3x1PDwxXS5mb3JFYWNoKHApO2phW3U8PDBdLmZvckVhY2gocCk7Zm9yKDsrK3M8ZS0xOyl7Zm9yKGE9LTEsdT1uW3MqdCt0XT49cixsPW5bcyp0XT49cixqYVt1PDwxfGw8PDJdLmZvckVhY2gocCk7KythPHQtMTspYz11LHU9bltzKnQrdCthKzFdPj1yLGg9bCxsPW5bcyp0K2ErMV0+PXIsamFbY3x1PDwxfGw8PDJ8aDw8M10uZm9yRWFjaChwKTtqYVt1fGw8PDNdLmZvckVhY2gocCl9YT0tMSxsPW5bcyp0XT49cixqYVtsPDwyXS5mb3JFYWNoKHApO2Zvcig7KythPHQtMTspaD1sLGw9bltzKnQrYSsxXT49cixqYVtsPDwyfGg8PDNdLmZvckVhY2gocCk7ZnVuY3Rpb24gcCh0KXt2YXIgZSxuLHI9W3RbMF1bMF0rYSx0WzBdWzFdK3NdLGM9W3RbMV1bMF0rYSx0WzFdWzFdK3NdLHU9byhyKSxsPW8oYyk7KGU9ZFt1XSk/KG49ZltsXSk/KGRlbGV0ZSBkW2UuZW5kXSxkZWxldGUgZltuLnN0YXJ0XSxlPT09bj8oZS5yaW5nLnB1c2goYyksaShlLnJpbmcpKTpmW2Uuc3RhcnRdPWRbbi5lbmRdPXtzdGFydDplLnN0YXJ0LGVuZDpuLmVuZCxyaW5nOmUucmluZy5jb25jYXQobi5yaW5nKX0pOihkZWxldGUgZFtlLmVuZF0sZS5yaW5nLnB1c2goYyksZFtlLmVuZD1sXT1lKTooZT1mW2xdKT8obj1kW3VdKT8oZGVsZXRlIGZbZS5zdGFydF0sZGVsZXRlIGRbbi5lbmRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbbi5zdGFydF09ZFtlLmVuZF09e3N0YXJ0Om4uc3RhcnQsZW5kOmUuZW5kLHJpbmc6bi5yaW5nLmNvbmNhdChlLnJpbmcpfSk6KGRlbGV0ZSBmW2Uuc3RhcnRdLGUucmluZy51bnNoaWZ0KHIpLGZbZS5zdGFydD11XT1lKTpmW3VdPWRbbF09e3N0YXJ0OnUsZW5kOmwscmluZzpbcixjXX19amFbbDw8M10uZm9yRWFjaChwKX0obixpLChmdW5jdGlvbih0KXtyKHQsbixpKSxmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoLHI9dFtuLTFdWzFdKnRbMF1bMF0tdFtuLTFdWzBdKnRbMF1bMV07KytlPG47KXIrPXRbZS0xXVsxXSp0W2VdWzBdLXRbZS0xXVswXSp0W2VdWzFdO3JldHVybiByfSh0KT4wP2EucHVzaChbdF0pOnMucHVzaCh0KX0pKSxzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPTAscj1hLmxlbmd0aDtuPHI7KytuKWlmKC0xIT09SWEoKGU9YVtuXSlbMF0sdCkpcmV0dXJuIHZvaWQgZS5wdXNoKHQpfSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLHZhbHVlOmksY29vcmRpbmF0ZXM6YX19ZnVuY3Rpb24gbyhlKXtyZXR1cm4gMiplWzBdK2VbMV0qKHQrMSkqNH1mdW5jdGlvbiBzKG4scixpKXtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBhLG89blswXSxzPW5bMV0sYz0wfG8sdT0wfHMsbD1yW3UqdCtjXTtvPjAmJm88dCYmYz09PW8mJihhPXJbdSp0K2MtMV0sblswXT1vKyhpLWEpLyhsLWEpLS41KSxzPjAmJnM8ZSYmdT09PXMmJihhPXJbKHUtMSkqdCtjXSxuWzFdPXMrKGktYSkvKGwtYSktLjUpfSkpfXJldHVybiBpLmNvbnRvdXI9YSxpLnNpemU9ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3QsZV07dmFyIHI9TWF0aC5jZWlsKG5bMF0pLGE9TWF0aC5jZWlsKG5bMV0pO2lmKCEocj4wJiZhPjApKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaXplIik7cmV0dXJuIHQ9cixlPWEsaX0saS50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9MYShOYS5jYWxsKHQpKTpMYSh0KSxpKTpufSxpLnNtb290aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10P3M6UGEsaSk6cj09PXN9LGl9O2Z1bmN0aW9uIHphKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288aTsrK28pZm9yKHZhciBzPTAsYz0wO3M8cituOysrcylzPHImJihjKz10LmRhdGFbcytvKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtzLWErbypyXSksZS5kYXRhW3MtbitvKnJdPWMvTWF0aC5taW4ocysxLHItMSthLXMsYSkpfWZ1bmN0aW9uIFVhKHQsZSxuKXtmb3IodmFyIHI9dC53aWR0aCxpPXQuaGVpZ2h0LGE9MSsobjw8MSksbz0wO288cjsrK28pZm9yKHZhciBzPTAsYz0wO3M8aStuOysrcylzPGkmJihjKz10LmRhdGFbbytzKnJdKSxzPj1uJiYocz49YSYmKGMtPXQuZGF0YVtvKyhzLWEpKnJdKSxlLmRhdGFbbysocy1uKSpyXT1jL01hdGgubWluKHMrMSxpLTErYS1zLGEpKX1mdW5jdGlvbiAkYSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBxYSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBXYSgpe3JldHVybiAxfXZhciBWYT1mdW5jdGlvbigpe3ZhciB0PSRhLGU9cWEsbj1XYSxyPTk2MCxpPTUwMCxhPTIwLG89MixzPTMqYSxjPXIrMipzPj5vLHU9aSsyKnM+Pm8sbD1MYSgyMCk7ZnVuY3Rpb24gaChyKXt2YXIgaT1uZXcgRmxvYXQzMkFycmF5KGMqdSksaD1uZXcgRmxvYXQzMkFycmF5KGMqdSk7ci5mb3JFYWNoKChmdW5jdGlvbihyLGEsbCl7dmFyIGg9K3QocixhLGwpK3M+Pm8sZj0rZShyLGEsbCkrcz4+byxkPStuKHIsYSxsKTtoPj0wJiZoPGMmJmY+PTAmJmY8dSYmKGlbaCtmKmNdKz1kKX0pKSx6YSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksVWEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pLHphKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSxVYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byksemEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLFVhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKTt2YXIgZD1sKGkpO2lmKCFBcnJheS5pc0FycmF5KGQpKXt2YXIgcD1MKGkpO2Q9QSgwLHAsZCksKGQ9aygwLE1hdGguZmxvb3IocC9kKSpkLGQpKS5zaGlmdCgpfXJldHVybiBZYSgpLnRocmVzaG9sZHMoZCkuc2l6ZShbYyx1XSkoaSkubWFwKGYpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQudmFsdWUqPU1hdGgucG93KDIsLTIqbyksdC5jb29yZGluYXRlcy5mb3JFYWNoKGQpLHR9ZnVuY3Rpb24gZCh0KXt0LmZvckVhY2gocCl9ZnVuY3Rpb24gcCh0KXt0LmZvckVhY2goeSl9ZnVuY3Rpb24geSh0KXt0WzBdPXRbMF0qTWF0aC5wb3coMixvKS1zLHRbMV09dFsxXSpNYXRoLnBvdygyLG8pLXN9ZnVuY3Rpb24gZygpe3JldHVybiBjPXIrMioocz0zKmEpPj5vLHU9aSsyKnM+Pm8saH1yZXR1cm4gaC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TGEoK2UpLGgpOnR9LGgueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTplfSxoLndlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkxhKCt0KSxoKTpufSxoLnNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW3IsaV07dmFyIGU9TWF0aC5jZWlsKHRbMF0pLG49TWF0aC5jZWlsKHRbMV0pO2lmKCEoZT49MHx8ZT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gcj1lLGk9bixnKCl9LGguY2VsbFNpemU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PG87aWYoISgodD0rdCk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gbz1NYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4yKSxnKCl9LGgudGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/TGEoTmEuY2FsbCh0KSk6TGEodCksaCk6bH0saC5iYW5kd2lkdGg9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChhKihhKzEpKTtpZighKCh0PSt0KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBhPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnQqdCsxKS0xKS8yKSxnKCl9LGh9LEhhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gR2EodCxlLG4scixpLGEsbyxzLGMsdSl7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnN1YmplY3Q9bix0aGlzLmlkZW50aWZpZXI9cix0aGlzLmFjdGl2ZT1pLHRoaXMueD1hLHRoaXMueT1vLHRoaXMuZHg9cyx0aGlzLmR5PWMsdGhpcy5fPXV9ZnVuY3Rpb24gWGEoKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBaYSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gUWEodCl7cmV0dXJuIG51bGw9PXQ/e3g6Y2UueCx5OmNlLnl9OnR9ZnVuY3Rpb24gS2EoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9R2EucHJvdG90eXBlLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fLm9uLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpO3JldHVybiB0PT09dGhpcy5fP3RoaXM6dH07dmFyIEphPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1YYSxhPVphLG89UWEscz1LYSxjPXt9LHU9bHQoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGw9MCxoPTA7ZnVuY3Rpb24gZih0KXt0Lm9uKCJtb3VzZWRvd24uZHJhZyIsZCkuZmlsdGVyKHMpLm9uKCJ0b3VjaHN0YXJ0LmRyYWciLGcpLm9uKCJ0b3VjaG1vdmUuZHJhZyIsdikub24oInRvdWNoZW5kLmRyYWcgdG91Y2hjYW5jZWwuZHJhZyIsbSkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGQoKXtpZighciYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBvPWIoIm1vdXNlIixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxObix0aGlzLGFyZ3VtZW50cyk7byYmKGtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIscCwhMCkub24oIm1vdXNldXAuZHJhZyIseSwhMCksVGUoY2Uudmlldyksd2UoKSxuPSExLHQ9Y2UuY2xpZW50WCxlPWNlLmNsaWVudFksbygic3RhcnQiKSl9fWZ1bmN0aW9uIHAoKXtpZihFZSgpLCFuKXt2YXIgcj1jZS5jbGllbnRYLXQsaT1jZS5jbGllbnRZLWU7bj1yKnIraSppPmh9Yy5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIHkoKXtrZShjZS52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxDZShjZS52aWV3LG4pLEVlKCksYy5tb3VzZSgiZW5kIil9ZnVuY3Rpb24gZygpe2lmKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdCxlLG49Y2UuY2hhbmdlZFRvdWNoZXMscj1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPW4ubGVuZ3RoO2Zvcih0PTA7dDxvOysrdCkoZT1iKG5bdF0uaWRlbnRpZmllcixyLEJuLHRoaXMsYXJndW1lbnRzKSkmJih3ZSgpLGUoInN0YXJ0IikpfX1mdW5jdGlvbiB2KCl7dmFyIHQsZSxuPWNlLmNoYW5nZWRUb3VjaGVzLHI9bi5sZW5ndGg7Zm9yKHQ9MDt0PHI7Kyt0KShlPWNbblt0XS5pZGVudGlmaWVyXSkmJihFZSgpLGUoImRyYWciKSl9ZnVuY3Rpb24gbSgpe3ZhciB0LGUsbj1jZS5jaGFuZ2VkVG91Y2hlcyxpPW4ubGVuZ3RoO2ZvcihyJiZjbGVhclRpbWVvdXQocikscj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3I9bnVsbH0pLDUwMCksdD0wO3Q8aTsrK3QpKGU9Y1tuW3RdLmlkZW50aWZpZXJdKSYmKHdlKCksZSgiZW5kIikpfWZ1bmN0aW9uIGIodCxlLG4scixpKXt2YXIgYSxzLGgsZD1uKGUsdCkscD11LmNvcHkoKTtpZihwZShuZXcgR2EoZiwiYmVmb3Jlc3RhcnQiLGEsdCxsLGRbMF0sZFsxXSwwLDAscCksKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPShjZS5zdWJqZWN0PWE9by5hcHBseShyLGkpKSYmKHM9YS54LWRbMF18fDAsaD1hLnktZFsxXXx8MCwhMCl9KSkpcmV0dXJuIGZ1bmN0aW9uIG8odSl7dmFyIHksZz1kO3N3aXRjaCh1KXtjYXNlInN0YXJ0IjpjW3RdPW8seT1sKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBjW3RdLC0tbDtjYXNlImRyYWciOmQ9bihlLHQpLHk9bH1wZShuZXcgR2EoZix1LGEsdCx5LGRbMF0rcyxkWzFdK2gsZFswXS1nWzBdLGRbMV0tZ1sxXSxwKSxwLmFwcGx5LHAsW3UscixpXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhhKCEhdCksZik6aX0sZi5jb250YWluZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIYSh0KSxmKTphfSxmLnN1YmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpIYSh0KSxmKTpvfSxmLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkhhKCEhdCksZik6c30sZi5vbj1mdW5jdGlvbigpe3ZhciB0PXUub24uYXBwbHkodSxhcmd1bWVudHMpO3JldHVybiB0PT09dT9mOnR9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0odD0rdCkqdCxmKTpNYXRoLnNxcnQoaCl9LGZ9LHRvPXt9LGVvPXt9O2Z1bmN0aW9uIG5vKHQpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIitlKyddIHx8ICIiJ30pKS5qb2luKCIsIikrIn0iKX1mdW5jdGlvbiBybyh0KXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpLG49W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByIGluIHQpciBpbiBlfHxuLnB1c2goZVtyXT1yKX0pKSxufWZ1bmN0aW9uIGlvKHQsZSl7dmFyIG49dCsiIixyPW4ubGVuZ3RoO3JldHVybiByPGU/bmV3IEFycmF5KGUtcisxKS5qb2luKDApK246bn1mdW5jdGlvbiBhbyh0KXt2YXIgZSxuPXQuZ2V0VVRDSG91cnMoKSxyPXQuZ2V0VVRDTWludXRlcygpLGk9dC5nZXRVVENTZWNvbmRzKCksYT10LmdldFVUQ01pbGxpc2Vjb25kcygpO3JldHVybiBpc05hTih0KT8iSW52YWxpZCBEYXRlIjooKGU9dC5nZXRVVENGdWxsWWVhcigpKTwwPyItIitpbygtZSw2KTplPjk5OTk/IisiK2lvKGUsNik6aW8oZSw0KSkrIi0iK2lvKHQuZ2V0VVRDTW9udGgoKSsxLDIpKyItIitpbyh0LmdldFVUQ0RhdGUoKSwyKSsoYT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiLiIraW8oYSwzKSsiWiI6aT8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiOiIraW8oaSwyKSsiWiI6cnx8bj8iVCIraW8obiwyKSsiOiIraW8ociwyKSsiWiI6IiIpfXZhciBvbz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgUmVnRXhwKCdbIicrdCsiXG5ccl0iKSxuPXQuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiByKHQsZSl7dmFyIHIsaT1bXSxhPXQubGVuZ3RoLG89MCxzPTAsYz1hPD0wLHU9ITE7ZnVuY3Rpb24gbCgpe2lmKGMpcmV0dXJuIGVvO2lmKHUpcmV0dXJuIHU9ITEsdG87dmFyIGUscixpPW87aWYoMzQ9PT10LmNoYXJDb2RlQXQoaSkpe2Zvcig7bysrPGEmJjM0IT09dC5jaGFyQ29kZUF0KG8pfHwzND09PXQuY2hhckNvZGVBdCgrK28pOyk7cmV0dXJuKGU9byk+PWE/Yz0hMDoxMD09PShyPXQuY2hhckNvZGVBdChvKyspKT91PSEwOjEzPT09ciYmKHU9ITAsMTA9PT10LmNoYXJDb2RlQXQobykmJisrbyksdC5zbGljZShpKzEsZS0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtvPGE7KXtpZigxMD09PShyPXQuY2hhckNvZGVBdChlPW8rKykpKXU9ITA7ZWxzZSBpZigxMz09PXIpdT0hMCwxMD09PXQuY2hhckNvZGVBdChvKSYmKytvO2Vsc2UgaWYociE9PW4pY29udGludWU7cmV0dXJuIHQuc2xpY2UoaSxlKX1yZXR1cm4gYz0hMCx0LnNsaWNlKGksYSl9Zm9yKDEwPT09dC5jaGFyQ29kZUF0KGEtMSkmJi0tYSwxMz09PXQuY2hhckNvZGVBdChhLTEpJiYtLWE7KHI9bCgpKSE9PWVvOyl7Zm9yKHZhciBoPVtdO3IhPT10byYmciE9PWVvOyloLnB1c2gocikscj1sKCk7ZSYmbnVsbD09KGg9ZShoLHMrKykpfHxpLnB1c2goaCl9cmV0dXJuIGl9ZnVuY3Rpb24gaShlLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyhlW3RdKX0pKS5qb2luKHQpfSkpfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIGUubWFwKG8pLmpvaW4odCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbnVsbD09dD8iIjp0IGluc3RhbmNlb2YgRGF0ZT9hbyh0KTplLnRlc3QodCs9IiIpPyciJyt0LnJlcGxhY2UoLyIvZywnIiInKSsnIic6dH1yZXR1cm57cGFyc2U6ZnVuY3Rpb24odCxlKXt2YXIgbixpLGE9cih0LChmdW5jdGlvbih0LHIpe2lmKG4pcmV0dXJuIG4odCxyLTEpO2k9dCxuPWU/ZnVuY3Rpb24odCxlKXt2YXIgbj1ubyh0KTtyZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gZShuKHIpLGksdCl9fSh0LGUpOm5vKHQpfSkpO3JldHVybiBhLmNvbHVtbnM9aXx8W10sYX0scGFyc2VSb3dzOnIsZm9ybWF0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIG51bGw9PW4mJihuPXJvKGUpKSxbbi5tYXAobykuam9pbih0KV0uY29uY2F0KGkoZSxuKSkuam9pbigiXG4iKX0sZm9ybWF0Qm9keTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lJiYoZT1ybyh0KSksaSh0LGUpLmpvaW4oIlxuIil9LGZvcm1hdFJvd3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGEpLmpvaW4oIlxuIil9LGZvcm1hdFJvdzphLGZvcm1hdFZhbHVlOm99fSxzbz1vbygiLCIpLGNvPXNvLnBhcnNlLHVvPXNvLnBhcnNlUm93cyxsbz1zby5mb3JtYXQsaG89c28uZm9ybWF0Qm9keSxmbz1zby5mb3JtYXRSb3dzLHBvPXNvLmZvcm1hdFJvdyx5bz1zby5mb3JtYXRWYWx1ZSxnbz1vbygiXHQiKSx2bz1nby5wYXJzZSxtbz1nby5wYXJzZVJvd3MsYm89Z28uZm9ybWF0LHhvPWdvLmZvcm1hdEJvZHksX289Z28uZm9ybWF0Um93cyxrbz1nby5mb3JtYXRSb3csd289Z28uZm9ybWF0VmFsdWU7ZnVuY3Rpb24gRW8odCl7Zm9yKHZhciBlIGluIHQpe3ZhciBuLHIsaT10W2VdLnRyaW0oKTtpZihpKWlmKCJ0cnVlIj09PWkpaT0hMDtlbHNlIGlmKCJmYWxzZSI9PT1pKWk9ITE7ZWxzZSBpZigiTmFOIj09PWkpaT1OYU47ZWxzZSBpZihpc05hTihuPStpKSl7aWYoIShyPWkubWF0Y2goL14oWy0rXVxkezJ9KT9cZHs0fSgtXGR7Mn0oLVxkezJ9KT8pPyhUXGR7Mn06XGR7Mn0oOlxkezJ9KFwuXGR7M30pPyk/KFp8Wy0rXVxkezJ9OlxkezJ9KT8pPyQvKSkpY29udGludWU7VG8mJnJbNF0mJiFyWzddJiYoaT1pLnJlcGxhY2UoLy0vZywiLyIpLnJlcGxhY2UoL1QvLCIgIikpLGk9bmV3IERhdGUoaSl9ZWxzZSBpPW47ZWxzZSBpPW51bGw7dFtlXT1pfXJldHVybiB0fXZhciBUbz1uZXcgRGF0ZSgiMjAxOS0wMS0wMVQwMDowMCIpLmdldEhvdXJzKCl8fG5ldyBEYXRlKCIyMDE5LTA3LTAxVDAwOjAwIikuZ2V0SG91cnMoKTtmdW5jdGlvbiBDbyh0KXtyZXR1cm4rdH1mdW5jdGlvbiBTbyh0KXtyZXR1cm4gdCp0fWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0KigyLXQpfWZ1bmN0aW9uIE1vKHQpe3JldHVybigodCo9Mik8PTE/dCp0Oi0tdCooMi10KSsxKS8yfXZhciBPbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIE1hdGgucG93KHQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLEJvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMS1NYXRoLnBvdygxLXQsZSl9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLE5vPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPD0xP01hdGgucG93KHQsZSk6Mi1NYXRoLnBvdygyLXQsZSkpLzJ9cmV0dXJuIGU9K2Usbi5leHBvbmVudD10LG59KDMpLERvPU1hdGguUEksTG89RG8vMjtmdW5jdGlvbiBJbyh0KXtyZXR1cm4gMS1NYXRoLmNvcyh0KkxvKX1mdW5jdGlvbiBSbyh0KXtyZXR1cm4gTWF0aC5zaW4odCpMbyl9ZnVuY3Rpb24gRm8odCl7cmV0dXJuKDEtTWF0aC5jb3MoRG8qdCkpLzJ9ZnVuY3Rpb24gUG8odCl7cmV0dXJuIE1hdGgucG93KDIsMTAqdC0xMCl9ZnVuY3Rpb24gam8odCl7cmV0dXJuIDEtTWF0aC5wb3coMiwtMTAqdCl9ZnVuY3Rpb24gWW8odCl7cmV0dXJuKCh0Kj0yKTw9MT9NYXRoLnBvdygyLDEwKnQtMTApOjItTWF0aC5wb3coMiwxMC0xMCp0KSkvMn1mdW5jdGlvbiB6byh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIFVvKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uICRvKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIHFvKHQpe3JldHVybiAxLVdvKDEtdCl9ZnVuY3Rpb24gV28odCl7cmV0dXJuKHQ9K3QpPDQvMTE/Ny41NjI1KnQqdDp0PDgvMTE/Ny41NjI1Kih0LT02LzExKSp0Ky43NTp0PDEwLzExPzcuNTYyNSoodC09OS8xMSkqdCsuOTM3NTo3LjU2MjUqKHQtPTIxLzIyKSp0KzYzLzY0fWZ1bmN0aW9uIFZvKHQpe3JldHVybigodCo9Mik8PTE/MS1XbygxLXQpOldvKHQtMSkrMSkvMn12YXIgSG89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiB0KnQqKChlKzEpKnQtZSl9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxHbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuLS10KnQqKChlKzEpKnQrZSkrMX1yZXR1cm4gZT0rZSxuLm92ZXJzaG9vdD10LG59KDEuNzAxNTgpLFhvPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4oKHQqPTIpPDE/dCp0KigoZSsxKSp0LWUpOih0LT0yKSp0KigoZSsxKSp0K2UpKzIpLzJ9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxabz0yKk1hdGguUEksUW89ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89Wm8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIGUqTWF0aC5wb3coMiwxMCotLXQpKk1hdGguc2luKChyLXQpL24pfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKSxLbz1mdW5jdGlvbiB0KGUsbil7dmFyIHI9TWF0aC5hc2luKDEvKGU9TWF0aC5tYXgoMSxlKSkpKihuLz1abyk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMS1lKk1hdGgucG93KDIsLTEwKih0PSt0KSkqTWF0aC5zaW4oKHQrcikvbil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKGUpe3JldHVybiB0KGUsbipabyl9LGkucGVyaW9kPWZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbil9LGl9KDEsLjMpLEpvPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVpvKTtmdW5jdGlvbiBpKHQpe3JldHVybigodD0yKnQtMSk8MD9lKk1hdGgucG93KDIsMTAqdCkqTWF0aC5zaW4oKHItdCkvbik6Mi1lKk1hdGgucG93KDIsLTEwKnQpKk1hdGguc2luKChyK3QpL24pKS8yfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihlKXtyZXR1cm4gdChlLG4qWm8pfSxpLnBlcmlvZD1mdW5jdGlvbihuKXtyZXR1cm4gdChlLG4pfSxpfSgxLC4zKTtmdW5jdGlvbiB0cyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYmxvYigpfXZhciBlcz1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4odHMpfTtmdW5jdGlvbiBucyh0KXtpZighdC5vayl0aHJvdyBuZXcgRXJyb3IodC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7cmV0dXJuIHQuYXJyYXlCdWZmZXIoKX12YXIgcnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKG5zKX07ZnVuY3Rpb24gaXModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LnRleHQoKX12YXIgYXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGlzKX07ZnVuY3Rpb24gb3ModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYocj1uLG49dm9pZCAwKSxhcyhlLG4pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUscil9KSl9fWZ1bmN0aW9uIHNzKHQsZSxuLHIpezM9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCk7dmFyIGk9b28odCk7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIGkucGFyc2UodCxyKX0pKX12YXIgY3M9b3MoY28pLHVzPW9zKHZvKSxscz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixyKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBhIGluIGUpaVthXT1lW2FdO2kub25lcnJvcj1yLGkub25sb2FkPWZ1bmN0aW9uKCl7bihpKX0saS5zcmM9dH0pKX07ZnVuY3Rpb24gaHModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0Lmpzb24oKX12YXIgZnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKGhzKX07ZnVuY3Rpb24gZHModCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIGFzKGUsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLHQpfSkpfX12YXIgcHM9ZHMoImFwcGxpY2F0aW9uL3htbCIpLHlzPWRzKCJ0ZXh0L2h0bWwiKSxncz1kcygiaW1hZ2Uvc3ZnK3htbCIpLHZzPWZ1bmN0aW9uKHQsZSl7dmFyIG47ZnVuY3Rpb24gcigpe3ZhciByLGksYT1uLmxlbmd0aCxvPTAscz0wO2ZvcihyPTA7cjxhOysrcilvKz0oaT1uW3JdKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLHI9MDtyPGE7KytyKShpPW5bcl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxyLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7bj10fSxyLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Uscik6dH0sci55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHIpOmV9LHJ9LG1zPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sYnM9ZnVuY3Rpb24oKXtyZXR1cm4gMWUtNiooTWF0aC5yYW5kb20oKS0uNSl9O2Z1bmN0aW9uIHhzKHQsZSxuLHIpe2lmKGlzTmFOKGUpfHxpc05hTihuKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZD10Ll9yb290LHA9e2RhdGE6cn0seT10Ll94MCxnPXQuX3kwLHY9dC5feDEsbT10Ll95MTtpZighZClyZXR1cm4gdC5fcm9vdD1wLHQ7Zm9yKDtkLmxlbmd0aDspaWYoKHU9ZT49KGE9KHkrdikvMikpP3k9YTp2PWEsKGw9bj49KG89KGcrbSkvMikpP2c9bzptPW8saT1kLCEoZD1kW2g9bDw8MXx1XSkpcmV0dXJuIGlbaF09cCx0O2lmKHM9K3QuX3guY2FsbChudWxsLGQuZGF0YSksYz0rdC5feS5jYWxsKG51bGwsZC5kYXRhKSxlPT09cyYmbj09PWMpcmV0dXJuIHAubmV4dD1kLGk/aVtoXT1wOnQuX3Jvb3Q9cCx0O2Rve2k9aT9pW2hdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwodT1lPj0oYT0oeSt2KS8yKSk/eT1hOnY9YSwobD1uPj0obz0oZyttKS8yKSk/Zz1vOm09b313aGlsZSgoaD1sPDwxfHUpPT0oZj0oYz49byk8PDF8cz49YSkpO3JldHVybiBpW2ZdPWQsaVtoXT1wLHR9dmFyIF9zPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dGhpcy5ub2RlPXQsdGhpcy54MD1lLHRoaXMueTA9bix0aGlzLngxPXIsdGhpcy55MT1pfTtmdW5jdGlvbiBrcyh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3cyh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBFcyh0LGUsbil7dmFyIHI9bmV3IFRzKG51bGw9PWU/a3M6ZSxudWxsPT1uP3dzOm4sTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9yOnIuYWRkQWxsKHQpfWZ1bmN0aW9uIFRzKHQsZSxuLHIsaSxhKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3gwPW4sdGhpcy5feTA9cix0aGlzLl94MT1pLHRoaXMuX3kxPWEsdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gQ3ModCl7Zm9yKHZhciBlPXtkYXRhOnQuZGF0YX0sbj1lO3Q9dC5uZXh0OyluPW4ubmV4dD17ZGF0YTp0LmRhdGF9O3JldHVybiBlfXZhciBTcz1Fcy5wcm90b3R5cGU9VHMucHJvdG90eXBlO2Z1bmN0aW9uIEFzKHQpe3JldHVybiB0LngrdC52eH1mdW5jdGlvbiBNcyh0KXtyZXR1cm4gdC55K3Qudnl9U3MuY29weT1mdW5jdGlvbigpe3ZhciB0LGUsbj1uZXcgVHModGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxyPXRoaXMuX3Jvb3Q7aWYoIXIpcmV0dXJuIG47aWYoIXIubGVuZ3RoKXJldHVybiBuLl9yb290PUNzKHIpLG47Zm9yKHQ9W3tzb3VyY2U6cix0YXJnZXQ6bi5fcm9vdD1uZXcgQXJyYXkoNCl9XTtyPXQucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKGU9ci5zb3VyY2VbaV0pJiYoZS5sZW5ndGg/dC5wdXNoKHtzb3VyY2U6ZSx0YXJnZXQ6ci50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6ci50YXJnZXRbaV09Q3MoZSkpO3JldHVybiBufSxTcy5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiB4cyh0aGlzLmNvdmVyKGUsbiksZSxuLHQpfSxTcy5hZGRBbGw9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10Lmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxjPTEvMCx1PTEvMCxsPS0xLzAsaD0tMS8wO2ZvcihuPTA7bjxhOysrbilpc05hTihyPSt0aGlzLl94LmNhbGwobnVsbCxlPXRbbl0pKXx8aXNOYU4oaT0rdGhpcy5feS5jYWxsKG51bGwsZSkpfHwob1tuXT1yLHNbbl09aSxyPGMmJihjPXIpLHI+bCYmKGw9ciksaTx1JiYodT1pKSxpPmgmJihoPWkpKTtpZihjPmx8fHU+aClyZXR1cm4gdGhpcztmb3IodGhpcy5jb3ZlcihjLHUpLmNvdmVyKGwsaCksbj0wO248YTsrK24peHModGhpcyxvW25dLHNbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LFNzLmNvdmVyPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odD0rdCl8fGlzTmFOKGU9K2UpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX3gwLHI9dGhpcy5feTAsaT10aGlzLl94MSxhPXRoaXMuX3kxO2lmKGlzTmFOKG4pKWk9KG49TWF0aC5mbG9vcih0KSkrMSxhPShyPU1hdGguZmxvb3IoZSkpKzE7ZWxzZXtmb3IodmFyIG8scyxjPWktbix1PXRoaXMuX3Jvb3Q7bj50fHx0Pj1pfHxyPmV8fGU+PWE7KXN3aXRjaChzPShlPHIpPDwxfHQ8biwobz1uZXcgQXJyYXkoNCkpW3NdPXUsdT1vLGMqPTIscyl7Y2FzZSAwOmk9bitjLGE9citjO2JyZWFrO2Nhc2UgMTpuPWktYyxhPXIrYzticmVhaztjYXNlIDI6aT1uK2Mscj1hLWM7YnJlYWs7Y2FzZSAzOm49aS1jLHI9YS1jfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD11KX1yZXR1cm4gdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzfSxTcy5kYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3t0LnB1c2goZS5kYXRhKX13aGlsZShlPWUubmV4dCl9KSksdH0sU3MuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxTcy5maW5kPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbyxzLGMsdSxsPXRoaXMuX3gwLGg9dGhpcy5feTAsZj10aGlzLl94MSxkPXRoaXMuX3kxLHA9W10seT10aGlzLl9yb290O2Zvcih5JiZwLnB1c2gobmV3IF9zKHksbCxoLGYsZCkpLG51bGw9PW4/bj0xLzA6KGw9dC1uLGg9ZS1uLGY9dCtuLGQ9ZStuLG4qPW4pO2M9cC5wb3AoKTspaWYoISghKHk9Yy5ub2RlKXx8KGk9Yy54MCk+Znx8KGE9Yy55MCk+ZHx8KG89Yy54MSk8bHx8KHM9Yy55MSk8aCkpaWYoeS5sZW5ndGgpe3ZhciBnPShpK28pLzIsdj0oYStzKS8yO3AucHVzaChuZXcgX3MoeVszXSxnLHYsbyxzKSxuZXcgX3MoeVsyXSxpLHYsZyxzKSxuZXcgX3MoeVsxXSxnLGEsbyx2KSxuZXcgX3MoeVswXSxpLGEsZyx2KSksKHU9KGU+PXYpPDwxfHQ+PWcpJiYoYz1wW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMV09cFtwLmxlbmd0aC0xLXVdLHBbcC5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciBtPXQtK3RoaXMuX3guY2FsbChudWxsLHkuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCx5LmRhdGEpLHg9bSptK2IqYjtpZih4PG4pe3ZhciBfPU1hdGguc3FydChuPXgpO2w9dC1fLGg9ZS1fLGY9dCtfLGQ9ZStfLHI9eS5kYXRhfX1yZXR1cm4gcn0sU3MucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKGlzTmFOKGE9K3RoaXMuX3guY2FsbChudWxsLHQpKXx8aXNOYU4obz0rdGhpcy5feS5jYWxsKG51bGwsdCkpKXJldHVybiB0aGlzO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGgsZixkPXRoaXMuX3Jvb3QscD10aGlzLl94MCx5PXRoaXMuX3kwLGc9dGhpcy5feDEsdj10aGlzLl95MTtpZighZClyZXR1cm4gdGhpcztpZihkLmxlbmd0aClmb3IoOzspe2lmKCh1PWE+PShzPShwK2cpLzIpKT9wPXM6Zz1zLChsPW8+PShjPSh5K3YpLzIpKT95PWM6dj1jLGU9ZCwhKGQ9ZFtoPWw8PDF8dV0pKXJldHVybiB0aGlzO2lmKCFkLmxlbmd0aClicmVhazsoZVtoKzEmM118fGVbaCsyJjNdfHxlW2grMyYzXSkmJihuPWUsZj1oKX1mb3IoO2QuZGF0YSE9PXQ7KWlmKHI9ZCwhKGQ9ZC5uZXh0KSlyZXR1cm4gdGhpcztyZXR1cm4oaT1kLm5leHQpJiZkZWxldGUgZC5uZXh0LHI/KGk/ci5uZXh0PWk6ZGVsZXRlIHIubmV4dCx0aGlzKTplPyhpP2VbaF09aTpkZWxldGUgZVtoXSwoZD1lWzBdfHxlWzFdfHxlWzJdfHxlWzNdKSYmZD09PShlWzNdfHxlWzJdfHxlWzFdfHxlWzBdKSYmIWQubGVuZ3RoJiYobj9uW2ZdPWQ6dGhpcy5fcm9vdD1kKSx0aGlzKToodGhpcy5fcm9vdD1pLHRoaXMpfSxTcy5yZW1vdmVBbGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXRoaXMucmVtb3ZlKHRbZV0pO3JldHVybiB0aGlzfSxTcy5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LFNzLnNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97Kyt0fXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxTcy52aXNpdD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scz1bXSxjPXRoaXMuX3Jvb3Q7Zm9yKGMmJnMucHVzaChuZXcgX3MoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9cy5wb3AoKTspaWYoIXQoYz1lLm5vZGUscj1lLngwLGk9ZS55MCxhPWUueDEsbz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShyK2EpLzIsbD0oaStvKS8yOyhuPWNbM10pJiZzLnB1c2gobmV3IF9zKG4sdSxsLGEsbykpLChuPWNbMl0pJiZzLnB1c2gobmV3IF9zKG4scixsLHUsbykpLChuPWNbMV0pJiZzLnB1c2gobmV3IF9zKG4sdSxpLGEsbCkpLChuPWNbMF0pJiZzLnB1c2gobmV3IF9zKG4scixpLHUsbCkpfXJldHVybiB0aGlzfSxTcy52aXNpdEFmdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLG49W10scj1bXTtmb3IodGhpcy5fcm9vdCYmbi5wdXNoKG5ldyBfcyh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGk9ZS5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgYSxvPWUueDAscz1lLnkwLGM9ZS54MSx1PWUueTEsbD0obytjKS8yLGg9KHMrdSkvMjsoYT1pWzBdKSYmbi5wdXNoKG5ldyBfcyhhLG8scyxsLGgpKSwoYT1pWzFdKSYmbi5wdXNoKG5ldyBfcyhhLGwscyxjLGgpKSwoYT1pWzJdKSYmbi5wdXNoKG5ldyBfcyhhLG8saCxsLHUpKSwoYT1pWzNdKSYmbi5wdXNoKG5ldyBfcyhhLGwsaCxjLHUpKX1yLnB1c2goZSl9Zm9yKDtlPXIucG9wKCk7KXQoZS5ub2RlLGUueDAsZS55MCxlLngxLGUueTEpO3JldHVybiB0aGlzfSxTcy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl94PXQsdGhpcyk6dGhpcy5feH0sU3MueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9O3ZhciBPcz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9MSxpPTE7ZnVuY3Rpb24gYSgpe2Zvcih2YXIgdCxhLHMsYyx1LGwsaCxmPWUubGVuZ3RoLGQ9MDtkPGk7KytkKWZvcihhPUVzKGUsQXMsTXMpLnZpc2l0QWZ0ZXIobyksdD0wO3Q8ZjsrK3Qpcz1lW3RdLGw9bltzLmluZGV4XSxoPWwqbCxjPXMueCtzLnZ4LHU9cy55K3MudnksYS52aXNpdChwKTtmdW5jdGlvbiBwKHQsZSxuLGksYSl7dmFyIG89dC5kYXRhLGY9dC5yLGQ9bCtmO2lmKCFvKXJldHVybiBlPmMrZHx8aTxjLWR8fG4+dStkfHxhPHUtZDtpZihvLmluZGV4PnMuaW5kZXgpe3ZhciBwPWMtby54LW8udngseT11LW8ueS1vLnZ5LGc9cCpwK3kqeTtnPGQqZCYmKDA9PT1wJiYoZys9KHA9YnMoKSkqcCksMD09PXkmJihnKz0oeT1icygpKSp5KSxnPShkLShnPU1hdGguc3FydChnKSkpL2cqcixzLnZ4Kz0ocCo9ZykqKGQ9KGYqPWYpLyhoK2YpKSxzLnZ5Kz0oeSo9ZykqZCxvLnZ4LT1wKihkPTEtZCksby52eS09eSpkKX19fWZ1bmN0aW9uIG8odCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIHIsaSxhPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxyPTA7cjxhOysrcilpPWVbcl0sbltpLmluZGV4XT0rdChpLHIsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcyhudWxsPT10PzE6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LHMoKX0sYS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGEpOml9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsYSk6cn0sYS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSkscygpLGEpOnR9LGF9O2Z1bmN0aW9uIEJzKHQpe3JldHVybiB0LmluZGV4fWZ1bmN0aW9uIE5zKHQsZSl7dmFyIG49dC5nZXQoZSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2UpO3JldHVybiBufXZhciBEcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG89QnMscz1mdW5jdGlvbih0KXtyZXR1cm4gMS9NYXRoLm1pbihpW3Quc291cmNlLmluZGV4XSxpW3QudGFyZ2V0LmluZGV4XSl9LGM9bXMoMzApLHU9MTtmdW5jdGlvbiBsKHIpe2Zvcih2YXIgaT0wLG89dC5sZW5ndGg7aTx1OysraSlmb3IodmFyIHMsYyxsLGgsZixkLHAseT0wO3k8bzsrK3kpYz0ocz10W3ldKS5zb3VyY2UsaD0obD1zLnRhcmdldCkueCtsLnZ4LWMueC1jLnZ4fHxicygpLGY9bC55K2wudnktYy55LWMudnl8fGJzKCksaCo9ZD0oKGQ9TWF0aC5zcXJ0KGgqaCtmKmYpKS1uW3ldKS9kKnIqZVt5XSxmKj1kLGwudngtPWgqKHA9YVt5XSksbC52eS09ZipwLGMudngrPWgqKHA9MS1wKSxjLnZ5Kz1mKnB9ZnVuY3Rpb24gaCgpe2lmKHIpe3ZhciBzLGMsdT1yLmxlbmd0aCxsPXQubGVuZ3RoLGg9UWkocixvKTtmb3Iocz0wLGk9bmV3IEFycmF5KHUpO3M8bDsrK3MpKGM9dFtzXSkuaW5kZXg9cywib2JqZWN0IiE9dHlwZW9mIGMuc291cmNlJiYoYy5zb3VyY2U9TnMoaCxjLnNvdXJjZSkpLCJvYmplY3QiIT10eXBlb2YgYy50YXJnZXQmJihjLnRhcmdldD1OcyhoLGMudGFyZ2V0KSksaVtjLnNvdXJjZS5pbmRleF09KGlbYy5zb3VyY2UuaW5kZXhdfHwwKSsxLGlbYy50YXJnZXQuaW5kZXhdPShpW2MudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3Iocz0wLGE9bmV3IEFycmF5KGwpO3M8bDsrK3MpYz10W3NdLGFbc109aVtjLnNvdXJjZS5pbmRleF0vKGlbYy5zb3VyY2UuaW5kZXhdK2lbYy50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShsKSxmKCksbj1uZXcgQXJyYXkobCksZCgpfX1mdW5jdGlvbiBmKCl7aWYocilmb3IodmFyIG49MCxpPXQubGVuZ3RoO248aTsrK24pZVtuXT0rcyh0W25dLG4sdCl9ZnVuY3Rpb24gZCgpe2lmKHIpZm9yKHZhciBlPTAsaT10Lmxlbmd0aDtlPGk7KytlKW5bZV09K2ModFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbC5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxoKCl9LGwubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxoKCksbCk6dH0sbC5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGwpOm99LGwuaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxsKTp1fSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGYoKSxsKTpzfSxsLmRpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGQoKSxsKTpjfSxsfTtmdW5jdGlvbiBMcyh0KXtyZXR1cm4gdC54fWZ1bmN0aW9uIElzKHQpe3JldHVybiB0Lnl9dmFyIFJzPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKSxGcz1mdW5jdGlvbih0KXt2YXIgZSxuPTEscj0uMDAxLGk9MS1NYXRoLnBvdyhyLDEvMzAwKSxhPTAsbz0uNixzPVFpKCksYz1xbihsKSx1PWx0KCJ0aWNrIiwiZW5kIik7ZnVuY3Rpb24gbCgpe2goKSx1LmNhbGwoInRpY2siLGUpLG48ciYmKGMuc3RvcCgpLHUuY2FsbCgiZW5kIixlKSl9ZnVuY3Rpb24gaChyKXt2YXIgYyx1LGw9dC5sZW5ndGg7dm9pZCAwPT09ciYmKHI9MSk7Zm9yKHZhciBoPTA7aDxyOysraClmb3Iobis9KGEtbikqaSxzLmVhY2goKGZ1bmN0aW9uKHQpe3Qobil9KSksYz0wO2M8bDsrK2MpbnVsbD09KHU9dFtjXSkuZng/dS54Kz11LnZ4Kj1vOih1Lng9dS5meCx1LnZ4PTApLG51bGw9PXUuZnk/dS55Kz11LnZ5Kj1vOih1Lnk9dS5meSx1LnZ5PTApO3JldHVybiBlfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGUsbj0wLHI9dC5sZW5ndGg7bjxyOysrbil7aWYoKGU9dFtuXSkuaW5kZXg9bixudWxsIT1lLmZ4JiYoZS54PWUuZngpLG51bGwhPWUuZnkmJihlLnk9ZS5meSksaXNOYU4oZS54KXx8aXNOYU4oZS55KSl7dmFyIGk9MTAqTWF0aC5zcXJ0KG4pLGE9bipScztlLng9aSpNYXRoLmNvcyhhKSxlLnk9aSpNYXRoLnNpbihhKX0oaXNOYU4oZS52eCl8fGlzTmFOKGUudnkpKSYmKGUudng9ZS52eT0wKX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gZS5pbml0aWFsaXplJiZlLmluaXRpYWxpemUodCksZX1yZXR1cm4gbnVsbD09dCYmKHQ9W10pLGYoKSxlPXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBjLnJlc3RhcnQobCksZX0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBjLnN0b3AoKSxlfSxub2RlczpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLGYoKSxzLmVhY2goZCksZSk6dH0sYWxwaGE6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsZSk6bn0sYWxwaGFNaW46ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsZSk6cn0sYWxwaGFEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCxlKToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K3QsZSk6YX0sdmVsb2NpdHlEZWNheTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0xLXQsZSk6MS1vfSxmb3JjZTpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KG51bGw9PW4/cy5yZW1vdmUodCk6cy5zZXQodCxkKG4pKSxlKTpzLmdldCh0KX0sZmluZDpmdW5jdGlvbihlLG4scil7dmFyIGksYSxvLHMsYyx1PTAsbD10Lmxlbmd0aDtmb3IobnVsbD09cj9yPTEvMDpyKj1yLHU9MDt1PGw7Kyt1KShvPShpPWUtKHM9dFt1XSkueCkqaSsoYT1uLXMueSkqYSk8ciYmKGM9cyxyPW8pO3JldHVybiBjfSxvbjpmdW5jdGlvbih0LG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KHUub24odCxuKSxlKTp1Lm9uKHQpfX19LFBzPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaT1tcygtMzApLGE9MSxvPTEvMCxzPS44MTtmdW5jdGlvbiBjKHIpe3ZhciBpLGE9dC5sZW5ndGgsbz1Fcyh0LExzLElzKS52aXNpdEFmdGVyKGwpO2ZvcihuPXIsaT0wO2k8YTsrK2kpZT10W2ldLG8udmlzaXQoaCl9ZnVuY3Rpb24gdSgpe2lmKHQpe3ZhciBlLG4sYT10Lmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkoYSksZT0wO2U8YTsrK2Upbj10W2VdLHJbbi5pbmRleF09K2kobixlLHQpfX1mdW5jdGlvbiBsKHQpe3ZhciBlLG4saSxhLG8scz0wLGM9MDtpZih0Lmxlbmd0aCl7Zm9yKGk9YT1vPTA7bzw0OysrbykoZT10W29dKSYmKG49TWF0aC5hYnMoZS52YWx1ZSkpJiYocys9ZS52YWx1ZSxjKz1uLGkrPW4qZS54LGErPW4qZS55KTt0Lng9aS9jLHQueT1hL2N9ZWxzZXsoZT10KS54PWUuZGF0YS54LGUueT1lLmRhdGEueTtkb3tzKz1yW2UuZGF0YS5pbmRleF19d2hpbGUoZT1lLm5leHQpfXQudmFsdWU9c31mdW5jdGlvbiBoKHQsaSxjLHUpe2lmKCF0LnZhbHVlKXJldHVybiEwO3ZhciBsPXQueC1lLngsaD10LnktZS55LGY9dS1pLGQ9bCpsK2gqaDtpZihmKmYvczxkKXJldHVybiBkPG8mJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSksZS52eCs9bCp0LnZhbHVlKm4vZCxlLnZ5Kz1oKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1vKSl7KHQuZGF0YSE9PWV8fHQubmV4dCkmJigwPT09bCYmKGQrPShsPWJzKCkpKmwpLDA9PT1oJiYoZCs9KGg9YnMoKSkqaCksZDxhJiYoZD1NYXRoLnNxcnQoYSpkKSkpO2Rve3QuZGF0YSE9PWUmJihmPXJbdC5kYXRhLmluZGV4XSpuL2QsZS52eCs9bCpmLGUudnkrPWgqZil9d2hpbGUodD10Lm5leHQpfX1yZXR1cm4gYy5pbml0aWFsaXplPWZ1bmN0aW9uKGUpe3Q9ZSx1KCl9LGMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksdSgpLGMpOml9LGMuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dCp0LGMpOk1hdGguc3FydChhKX0sYy5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10KnQsYyk6TWF0aC5zcXJ0KG8pfSxjLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQqdCxjKTpNYXRoLnNxcnQocyl9LGN9LGpzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz1tcyguMSk7ZnVuY3Rpb24gcyh0KXtmb3IodmFyIG89MCxzPXIubGVuZ3RoO288czsrK28pe3ZhciBjPXJbb10sdT1jLngtZXx8MWUtNixsPWMueS1ufHwxZS02LGg9TWF0aC5zcXJ0KHUqdStsKmwpLGY9KGFbb10taCkqaVtvXSp0L2g7Yy52eCs9dSpmLGMudnkrPWwqZn19ZnVuY3Rpb24gYygpe2lmKHIpe3ZhciBlLG49ci5sZW5ndGg7Zm9yKGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGU9MDtlPG47KytlKWFbZV09K3QocltlXSxlLHIpLGlbZV09aXNOYU4oYVtlXSk/MDorbyhyW2VdLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1tcygrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PW4mJihuPTApLHMuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsYygpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLGMoKSxzKTpvfSxzLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxjKCkscyk6dH0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxzKTpufSxzfSxZcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaT1tcyguMSk7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eCs9KHJbYV0taS54KSpuW2FdKnR9ZnVuY3Rpb24gbygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGE9MDthPG87KythKW5bYV09aXNOYU4oclthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9bXMobnVsbD09dD8wOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxvKCl9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDptcygrdCksbygpLGEpOml9LGEueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOm1zKCtlKSxvKCksYSk6dH0sYX0senM9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9bXMoLjEpO2Z1bmN0aW9uIGEodCl7Zm9yKHZhciBpLGE9MCxvPWUubGVuZ3RoO2E8bzsrK2EpKGk9ZVthXSkudnkrPShyW2FdLWkueSkqblthXSp0fWZ1bmN0aW9uIG8oKXtpZihlKXt2YXIgYSxvPWUubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKSxyPW5ldyBBcnJheShvKSxhPTA7YTxvOysrYSluW2FdPWlzTmFOKHJbYV09K3QoZVthXSxhLGUpKT8wOitpKGVbYV0sYSxlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PW1zKG51bGw9PXQ/MDordCkpLGEuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQsbygpfSxhLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bXMoK3QpLG8oKSxhKTppfSxhLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTptcygrZSksbygpLGEpOnR9LGF9LFVzPWZ1bmN0aW9uKHQsZSl7aWYoKG49KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBuLHI9dC5zbGljZSgwLG4pO3JldHVybltyLmxlbmd0aD4xP3JbMF0rci5zbGljZSgyKTpyLCt0LnNsaWNlKG4rMSldfSwkcz1mdW5jdGlvbih0KXtyZXR1cm4odD1VcyhNYXRoLmFicyh0KSkpP3RbMV06TmFOfSxxcz0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBXcyh0KXtpZighKGU9cXMuZXhlYyh0KSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIit0KTt2YXIgZTtyZXR1cm4gbmV3IFZzKHtmaWxsOmVbMV0sYWxpZ246ZVsyXSxzaWduOmVbM10sc3ltYm9sOmVbNF0semVybzplWzVdLHdpZHRoOmVbNl0sY29tbWE6ZVs3XSxwcmVjaXNpb246ZVs4XSYmZVs4XS5zbGljZSgxKSx0cmltOmVbOV0sdHlwZTplWzEwXX0pfWZ1bmN0aW9uIFZzKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifVdzLnByb3RvdHlwZT1Wcy5wcm90b3R5cGUsVnMucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIEhzLEdzLFhzLFpzLFFzPWZ1bmN0aW9uKHQsZSl7dmFyIG49VXModCxlKTtpZighbilyZXR1cm4gdCsiIjt2YXIgcj1uWzBdLGk9blsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrcjpyLmxlbmd0aD5pKzE/ci5zbGljZSgwLGkrMSkrIi4iK3Iuc2xpY2UoaSsxKTpyK25ldyBBcnJheShpLXIubGVuZ3RoKzIpLmpvaW4oIjAiKX0sS3M9eyIlIjpmdW5jdGlvbih0LGUpe3JldHVybigxMDAqdCkudG9GaXhlZChlKX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygyKX0sYzpmdW5jdGlvbih0KXtyZXR1cm4gdCsiIn0sZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0V4cG9uZW50aWFsKGUpfSxmOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9GaXhlZChlKX0sZzpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvUHJlY2lzaW9uKGUpfSxvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFFzKDEwMCp0LGUpfSxyOlFzLHM6ZnVuY3Rpb24odCxlKXt2YXIgbj1Vcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdLGE9aS0oSHM9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKSsxLG89ci5sZW5ndGg7cmV0dXJuIGE9PT1vP3I6YT5vP3IrbmV3IEFycmF5KGEtbysxKS5qb2luKCIwIik6YT4wP3Iuc2xpY2UoMCxhKSsiLiIrci5zbGljZShhKToiMC4iK25ldyBBcnJheSgxLWEpLmpvaW4oIjAiKStVcyh0LE1hdGgubWF4KDAsZSthLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fSxKcz1mdW5jdGlvbih0KXtyZXR1cm4gdH0sdGM9QXJyYXkucHJvdG90eXBlLm1hcCxlYz1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIsK1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl0sbmM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP0pzOihlPXRjLmNhbGwodC5ncm91cGluZyxOdW1iZXIpLG49dC50aG91c2FuZHMrIiIsZnVuY3Rpb24odCxyKXtmb3IodmFyIGk9dC5sZW5ndGgsYT1bXSxvPTAscz1lWzBdLGM9MDtpPjAmJnM+MCYmKGMrcysxPnImJihzPU1hdGgubWF4KDEsci1jKSksYS5wdXNoKHQuc3Vic3RyaW5nKGktPXMsaStzKSksISgoYys9cysxKT5yKSk7KXM9ZVtvPShvKzEpJWUubGVuZ3RoXTtyZXR1cm4gYS5yZXZlcnNlKCkuam9pbihuKX0pLGk9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzBdKyIiLGE9dm9pZCAwPT09dC5jdXJyZW5jeT8iIjp0LmN1cnJlbmN5WzFdKyIiLG89dm9pZCAwPT09dC5kZWNpbWFsPyIuIjp0LmRlY2ltYWwrIiIscz12b2lkIDA9PT10Lm51bWVyYWxzP0pzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fSh0Yy5jYWxsKHQubnVtZXJhbHMsU3RyaW5nKSksYz12b2lkIDA9PT10LnBlcmNlbnQ/IiUiOnQucGVyY2VudCsiIix1PXZvaWQgMD09PXQubWludXM/Ii0iOnQubWludXMrIiIsbD12b2lkIDA9PT10Lm5hbj8iTmFOIjp0Lm5hbisiIjtmdW5jdGlvbiBoKHQpe3ZhciBlPSh0PVdzKHQpKS5maWxsLG49dC5hbGlnbixoPXQuc2lnbixmPXQuc3ltYm9sLGQ9dC56ZXJvLHA9dC53aWR0aCx5PXQuY29tbWEsZz10LnByZWNpc2lvbix2PXQudHJpbSxtPXQudHlwZTsibiI9PT1tPyh5PSEwLG09ImciKTpLc1ttXXx8KHZvaWQgMD09PWcmJihnPTEyKSx2PSEwLG09ImciKSwoZHx8IjAiPT09ZSYmIj0iPT09bikmJihkPSEwLGU9IjAiLG49Ij0iKTt2YXIgYj0iJCI9PT1mP2k6IiMiPT09ZiYmL1tib3hYXS8udGVzdChtKT8iMCIrbS50b0xvd2VyQ2FzZSgpOiIiLHg9IiQiPT09Zj9hOi9bJXBdLy50ZXN0KG0pP2M6IiIsXz1Lc1ttXSxrPS9bZGVmZ3BycyVdLy50ZXN0KG0pO2Z1bmN0aW9uIHcodCl7dmFyIGksYSxjLGY9Yix3PXg7aWYoImMiPT09bSl3PV8odCkrdyx0PSIiO2Vsc2V7dmFyIEU9KHQ9K3QpPDA7aWYodD1pc05hTih0KT9sOl8oTWF0aC5hYnModCksZyksdiYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxFJiYwPT0rdCYmKEU9ITEpLGY9KEU/IigiPT09aD9oOnU6Ii0iPT09aHx8IigiPT09aD8iIjpoKStmLHc9KCJzIj09PW0/ZWNbOCtIcy8zXToiIikrdysoRSYmIigiPT09aD8iKSI6IiIpLGspZm9yKGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fXkmJiFkJiYodD1yKHQsMS8wKSk7dmFyIFQ9Zi5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsQz1UPHA/bmV3IEFycmF5KHAtVCsxKS5qb2luKGUpOiIiO3N3aXRjaCh5JiZkJiYodD1yKEMrdCxDLmxlbmd0aD9wLXcubGVuZ3RoOjEvMCksQz0iIiksbil7Y2FzZSI8Ijp0PWYrdCt3K0M7YnJlYWs7Y2FzZSI9Ijp0PWYrQyt0K3c7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxUPUMubGVuZ3RoPj4xKStmK3QrdytDLnNsaWNlKFQpO2JyZWFrO2RlZmF1bHQ6dD1DK2YrdCt3fXJldHVybiBzKHQpfXJldHVybiBnPXZvaWQgMD09PWc/NjovW2dwcnNdLy50ZXN0KG0pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZykpLHcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sd31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49aCgoKHQ9V3ModCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKCRzKGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksYT1lY1s4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrYX19fX07ZnVuY3Rpb24gcmModCl7cmV0dXJuIEdzPW5jKHQpLFhzPUdzLmZvcm1hdCxacz1Hcy5mb3JtYXRQcmVmaXgsR3N9cmMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO3ZhciBpYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtJHMoTWF0aC5hYnModCkpKX0sYWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcigkcyhlKS8zKSkpLSRzKE1hdGguYWJzKHQpKSl9LG9jPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsJHMoZSktJHModCkpKzF9LHNjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjY307ZnVuY3Rpb24gY2MoKXt0aGlzLnJlc2V0KCl9Y2MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjYyxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe2xjKHVjLHQsdGhpcy50KSxsYyh0aGlzLHVjLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz11Yy50OnRoaXMucz11Yy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciB1Yz1uZXcgY2M7ZnVuY3Rpb24gbGModCxlLG4pe3ZhciByPXQucz1lK24saT1yLWUsYT1yLWk7dC50PWUtYSsobi1pKX12YXIgaGM9TWF0aC5QSSxmYz1oYy8yLGRjPWhjLzQscGM9MipoYyx5Yz0xODAvaGMsZ2M9aGMvMTgwLHZjPU1hdGguYWJzLG1jPU1hdGguYXRhbixiYz1NYXRoLmF0YW4yLHhjPU1hdGguY29zLF9jPU1hdGguY2VpbCxrYz1NYXRoLmV4cCx3Yz0oTWF0aC5mbG9vcixNYXRoLmxvZyksRWM9TWF0aC5wb3csVGM9TWF0aC5zaW4sQ2M9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LFNjPU1hdGguc3FydCxBYz1NYXRoLnRhbjtmdW5jdGlvbiBNYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9oYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gT2ModCl7cmV0dXJuIHQ+MT9mYzp0PC0xPy1mYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gQmModCl7cmV0dXJuKHQ9VGModC8yKSkqdH1mdW5jdGlvbiBOYygpe31mdW5jdGlvbiBEYyh0LGUpe3QmJkljLmhhc093blByb3BlcnR5KHQudHlwZSkmJkljW3QudHlwZV0odCxlKX12YXIgTGM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtEYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspRGMobltyXS5nZW9tZXRyeSxlKX19LEljPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7UmModC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVJjKG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe0ZjKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspRmMobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KURjKG5bcl0sZSl9fTtmdW5jdGlvbiBSYyh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBGYyh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KVJjKHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX12YXIgUGMsamMsWWMsemMsVWMsJGM9ZnVuY3Rpb24odCxlKXt0JiZMYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0xjW3QudHlwZV0odCxlKTpEYyh0LGUpfSxxYz1zYygpLFdjPXNjKCksVmM9e3BvaW50Ok5jLGxpbmVTdGFydDpOYyxsaW5lRW5kOk5jLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3FjLnJlc2V0KCksVmMubGluZVN0YXJ0PUhjLFZjLmxpbmVFbmQ9R2N9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rcWM7V2MuYWRkKHQ8MD9wYyt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PU5jfSxzcGhlcmU6ZnVuY3Rpb24oKXtXYy5hZGQocGMpfX07ZnVuY3Rpb24gSGMoKXtWYy5wb2ludD1YY31mdW5jdGlvbiBHYygpe1pjKFBjLGpjKX1mdW5jdGlvbiBYYyh0LGUpe1ZjLnBvaW50PVpjLFBjPXQsamM9ZSxZYz10Kj1nYyx6Yz14YyhlPShlKj1nYykvMitkYyksVWM9VGMoZSl9ZnVuY3Rpb24gWmModCxlKXt2YXIgbj0odCo9Z2MpLVljLHI9bj49MD8xOi0xLGk9cipuLGE9eGMoZT0oZSo9Z2MpLzIrZGMpLG89VGMoZSkscz1VYypvLGM9emMqYStzKnhjKGkpLHU9cypyKlRjKGkpO3FjLmFkZChiYyh1LGMpKSxZYz10LHpjPWEsVWM9b312YXIgUWM9ZnVuY3Rpb24odCl7cmV0dXJuIFdjLnJlc2V0KCksJGModCxWYyksMipXY307ZnVuY3Rpb24gS2ModCl7cmV0dXJuW2JjKHRbMV0sdFswXSksT2ModFsyXSldfWZ1bmN0aW9uIEpjKHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9eGMobik7cmV0dXJuW3IqeGMoZSkscipUYyhlKSxUYyhuKV19ZnVuY3Rpb24gdHUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gZXUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIG51KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIGl1KHQpe3ZhciBlPVNjKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgYXUsb3Usc3UsY3UsdXUsbHUsaHUsZnUsZHUscHUseXU9c2MoKSxndT17cG9pbnQ6dnUsbGluZVN0YXJ0OmJ1LGxpbmVFbmQ6eHUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Z3UucG9pbnQ9X3UsZ3UubGluZVN0YXJ0PWt1LGd1LmxpbmVFbmQ9d3UseXUucmVzZXQoKSxWYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1ZjLnBvbHlnb25FbmQoKSxndS5wb2ludD12dSxndS5saW5lU3RhcnQ9YnUsZ3UubGluZUVuZD14dSxxYzwwPyhhdT0tKHN1PTE4MCksb3U9LShjdT05MCkpOnl1PjFlLTY/Y3U9OTA6eXU8LTFlLTYmJihvdT0tOTApLHB1WzBdPWF1LHB1WzFdPXN1fSxzcGhlcmU6ZnVuY3Rpb24oKXthdT0tKHN1PTE4MCksb3U9LShjdT05MCl9fTtmdW5jdGlvbiB2dSh0LGUpe2R1LnB1c2gocHU9W2F1PXQsc3U9dF0pLGU8b3UmJihvdT1lKSxlPmN1JiYoY3U9ZSl9ZnVuY3Rpb24gbXUodCxlKXt2YXIgbj1KYyhbdCpnYyxlKmdjXSk7aWYoZnUpe3ZhciByPWV1KGZ1LG4pLGk9ZXUoW3JbMV0sLXJbMF0sMF0scik7aXUoaSksaT1LYyhpKTt2YXIgYSxvPXQtdXUscz1vPjA/MTotMSxjPWlbMF0qeWMqcyx1PXZjKG8pPjE4MDt1XihzKnV1PGMmJmM8cyp0KT8oYT1pWzFdKnljKT5jdSYmKGN1PWEpOnVeKHMqdXU8KGM9KGMrMzYwKSUzNjAtMTgwKSYmYzxzKnQpPyhhPS1pWzFdKnljKTxvdSYmKG91PWEpOihlPG91JiYob3U9ZSksZT5jdSYmKGN1PWUpKSx1P3Q8dXU/RXUoYXUsdCk+RXUoYXUsc3UpJiYoc3U9dCk6RXUodCxzdSk+RXUoYXUsc3UpJiYoYXU9dCk6c3U+PWF1Pyh0PGF1JiYoYXU9dCksdD5zdSYmKHN1PXQpKTp0PnV1P0V1KGF1LHQpPkV1KGF1LHN1KSYmKHN1PXQpOkV1KHQsc3UpPkV1KGF1LHN1KSYmKGF1PXQpfWVsc2UgZHUucHVzaChwdT1bYXU9dCxzdT10XSk7ZTxvdSYmKG91PWUpLGU+Y3UmJihjdT1lKSxmdT1uLHV1PXR9ZnVuY3Rpb24gYnUoKXtndS5wb2ludD1tdX1mdW5jdGlvbiB4dSgpe3B1WzBdPWF1LHB1WzFdPXN1LGd1LnBvaW50PXZ1LGZ1PW51bGx9ZnVuY3Rpb24gX3UodCxlKXtpZihmdSl7dmFyIG49dC11dTt5dS5hZGQodmMobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBsdT10LGh1PWU7VmMucG9pbnQodCxlKSxtdSh0LGUpfWZ1bmN0aW9uIGt1KCl7VmMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gd3UoKXtfdShsdSxodSksVmMubGluZUVuZCgpLHZjKHl1KT4xZS02JiYoYXU9LShzdT0xODApKSxwdVswXT1hdSxwdVsxXT1zdSxmdT1udWxsfWZ1bmN0aW9uIEV1KHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBUdSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQ3UodCxlKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1lJiZlPD10WzFdOmU8dFswXXx8dFsxXTxlfXZhciBTdSxBdSxNdSxPdSxCdSxOdSxEdSxMdSxJdSxSdSxGdSxQdSxqdSxZdSx6dSxVdSwkdT1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scztpZihjdT1zdT0tKGF1PW91PTEvMCksZHU9W10sJGModCxndSksbj1kdS5sZW5ndGgpe2ZvcihkdS5zb3J0KFR1KSxlPTEsYT1bcj1kdVswXV07ZTxuOysrZSlDdShyLChpPWR1W2VdKVswXSl8fEN1KHIsaVsxXSk/KEV1KHJbMF0saVsxXSk+RXUoclswXSxyWzFdKSYmKHJbMV09aVsxXSksRXUoaVswXSxyWzFdKT5FdShyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6YS5wdXNoKHI9aSk7Zm9yKG89LTEvMCxlPTAscj1hW249YS5sZW5ndGgtMV07ZTw9bjtyPWksKytlKWk9YVtlXSwocz1FdShyWzFdLGlbMF0pKT5vJiYobz1zLGF1PWlbMF0sc3U9clsxXSl9cmV0dXJuIGR1PXB1PW51bGwsYXU9PT0xLzB8fG91PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW2F1LG91XSxbc3UsY3VdXX0scXU9e3NwaGVyZTpOYyxwb2ludDpXdSxsaW5lU3RhcnQ6SHUsbGluZUVuZDpadSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtxdS5saW5lU3RhcnQ9UXUscXUubGluZUVuZD1LdX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3F1LmxpbmVTdGFydD1IdSxxdS5saW5lRW5kPVp1fX07ZnVuY3Rpb24gV3UodCxlKXt0Kj1nYzt2YXIgbj14YyhlKj1nYyk7VnUobip4Yyh0KSxuKlRjKHQpLFRjKGUpKX1mdW5jdGlvbiBWdSh0LGUsbil7KytTdSxNdSs9KHQtTXUpL1N1LE91Kz0oZS1PdSkvU3UsQnUrPShuLUJ1KS9TdX1mdW5jdGlvbiBIdSgpe3F1LnBvaW50PUd1fWZ1bmN0aW9uIEd1KHQsZSl7dCo9Z2M7dmFyIG49eGMoZSo9Z2MpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxxdS5wb2ludD1YdSxWdShZdSx6dSxVdSl9ZnVuY3Rpb24gWHUodCxlKXt0Kj1nYzt2YXIgbj14YyhlKj1nYykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89YmMoU2MoKG89enUqYS1VdSppKSpvKyhvPVV1KnItWXUqYSkqbysobz1ZdSppLXp1KnIpKm8pLFl1KnIrenUqaStVdSphKTtBdSs9byxOdSs9byooWXUrKFl1PXIpKSxEdSs9byooenUrKHp1PWkpKSxMdSs9byooVXUrKFV1PWEpKSxWdShZdSx6dSxVdSl9ZnVuY3Rpb24gWnUoKXtxdS5wb2ludD1XdX1mdW5jdGlvbiBRdSgpe3F1LnBvaW50PUp1fWZ1bmN0aW9uIEt1KCl7dGwoUHUsanUpLHF1LnBvaW50PVd1fWZ1bmN0aW9uIEp1KHQsZSl7UHU9dCxqdT1lLHQqPWdjLGUqPWdjLHF1LnBvaW50PXRsO3ZhciBuPXhjKGUpO1l1PW4qeGModCksenU9bipUYyh0KSxVdT1UYyhlKSxWdShZdSx6dSxVdSl9ZnVuY3Rpb24gdGwodCxlKXt0Kj1nYzt2YXIgbj14YyhlKj1nYykscj1uKnhjKHQpLGk9bipUYyh0KSxhPVRjKGUpLG89enUqYS1VdSppLHM9VXUqci1ZdSphLGM9WXUqaS16dSpyLHU9U2MobypvK3MqcytjKmMpLGw9T2ModSksaD11JiYtbC91O0l1Kz1oKm8sUnUrPWgqcyxGdSs9aCpjLEF1Kz1sLE51Kz1sKihZdSsoWXU9cikpLER1Kz1sKih6dSsoenU9aSkpLEx1Kz1sKihVdSsoVXU9YSkpLFZ1KFl1LHp1LFV1KX12YXIgZWw9ZnVuY3Rpb24odCl7U3U9QXU9TXU9T3U9QnU9TnU9RHU9THU9SXU9UnU9RnU9MCwkYyh0LHF1KTt2YXIgZT1JdSxuPVJ1LHI9RnUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTwxZS0xMiYmKGU9TnUsbj1EdSxyPUx1LEF1PDFlLTYmJihlPU11LG49T3Uscj1CdSksKGk9ZSplK24qbityKnIpPDFlLTEyKT9bTmFOLE5hTl06W2JjKG4sZSkqeWMsT2Moci9TYyhpKSkqeWNdfSxubD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LHJsPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPXQobixyKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49ZS5pbnZlcnQobixyKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufTtmdW5jdGlvbiBpbCh0LGUpe3JldHVyblt2Yyh0KT5oYz90K01hdGgucm91bmQoLXQvcGMpKnBjOnQsZV19ZnVuY3Rpb24gYWwodCxlLG4pe3JldHVybih0JT1wYyk/ZXx8bj9ybChzbCh0KSxjbChlLG4pKTpzbCh0KTplfHxuP2NsKGUsbik6aWx9ZnVuY3Rpb24gb2wodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5oYz9lLXBjOmU8LWhjP2UrcGM6ZSxuXX19ZnVuY3Rpb24gc2wodCl7dmFyIGU9b2wodCk7cmV0dXJuIGUuaW52ZXJ0PW9sKC10KSxlfWZ1bmN0aW9uIGNsKHQsZSl7dmFyIG49eGModCkscj1UYyh0KSxpPXhjKGUpLGE9VGMoZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqbitzKnI7cmV0dXJuW2JjKGMqaS1sKmEscypuLXUqciksT2MobCppK2MqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPXhjKGUpLHM9eGModCkqbyxjPVRjKHQpKm8sdT1UYyhlKSxsPXUqaS1jKmE7cmV0dXJuW2JjKGMqaSt1KmEscypuK2wqciksT2MobCpuLXMqcildfSxvfWlsLmludmVydD1pbDt2YXIgdWw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qZ2MsZVsxXSpnYykpWzBdKj15YyxlWzFdKj15YyxlfXJldHVybiB0PWFsKHRbMF0qZ2MsdFsxXSpnYyx0Lmxlbmd0aD4yP3RbMl0qZ2M6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSpnYyxlWzFdKmdjKSlbMF0qPXljLGVbMV0qPXljLGV9LGV9O2Z1bmN0aW9uIGxsKHQsZSxuLHIsaSxhKXtpZihuKXt2YXIgbz14YyhlKSxzPVRjKGUpLGM9cipuO251bGw9PWk/KGk9ZStyKnBjLGE9ZS1jLzIpOihpPWhsKG8saSksYT1obChvLGEpLChyPjA/aTxhOmk+YSkmJihpKz1yKnBjKSk7Zm9yKHZhciB1LGw9aTtyPjA/bD5hOmw8YTtsLT1jKXU9S2MoW28sLXMqeGMobCksLXMqVGMobCldKSx0LnBvaW50KHVbMF0sdVsxXSl9fWZ1bmN0aW9uIGhsKHQsZSl7KGU9SmMoZSkpWzBdLT10LGl1KGUpO3ZhciBuPU1jKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrcGMtMWUtNiklcGN9dmFyIGZsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5sKFswLDBdKSxyPW5sKDkwKSxpPW5sKDYpLGE9e3BvaW50OmZ1bmN0aW9uKG4scil7dC5wdXNoKG49ZShuLHIpKSxuWzBdKj15YyxuWzFdKj15Y319O2Z1bmN0aW9uIG8oKXt2YXIgbz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKmdjLGM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqZ2M7cmV0dXJuIHQ9W10sZT1hbCgtb1swXSpnYywtb1sxXSpnYywwKS5pbnZlcnQsbGwoYSxzLGMsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Om5sKFsrdFswXSwrdFsxXV0pLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOnJ9LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bmwoK3QpLG8pOml9LG99LGRsPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuKXt0LnB1c2goW2Usbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6TmMscmVqb2luOmZ1bmN0aW9uKCl7ZS5sZW5ndGg+MSYmZS5wdXNoKGUucG9wKCkuY29uY2F0KGUuc2hpZnQoKSkpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgbj1lO3JldHVybiBlPVtdLHQ9bnVsbCxufX19LHBsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZjKHRbMF0tZVswXSk8MWUtNiYmdmModFsxXS1lWzFdKTwxZS02fTtmdW5jdGlvbiB5bCh0LGUsbixyKXt0aGlzLng9dCx0aGlzLno9ZSx0aGlzLm89bix0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfXZhciBnbD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhLG8scz1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLG4scj10WzBdLG89dFtlXTtpZihwbChyLG8pKXtmb3IoaS5saW5lU3RhcnQoKSxhPTA7YTxlOysrYSlpLnBvaW50KChyPXRbYV0pWzBdLHJbMV0pO2kubGluZUVuZCgpfWVsc2Ugcy5wdXNoKG49bmV3IHlsKHIsdCxudWxsLCEwKSksYy5wdXNoKG4ubz1uZXcgeWwocixudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgeWwobyx0LG51bGwsITEpKSxjLnB1c2gobi5vPW5ldyB5bChvLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGMuc29ydChlKSx2bChzKSx2bChjKSxhPTAsbz1jLmxlbmd0aDthPG87KythKWNbYV0uZT1uPSFuO2Zvcih2YXIgdSxsLGg9c1swXTs7KXtmb3IodmFyIGY9aCxkPSEwO2YudjspaWYoKGY9Zi5uKT09PWgpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYoZClmb3IoYT0wLG89dS5sZW5ndGg7YTxvOysrYSlpLnBvaW50KChsPXVbYV0pWzBdLGxbMV0pO2Vsc2UgcihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKGQpZm9yKHU9Zi5wLnosYT11Lmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLnAueCwtMSxpKTtmPWYucH11PShmPWYubykueixkPSFkfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19O2Z1bmN0aW9uIHZsKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLHI9MCxpPXRbMF07KytyPGU7KWkubj1uPXRbcl0sbi5wPWksaT1uO2kubj1uPXRbMF0sbi5wPWl9fXZhciBtbD1zYygpO2Z1bmN0aW9uIGJsKHQpe3JldHVybiB2Yyh0WzBdKTw9aGM/dFswXTpDYyh0WzBdKSooKHZjKHRbMF0pK2hjKSVwYy1oYyl9dmFyIHhsPWZ1bmN0aW9uKHQsZSl7dmFyIG49YmwoZSkscj1lWzFdLGk9VGMociksYT1bVGMobiksLXhjKG4pLDBdLG89MCxzPTA7bWwucmVzZXQoKSwxPT09aT9yPWZjKzFlLTY6LTE9PT1pJiYocj0tZmMtMWUtNik7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9YmwoZikscD1mWzFdLzIrZGMseT1UYyhwKSxnPXhjKHApLHY9MDt2PGg7Kyt2LGQ9Yix5PV8sZz1rLGY9bSl7dmFyIG09bFt2XSxiPWJsKG0pLHg9bVsxXS8yK2RjLF89VGMoeCksaz14Yyh4KSx3PWItZCxFPXc+PTA/MTotMSxUPUUqdyxDPVQ+aGMsUz15Kl87aWYobWwuYWRkKGJjKFMqRSpUYyhUKSxnKmsrUyp4YyhUKSkpLG8rPUM/dytFKnBjOncsQ15kPj1uXmI+PW4pe3ZhciBBPWV1KEpjKGYpLEpjKG0pKTtpdShBKTt2YXIgTT1ldShhLEEpO2l1KE0pO3ZhciBPPShDXnc+PTA/LTE6MSkqT2MoTVsyXSk7KHI+T3x8cj09PU8mJihBWzBdfHxBWzFdKSkmJihzKz1DXnc+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPDFlLTYmJm1sPC0xZS02KV4xJnN9LF9sPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9ZGwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDp5LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXYsZi5saW5lU3RhcnQ9bSxmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9eSxmLmxpbmVFbmQ9ZyxvPUYobyk7dmFyIHQ9eGwoYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksZ2wobyx3bCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiB2KHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gbSgpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7dihzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoa2wpKX1yZXR1cm4gZn19O2Z1bmN0aW9uIGtsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIHdsKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLWZjLTFlLTY6ZmMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLWZjLTFlLTY6ZmMtZVsxXSl9dmFyIEVsPV9sKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/aGM6LWhjLGM9dmMoYS1uKTt2YyhjLWhjKTwxZS02Pyh0LnBvaW50KG4scj0ocitvKS8yPjA/ZmM6LWZjKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksdC5wb2ludChhLHIpLGU9MCk6aSE9PXMmJmM+PWhjJiYodmMobi1pKTwxZS02JiYobi09MWUtNippKSx2YyhhLXMpPDFlLTYmJihhLT0xZS02KnMpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVRjKHQtbik7cmV0dXJuIHZjKG8pPjFlLTY/bWMoKFRjKGUpKihhPXhjKHIpKSpUYyhuKS1UYyhyKSooaT14YyhlKSkqVGModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qZmMsci5wb2ludCgtaGMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoaGMsaSksci5wb2ludChoYywwKSxyLnBvaW50KGhjLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLWhjLC1pKSxyLnBvaW50KC1oYywwKSxyLnBvaW50KC1oYyxpKTtlbHNlIGlmKHZjKHRbMF0tZVswXSk+MWUtNil7dmFyIGE9dFswXTxlWzBdP2hjOi1oYztpPW4qYS8yLHIucG9pbnQoLWEsaSksci5wb2ludCgwLGkpLHIucG9pbnQoYSxpKX1lbHNlIHIucG9pbnQoZVswXSxlWzFdKX0pLFstaGMsLWZjXSk7dmFyIFRsPWZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpLG49NipnYyxyPWU+MCxpPXZjKGUpPjFlLTY7ZnVuY3Rpb24gYSh0LG4pe3JldHVybiB4Yyh0KSp4YyhuKT5lfWZ1bmN0aW9uIG8odCxuLHIpe3ZhciBpPVsxLDAsMF0sYT1ldShKYyh0KSxKYyhuKSksbz10dShhLGEpLHM9YVswXSxjPW8tcypzO2lmKCFjKXJldHVybiFyJiZ0O3ZhciB1PWUqby9jLGw9LWUqcy9jLGg9ZXUoaSxhKSxmPXJ1KGksdSk7bnUoZixydShhLGwpKTt2YXIgZD1oLHA9dHUoZixkKSx5PXR1KGQsZCksZz1wKnAteSoodHUoZixmKS0xKTtpZighKGc8MCkpe3ZhciB2PVNjKGcpLG09cnUoZCwoLXAtdikveSk7aWYobnUobSxmKSxtPUtjKG0pLCFyKXJldHVybiBtO3ZhciBiLHg9dFswXSxfPW5bMF0saz10WzFdLHc9blsxXTtfPHgmJihiPXgseD1fLF89Yik7dmFyIEU9Xy14LFQ9dmMoRS1oYyk8MWUtNjtpZighVCYmdzxrJiYoYj1rLGs9dyx3PWIpLFR8fEU8MWUtNj9UP2srdz4wXm1bMV08KHZjKG1bMF0teCk8MWUtNj9rOncpOms8PW1bMV0mJm1bMV08PXc6RT5oY14oeDw9bVswXSYmbVswXTw9Xykpe3ZhciBDPXJ1KGQsKC1wK3YpL3kpO3JldHVybiBudShDLGYpLFttLEtjKEMpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgaT1yP3Q6aGMtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX1yZXR1cm4gX2woYSwoZnVuY3Rpb24odCl7dmFyIGUsbixjLHUsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1jPSExLGw9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgZCxwPVtoLGZdLHk9YShoLGYpLGc9cj95PzA6cyhoLGYpOnk/cyhoKyhoPDA/aGM6LWhjKSxmKTowO2lmKCFlJiYodT1jPXkpJiZ0LmxpbmVTdGFydCgpLHkhPT1jJiYoIShkPW8oZSxwKSl8fHBsKGUsZCl8fHBsKHAsZCkpJiYocFswXSs9MWUtNixwWzFdKz0xZS02LHk9YShwWzBdLHBbMV0pKSx5IT09YylsPTAseT8odC5saW5lU3RhcnQoKSxkPW8ocCxlKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPW8oZSxwKSx0LnBvaW50KGRbMF0sZFsxXSksdC5saW5lRW5kKCkpLGU9ZDtlbHNlIGlmKGkmJmUmJnJeeSl7dmFyIHY7ZyZufHwhKHY9byhwLGUsITApKXx8KGw9MCxyPyh0LmxpbmVTdGFydCgpLHQucG9pbnQodlswXVswXSx2WzBdWzFdKSx0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCkpOih0LnBvaW50KHZbMV1bMF0sdlsxXVsxXSksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHZbMF1bMF0sdlswXVsxXSkpKX0heXx8ZSYmcGwoZSxwKXx8dC5wb2ludChwWzBdLHBbMV0pLGU9cCxjPXksbj1nfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBsfCh1JiZjKTw8MX19fSksKGZ1bmN0aW9uKGUscixpLGEpe2xsKGEsdCxuLGksZSxyKX0pLHI/WzAsLXRdOlstaGMsdC1oY10pfTtmdW5jdGlvbiBDbCh0LGUsbixyKXtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIHQ8PWkmJmk8PW4mJmU8PWEmJmE8PXJ9ZnVuY3Rpb24gYShpLGEscyx1KXt2YXIgbD0wLGg9MDtpZihudWxsPT1pfHwobD1vKGkscykpIT09KGg9byhhLHMpKXx8YyhpLGEpPDBecz4wKWRve3UucG9pbnQoMD09PWx8fDM9PT1sP3Q6bixsPjE/cjplKX13aGlsZSgobD0obCtzKzQpJTQpIT09aCk7ZWxzZSB1LnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gbyhyLGkpe3JldHVybiB2YyhyWzBdLXQpPDFlLTY/aT4wPzA6Mzp2YyhyWzBdLW4pPDFlLTY/aT4wPzI6MTp2YyhyWzFdLWUpPDFlLTY/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gYyh0LngsZS54KX1mdW5jdGlvbiBjKHQsZSl7dmFyIG49byh0LDEpLHI9byhlLDEpO3JldHVybiBuIT09cj9uLXI6MD09PW4/ZVsxXS10WzFdOjE9PT1uP3RbMF0tZVswXToyPT09bj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihvKXt2YXIgYyx1LGwsaCxmLGQscCx5LGcsdixtLGI9byx4PWRsKCksXz17cG9pbnQ6ayxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PXcsdSYmdS5wdXNoKGw9W10pO3Y9ITAsZz0hMSxwPXk9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7YyYmKHcoaCxmKSxkJiZnJiZ4LnJlam9pbigpLGMucHVzaCh4LnJlc3VsdCgpKSk7Xy5wb2ludD1rLGcmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPXgsYz1bXSx1PVtdLG09ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLG49MCxpPXUubGVuZ3RoO248aTsrK24pZm9yKHZhciBhLG8scz11W25dLGM9MSxsPXMubGVuZ3RoLGg9c1swXSxmPWhbMF0sZD1oWzFdO2M8bDsrK2MpYT1mLG89ZCxoPXNbY10sZj1oWzBdLGQ9aFsxXSxvPD1yP2Q+ciYmKGYtYSkqKHItbyk+KGQtbykqKHQtYSkmJisrZTpkPD1yJiYoZi1hKSooci1vKTwoZC1vKSoodC1hKSYmLS1lO3JldHVybiBlfSgpLG49bSYmZSxpPShjPUYoYykpLmxlbmd0aDsobnx8aSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLGEobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGkmJmdsKGMscyxlLGEsbyksby5wb2x5Z29uRW5kKCkpO2I9byxjPXU9bD1udWxsfX07ZnVuY3Rpb24gayh0LGUpe2kodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIHcoYSxvKXt2YXIgcz1pKGEsbyk7aWYodSYmbC5wdXNoKFthLG9dKSx2KWg9YSxmPW8sZD1zLHY9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pKTtlbHNlIGlmKHMmJmcpYi5wb2ludChhLG8pO2Vsc2V7dmFyIGM9W3A9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTkscCkpLHk9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTkseSkpXSx4PVthPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGEpKSxvPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LG8pKV07IWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXRbMF0sYz10WzFdLHU9MCxsPTEsaD1lWzBdLXMsZj1lWzFdLWM7aWYobz1uLXMsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoaD4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1pLXMsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9aWYobz1yLWMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWVsc2UgaWYoZj4wKXtpZihvPmwpcmV0dXJuO28+dSYmKHU9byl9aWYobz1hLWMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPHUpcmV0dXJuO288bCYmKGw9byl9cmV0dXJuIHU+MCYmKHRbMF09cyt1KmgsdFsxXT1jK3UqZiksbDwxJiYoZVswXT1zK2wqaCxlWzFdPWMrbCpmKSwhMH19fX19KGMseCx0LGUsbixyKT9zJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGEsbyksbT0hMSk6KGd8fChiLmxpbmVTdGFydCgpLGIucG9pbnQoY1swXSxjWzFdKSksYi5wb2ludCh4WzBdLHhbMV0pLHN8fGIubGluZUVuZCgpLG09ITEpfXA9YSx5PW8sZz1zfXJldHVybiBffX12YXIgU2wsQWwsTWwsT2w9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scj0wLGk9MCxhPTk2MCxvPTUwMDtyZXR1cm4gbj17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OnQ9Q2wocixpLGEsbykoZT1uKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStzWzBdWzBdLGk9K3NbMF1bMV0sYT0rc1sxXVswXSxvPStzWzFdWzFdLHQ9ZT1udWxsLG4pOltbcixpXSxbYSxvXV19fX0sQmw9c2MoKSxObD17c3BoZXJlOk5jLHBvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe05sLnBvaW50PUxsLE5sLmxpbmVFbmQ9RGx9LGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmN9O2Z1bmN0aW9uIERsKCl7TmwucG9pbnQ9TmwubGluZUVuZD1OY31mdW5jdGlvbiBMbCh0LGUpe1NsPXQqPWdjLEFsPVRjKGUqPWdjKSxNbD14YyhlKSxObC5wb2ludD1JbH1mdW5jdGlvbiBJbCh0LGUpe3QqPWdjO3ZhciBuPVRjKGUqPWdjKSxyPXhjKGUpLGk9dmModC1TbCksYT14YyhpKSxvPXIqVGMoaSkscz1NbCpuLUFsKnIqYSxjPUFsKm4rTWwqciphO0JsLmFkZChiYyhTYyhvKm8rcypzKSxjKSksU2w9dCxBbD1uLE1sPXJ9dmFyIFJsPWZ1bmN0aW9uKHQpe3JldHVybiBCbC5yZXNldCgpLCRjKHQsTmwpLCtCbH0sRmw9W251bGwsbnVsbF0sUGw9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOkZsfSxqbD1mdW5jdGlvbih0LGUpe3JldHVybiBGbFswXT10LEZsWzFdPWUsUmwoUGwpfSxZbD17RmVhdHVyZTpmdW5jdGlvbih0LGUpe3JldHVybiBVbCh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXS5nZW9tZXRyeSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19LHpsPXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gJGwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoJGwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe3JldHVybiBxbCh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKHFsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LFBvbHlnb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gV2wodC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihXbChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5nZW9tZXRyaWVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVWwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX19O2Z1bmN0aW9uIFVsKHQsZSl7cmV0dXJuISghdHx8IXpsLmhhc093blByb3BlcnR5KHQudHlwZSkpJiZ6bFt0LnR5cGVdKHQsZSl9ZnVuY3Rpb24gJGwodCxlKXtyZXR1cm4gMD09PWpsKHQsZSl9ZnVuY3Rpb24gcWwodCxlKXtmb3IodmFyIG4scixpLGE9MCxvPXQubGVuZ3RoO2E8bzthKyspe2lmKDA9PT0ocj1qbCh0W2FdLGUpKSlyZXR1cm4hMDtpZihhPjAmJihpPWpsKHRbYV0sdFthLTFdKSk+MCYmbjw9aSYmcjw9aSYmKG4rci1pKSooMS1NYXRoLnBvdygobi1yKS9pLDIpKTwxZS0xMippKXJldHVybiEwO249cn1yZXR1cm4hMX1mdW5jdGlvbiBXbCh0LGUpe3JldHVybiEheGwodC5tYXAoVmwpLEhsKGUpKX1mdW5jdGlvbiBWbCh0KXtyZXR1cm4odD10Lm1hcChIbCkpLnBvcCgpLHR9ZnVuY3Rpb24gSGwodCl7cmV0dXJuW3RbMF0qZ2MsdFsxXSpnY119dmFyIEdsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJllsLmhhc093blByb3BlcnR5KHQudHlwZSk/WWxbdC50eXBlXTpVbCkodCxlKX07ZnVuY3Rpb24gWGwodCxlLG4pe3ZhciByPWsodCxlLTFlLTYsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBabCh0LGUsbil7dmFyIHI9ayh0LGUtMWUtNixuKS5jb25jYXQoZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIFFsKCl7dmFyIHQsZSxuLHIsaSxhLG8scyxjLHUsbCxoLGY9MTAsZD1mLHA9OTAseT0zNjAsZz0yLjU7ZnVuY3Rpb24gdigpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm0oKX19ZnVuY3Rpb24gbSgpe3JldHVybiBrKF9jKHIvcCkqcCxuLHApLm1hcChsKS5jb25jYXQoayhfYyhzL3kpKnksbyx5KS5tYXAoaCkpLmNvbmNhdChrKF9jKGUvZikqZix0LGYpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQlcCk+MWUtNn0pKS5tYXAoYykpLmNvbmNhdChrKF9jKGEvZCkqZCxpLGQpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHZjKHQleSk+MWUtNn0pKS5tYXAodSkpfXJldHVybiB2LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIG0oKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pKX0sdi5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltsKHIpLmNvbmNhdChoKG8pLnNsaWNlKDEpLGwobikucmV2ZXJzZSgpLnNsaWNlKDEpLGgocykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSx2LmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOnYuZXh0ZW50TWlub3IoKX0sdi5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXVswXSxuPSt0WzFdWzBdLHM9K3RbMF1bMV0sbz0rdFsxXVsxXSxyPm4mJih0PXIscj1uLG49dCkscz5vJiYodD1zLHM9byxvPXQpLHYucHJlY2lzaW9uKGcpKTpbW3Isc10sW24sb11dfSx2LmV4dGVudE1pbm9yPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStuWzBdWzBdLHQ9K25bMV1bMF0sYT0rblswXVsxXSxpPStuWzFdWzFdLGU+dCYmKG49ZSxlPXQsdD1uKSxhPmkmJihuPWEsYT1pLGk9biksdi5wcmVjaXNpb24oZykpOltbZSxhXSxbdCxpXV19LHYuc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD92LnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6di5zdGVwTWlub3IoKX0sdi5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9K3RbMF0seT0rdFsxXSx2KTpbcCx5XX0sdi5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9K3RbMF0sZD0rdFsxXSx2KTpbZixkXX0sdi5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K2YsYz1YbChhLGksOTApLHU9WmwoZSx0LGcpLGw9WGwocyxvLDkwKSxoPVpsKHIsbixnKSx2KTpnfSx2LmV4dGVudE1ham9yKFtbLTE4MCwxZS02LTkwXSxbMTgwLDkwLTFlLTZdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC0xZS02XSxbMTgwLDgwKzFlLTZdXSl9ZnVuY3Rpb24gS2woKXtyZXR1cm4gUWwoKSgpfXZhciBKbCx0aCxlaCxuaCxyaD1mdW5jdGlvbih0LGUpe3ZhciBuPXRbMF0qZ2Mscj10WzFdKmdjLGk9ZVswXSpnYyxhPWVbMV0qZ2Msbz14YyhyKSxzPVRjKHIpLGM9eGMoYSksdT1UYyhhKSxsPW8qeGMobiksaD1vKlRjKG4pLGY9Yyp4YyhpKSxkPWMqVGMoaSkscD0yKk9jKFNjKEJjKGEtcikrbypjKkJjKGktbikpKSx5PVRjKHApLGc9cD9mdW5jdGlvbih0KXt2YXIgZT1UYyh0Kj1wKS95LG49VGMocC10KS95LHI9bipsK2UqZixpPW4qaCtlKmQsYT1uKnMrZSp1O3JldHVybltiYyhpLHIpKnljLGJjKGEsU2MocipyK2kqaSkpKnljXX06ZnVuY3Rpb24oKXtyZXR1cm5bbip5YyxyKnljXX07cmV0dXJuIGcuZGlzdGFuY2U9cCxnfSxpaD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sYWg9c2MoKSxvaD1zYygpLHNoPXtwb2ludDpOYyxsaW5lU3RhcnQ6TmMsbGluZUVuZDpOYyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtzaC5saW5lU3RhcnQ9Y2gsc2gubGluZUVuZD1oaH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3NoLmxpbmVTdGFydD1zaC5saW5lRW5kPXNoLnBvaW50PU5jLGFoLmFkZCh2YyhvaCkpLG9oLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PWFoLzI7cmV0dXJuIGFoLnJlc2V0KCksdH19O2Z1bmN0aW9uIGNoKCl7c2gucG9pbnQ9dWh9ZnVuY3Rpb24gdWgodCxlKXtzaC5wb2ludD1saCxKbD1laD10LHRoPW5oPWV9ZnVuY3Rpb24gbGgodCxlKXtvaC5hZGQobmgqdC1laCplKSxlaD10LG5oPWV9ZnVuY3Rpb24gaGgoKXtsaChKbCx0aCl9dmFyIGZoPXNoLGRoPTEvMCxwaD1kaCx5aD0tZGgsZ2g9eWg7dmFyIHZoLG1oLGJoLHhoLF9oPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8ZGgmJihkaD10KTt0PnloJiYoeWg9dCk7ZTxwaCYmKHBoPWUpO2U+Z2gmJihnaD1lKX0sbGluZVN0YXJ0Ok5jLGxpbmVFbmQ6TmMscG9seWdvblN0YXJ0Ok5jLHBvbHlnb25FbmQ6TmMscmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9W1tkaCxwaF0sW3loLGdoXV07cmV0dXJuIHloPWdoPS0ocGg9ZGg9MS8wKSx0fX0sa2g9MCx3aD0wLEVoPTAsVGg9MCxDaD0wLFNoPTAsQWg9MCxNaD0wLE9oPTAsQmg9e3BvaW50Ok5oLGxpbmVTdGFydDpEaCxsaW5lRW5kOlJoLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0JoLmxpbmVTdGFydD1GaCxCaC5saW5lRW5kPVBofSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7QmgucG9pbnQ9TmgsQmgubGluZVN0YXJ0PURoLEJoLmxpbmVFbmQ9Umh9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PU9oP1tBaC9PaCxNaC9PaF06U2g/W1RoL1NoLENoL1NoXTpFaD9ba2gvRWgsd2gvRWhdOltOYU4sTmFOXTtyZXR1cm4ga2g9d2g9RWg9VGg9Q2g9U2g9QWg9TWg9T2g9MCx0fX07ZnVuY3Rpb24gTmgodCxlKXtraCs9dCx3aCs9ZSwrK0VofWZ1bmN0aW9uIERoKCl7QmgucG9pbnQ9TGh9ZnVuY3Rpb24gTGgodCxlKXtCaC5wb2ludD1JaCxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIEloKHQsZSl7dmFyIG49dC1iaCxyPWUteGgsaT1TYyhuKm4rcipyKTtUaCs9aSooYmgrdCkvMixDaCs9aSooeGgrZSkvMixTaCs9aSxOaChiaD10LHhoPWUpfWZ1bmN0aW9uIFJoKCl7QmgucG9pbnQ9Tmh9ZnVuY3Rpb24gRmgoKXtCaC5wb2ludD1qaH1mdW5jdGlvbiBQaCgpe1loKHZoLG1oKX1mdW5jdGlvbiBqaCh0LGUpe0JoLnBvaW50PVloLE5oKHZoPWJoPXQsbWg9eGg9ZSl9ZnVuY3Rpb24gWWgodCxlKXt2YXIgbj10LWJoLHI9ZS14aCxpPVNjKG4qbityKnIpO1RoKz1pKihiaCt0KS8yLENoKz1pKih4aCtlKS8yLFNoKz1pLEFoKz0oaT14aCp0LWJoKmUpKihiaCt0KSxNaCs9aSooeGgrZSksT2grPTMqaSxOaChiaD10LHhoPWUpfXZhciB6aD1CaDtmdW5jdGlvbiBVaCh0KXt0aGlzLl9jb250ZXh0PXR9VWgucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLHBjKX19LHJlc3VsdDpOY307dmFyICRoLHFoLFdoLFZoLEhoLEdoPXNjKCksWGg9e3BvaW50Ok5jLGxpbmVTdGFydDpmdW5jdGlvbigpe1hoLnBvaW50PVpofSxsaW5lRW5kOmZ1bmN0aW9uKCl7JGgmJlFoKHFoLFdoKSxYaC5wb2ludD1OY30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7JGg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXskaD1udWxsfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD0rR2g7cmV0dXJuIEdoLnJlc2V0KCksdH19O2Z1bmN0aW9uIFpoKHQsZSl7WGgucG9pbnQ9UWgscWg9Vmg9dCxXaD1IaD1lfWZ1bmN0aW9uIFFoKHQsZSl7VmgtPXQsSGgtPWUsR2guYWRkKFNjKFZoKlZoK0hoKkhoKSksVmg9dCxIaD1lfXZhciBLaD1YaDtmdW5jdGlvbiBKaCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiB0Zih0KXtyZXR1cm4ibTAsIit0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKy0yKnQrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrMip0KyJ6In1KaC5wcm90b3R5cGU9e19yYWRpdXM6NC41LF9jaXJjbGU6dGYoNC41KSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCkhPT10aGlzLl9yYWRpdXMmJih0aGlzLl9yYWRpdXM9dCx0aGlzLl9jaXJjbGU9bnVsbCksdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fc3RyaW5nLnB1c2goIloiKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUpLHRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3N0cmluZy5wdXNoKCJMIix0LCIsIixlKTticmVhaztkZWZhdWx0Om51bGw9PXRoaXMuX2NpcmNsZSYmKHRoaXMuX2NpcmNsZT10Zih0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsdCwiLCIsZSx0aGlzLl9jaXJjbGUpfX0scmVzdWx0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RyaW5nLmxlbmd0aCl7dmFyIHQ9dGhpcy5fc3RyaW5nLmpvaW4oIiIpO3JldHVybiB0aGlzLl9zdHJpbmc9W10sdH1yZXR1cm4gbnVsbH19O3ZhciBlZj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT00LjU7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpJiZyLnBvaW50UmFkaXVzKCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksJGModCxuKHIpKSksci5yZXN1bHQoKX1yZXR1cm4gYS5hcmVhPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oZmgpKSxmaC5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oS2gpKSxLaC5yZXN1bHQoKX0sYS5ib3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuICRjKHQsbihfaCkpLF9oLnJlc3VsdCgpfSxhLmNlbnRyb2lkPWZ1bmN0aW9uKHQpe3JldHVybiAkYyh0LG4oemgpKSx6aC5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PWU/KHQ9bnVsbCxpaCk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10PyhlPW51bGwsbmV3IEpoKTpuZXcgVWgoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmci5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KHIucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sbmY9ZnVuY3Rpb24odCl7cmV0dXJue3N0cmVhbTpyZih0KX19O2Z1bmN0aW9uIHJmKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj1uZXcgYWY7Zm9yKHZhciByIGluIHQpbltyXT10W3JdO3JldHVybiBuLnN0cmVhbT1lLG59fWZ1bmN0aW9uIGFmKCl7fWZ1bmN0aW9uIG9mKHQsZSxuKXt2YXIgcj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQobnVsbCksJGMobix0LnN0cmVhbShfaCkpLGUoX2gucmVzdWx0KCkpLG51bGwhPXImJnQuY2xpcEV4dGVudChyKSx0fWZ1bmN0aW9uIHNmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9ZVsxXVswXS1lWzBdWzBdLGk9ZVsxXVsxXS1lWzBdWzFdLGE9TWF0aC5taW4oci8oblsxXVswXS1uWzBdWzBdKSxpLyhuWzFdWzFdLW5bMF1bMV0pKSxvPStlWzBdWzBdKyhyLWEqKG5bMV1bMF0rblswXVswXSkpLzIscz0rZVswXVsxXSsoaS1hKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmEpLnRyYW5zbGF0ZShbbyxzXSl9KSxuKX1mdW5jdGlvbiBjZih0LGUsbil7cmV0dXJuIHNmKHQsW1swLDBdLGVdLG4pfWZ1bmN0aW9uIHVmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzBdLW5bMF1bMF0pLGE9KHItaSooblsxXVswXStuWzBdWzBdKSkvMixvPS1pKm5bMF1bMV07dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWZ1bmN0aW9uIGxmKHQsZSxuKXtyZXR1cm4gb2YodCwoZnVuY3Rpb24obil7dmFyIHI9K2UsaT1yLyhuWzFdWzFdLW5bMF1bMV0pLGE9LWkqblswXVswXSxvPShyLWkqKG5bMV1bMV0rblswXVsxXSkpLzI7dC5zY2FsZSgxNTAqaSkudHJhbnNsYXRlKFthLG9dKX0pLG4pfWFmLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YWYscG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07dmFyIGhmPXhjKDMwKmdjKSxmZj1mdW5jdGlvbih0LGUpe3JldHVybitlP2Z1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihyLGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGcpe3ZhciB2PXUtcixtPWwtaSxiPXYqdittKm07aWYoYj40KmUmJnktLSl7dmFyIHg9bytmLF89cytkLGs9YytwLHc9U2MoeCp4K18qXytrKmspLEU9T2Moay89dyksVD12Yyh2YyhrKS0xKTwxZS02fHx2YyhhLWgpPDFlLTY/KGEraCkvMjpiYyhfLHgpLEM9dChULEUpLFM9Q1swXSxBPUNbMV0sTT1TLXIsTz1BLWksQj1tKk0tdipPOyhCKkIvYj5lfHx2YygodipNK20qTykvYi0uNSk+LjN8fG8qZitzKmQrYypwPGhmKSYmKG4ocixpLGEsbyxzLGMsUyxBLFQseC89dyxfLz13LGsseSxnKSxnLnBvaW50KFMsQSksbihTLEEsVCx4LF8sayx1LGwsaCxmLGQscCx5LGcpKX19cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGksYSxvLHMsYyx1LGwsaCxmLGQscCx5PXtwb2ludDpnLGxpbmVTdGFydDp2LGxpbmVFbmQ6Yixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpLHkubGluZVN0YXJ0PXh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25FbmQoKSx5LmxpbmVTdGFydD12fX07ZnVuY3Rpb24gZyhuLHIpe249dChuLHIpLGUucG9pbnQoblswXSxuWzFdKX1mdW5jdGlvbiB2KCl7bD1OYU4seS5wb2ludD1tLGUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gbShyLGkpe3ZhciBhPUpjKFtyLGldKSxvPXQocixpKTtuKGwsaCx1LGYsZCxwLGw9b1swXSxoPW9bMV0sdT1yLGY9YVswXSxkPWFbMV0scD1hWzJdLDE2LGUpLGUucG9pbnQobCxoKX1mdW5jdGlvbiBiKCl7eS5wb2ludD1nLGUubGluZUVuZCgpfWZ1bmN0aW9uIHgoKXt2KCkseS5wb2ludD1fLHkubGluZUVuZD1rfWZ1bmN0aW9uIF8odCxlKXttKHI9dCxlKSxpPWwsYT1oLG89ZixzPWQsYz1wLHkucG9pbnQ9bX1mdW5jdGlvbiBrKCl7bihsLGgsdSxmLGQscCxpLGEscixvLHMsYywxNixlKSx5LmxpbmVFbmQ9YixiKCl9cmV0dXJuIHl9fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXtlPXQoZSxuKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX07dmFyIGRmPXJmKHtwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuc3RyZWFtLnBvaW50KHQqZ2MsZSpnYyl9fSk7ZnVuY3Rpb24gcGYodCxlLG4pe2Z1bmN0aW9uIHIocixpKXtyZXR1cm5bZSt0KnIsbi10KmldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLGkpe3JldHVyblsoci1lKS90LChuLWkpL3RdfSxyfWZ1bmN0aW9uIHlmKHQsZSxuLHIpe3ZhciBpPXhjKHIpLGE9VGMociksbz1pKnQscz1hKnQsYz1pL3QsdT1hL3QsbD0oYSpuLWkqZSkvdCxoPShhKmUraSpuKS90O2Z1bmN0aW9uIGYodCxyKXtyZXR1cm5bbyp0LXMqcitlLG4tcyp0LW8qcl19cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW2MqdC11KmUrbCxoLXUqdC1jKmVdfSxmfWZ1bmN0aW9uIGdmKHQpe3JldHVybiB2ZigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKSgpfWZ1bmN0aW9uIHZmKHQpe3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9MTUwLGY9NDgwLGQ9MjUwLHA9MCx5PTAsZz0wLHY9MCxtPTAsYj0wLHg9bnVsbCxfPUVsLGs9bnVsbCx3PWloLEU9LjU7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gYyh0WzBdKmdjLHRbMV0qZ2MpfWZ1bmN0aW9uIEModCl7cmV0dXJuKHQ9Yy5pbnZlcnQodFswXSx0WzFdKSkmJlt0WzBdKnljLHRbMV0qeWNdfWZ1bmN0aW9uIFMoKXt2YXIgdD15ZihoLDAsMCxiKS5hcHBseShudWxsLGUocCx5KSkscj0oYj95ZjpwZikoaCxmLXRbMF0sZC10WzFdLGIpO3JldHVybiBuPWFsKGcsdixtKSxzPXJsKGUsciksYz1ybChuLHMpLG89ZmYocyxFKSxBKCl9ZnVuY3Rpb24gQSgpe3JldHVybiB1PWw9bnVsbCxUfXJldHVybiBULnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PWRmKGZ1bmN0aW9uKHQpe3JldHVybiByZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKF8obyh3KGw9dCkpKSkpfSxULnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89dCx4PXZvaWQgMCxBKCkpOl99LFQucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxrPXI9aT1hPW51bGwsQSgpKTp3fSxULmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rdD9UbCh4PXQqZ2MpOih4PW51bGwsRWwpLEEoKSk6eCp5Y30sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW51bGw9PXQ/KGs9cj1pPWE9bnVsbCxpaCk6Q2woaz0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksQSgpKTpudWxsPT1rP251bGw6W1trLHJdLFtpLGFdXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxTKCkpOmh9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sUygpKTpbZixkXX0sVC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqZ2MseT10WzFdJTM2MCpnYyxTKCkpOltwKnljLHkqeWNdfSxULnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCpnYyx2PXRbMV0lMzYwKmdjLG09dC5sZW5ndGg+Mj90WzJdJTM2MCpnYzowLFMoKSk6W2cqeWMsdip5YyxtKnljXX0sVC5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCpnYyxTKCkpOmIqeWN9LFQucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWZmKHMsRT10KnQpLEEoKSk6U2MoRSl9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKFQsdCxlKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGNmKFQsdCxlKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiB1ZihULHQsZSl9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKFQsdCxlKX0sZnVuY3Rpb24oKXtyZXR1cm4gZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxULmludmVydD1lLmludmVydCYmQyxTKCl9fWZ1bmN0aW9uIG1mKHQpe3ZhciBlPTAsbj1oYy8zLHI9dmYodCksaT1yKGUsbik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoZT10WzBdKmdjLG49dFsxXSpnYyk6W2UqeWMsbip5Y119LGl9ZnVuY3Rpb24gYmYodCxlKXt2YXIgbj1UYyh0KSxyPShuK1RjKGUpKS8yO2lmKHZjKHIpPDFlLTYpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXhjKHQpO2Z1bmN0aW9uIG4odCxuKXtyZXR1cm5bdCplLFRjKG4pL2VdfXJldHVybiBuLmludmVydD1mdW5jdGlvbih0LG4pe3JldHVyblt0L2UsT2MobiplKV19LG59KHQpO3ZhciBpPTErbiooMipyLW4pLGE9U2MoaSkvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIG49U2MoaS0yKnIqVGMoZSkpL3I7cmV0dXJuW24qVGModCo9ciksYS1uKnhjKHQpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1hLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksT2MoKGktKHQqdCtuKm4pKnIqcikvKDIqcikpXX0sb312YXIgeGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoYmYpLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9LF9mPWZ1bmN0aW9uKCl7cmV0dXJuIHhmKCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9O3ZhciBrZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPV9mKCkscz14ZigpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksYz14ZigpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSx1PXtwb2ludDpmdW5jdGlvbih0LGUpe2E9W3QsZV19fTtmdW5jdGlvbiBsKHQpe3ZhciBlPXRbMF0sbz10WzFdO3JldHVybiBhPW51bGwsbi5wb2ludChlLG8pLGF8fChyLnBvaW50KGUsbyksYSl8fChpLnBvaW50KGUsbyksYSl9ZnVuY3Rpb24gaCgpe3JldHVybiB0PWU9bnVsbCxsfXJldHVybiBsLmludmVydD1mdW5jdGlvbih0KXt2YXIgZT1vLnNjYWxlKCksbj1vLnRyYW5zbGF0ZSgpLHI9KHRbMF0tblswXSkvZSxpPSh0WzFdLW5bMV0pL2U7cmV0dXJuKGk+PS4xMiYmaTwuMjM0JiZyPj0tLjQyNSYmcjwtLjIxND9zOmk+PS4xNjYmJmk8LjIzNCYmcj49LS4yMTQmJnI8LS4xMTU/YzpvKS5pbnZlcnQodCl9LGwuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiB0JiZlPT09bj90OihyPVtvLnN0cmVhbShlPW4pLHMuc3RyZWFtKG4pLGMuc3RyZWFtKG4pXSxpPXIubGVuZ3RoLHQ9e3BvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xOysrbjxpOylyW25dLnBvaW50KHQsZSl9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOylyW3RdLnBvbHlnb25FbmQoKX19KTt2YXIgcixpfSxsLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5wcmVjaXNpb24odCkscy5wcmVjaXNpb24odCksYy5wcmVjaXNpb24odCksaCgpKTpvLnByZWNpc2lvbigpfSxsLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvLnNjYWxlKHQpLHMuc2NhbGUoLjM1KnQpLGMuc2NhbGUodCksbC50cmFuc2xhdGUoby50cmFuc2xhdGUoKSkpOm8uc2NhbGUoKX0sbC50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG8udHJhbnNsYXRlKCk7dmFyIGU9by5zY2FsZSgpLGE9K3RbMF0sbD0rdFsxXTtyZXR1cm4gbj1vLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbYS0uNDU1KmUsbC0uMjM4KmVdLFthKy40NTUqZSxsKy4yMzgqZV1dKS5zdHJlYW0odSkscj1zLnRyYW5zbGF0ZShbYS0uMzA3KmUsbCsuMjAxKmVdKS5jbGlwRXh0ZW50KFtbYS0uNDI1KmUrMWUtNixsKy4xMiplKzFlLTZdLFthLS4yMTQqZS0xZS02LGwrLjIzNCplLTFlLTZdXSkuc3RyZWFtKHUpLGk9Yy50cmFuc2xhdGUoW2EtLjIwNSplLGwrLjIxMiplXSkuY2xpcEV4dGVudChbW2EtLjIxNCplKzFlLTYsbCsuMTY2KmUrMWUtNl0sW2EtLjExNSplLTFlLTYsbCsuMjM0KmUtMWUtNl1dKS5zdHJlYW0odSksaCgpfSxsLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBzZihsLHQsZSl9LGwuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBjZihsLHQsZSl9LGwuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYobCx0LGUpfSxsLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBsZihsLHQsZSl9LGwuc2NhbGUoMTA3MCl9O2Z1bmN0aW9uIHdmKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXhjKGUpLGk9eGMobiksYT10KHIqaSk7cmV0dXJuW2EqaSpUYyhlKSxhKlRjKG4pXX19ZnVuY3Rpb24gRWYodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9U2MoZSplK24qbiksaT10KHIpLGE9VGMoaSksbz14YyhpKTtyZXR1cm5bYmMoZSphLHIqbyksT2MociYmbiphL3IpXX19dmFyIFRmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4gU2MoMi8oMSt0KSl9KSk7VGYuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gMipPYyh0LzIpfSkpO3ZhciBDZj1mdW5jdGlvbigpe3JldHVybiBnZihUZikuc2NhbGUoMTI0Ljc1KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LFNmPXdmKChmdW5jdGlvbih0KXtyZXR1cm4odD1NYyh0KSkmJnQvVGModCl9KSk7U2YuaW52ZXJ0PUVmKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKTt2YXIgQWY9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YoU2YpLnNjYWxlKDc5LjQxODgpLmNsaXBBbmdsZSgxNzkuOTk5KX07ZnVuY3Rpb24gTWYodCxlKXtyZXR1cm5bdCx3YyhBYygoZmMrZSkvMikpXX1NZi5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyKm1jKGtjKGUpKS1mY119O3ZhciBPZj1mdW5jdGlvbigpe3JldHVybiBCZihNZikuc2NhbGUoOTYxL3BjKX07ZnVuY3Rpb24gQmYodCl7dmFyIGUsbixyLGk9Z2YodCksYT1pLmNlbnRlcixvPWkuc2NhbGUscz1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCx1PW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBhPWhjKm8oKSxzPWkodWwoaS5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIGMobnVsbD09dT9bW3NbMF0tYSxzWzFdLWFdLFtzWzBdK2Esc1sxXSthXV06dD09PU1mP1tbTWF0aC5tYXgoc1swXS1hLHUpLGVdLFtNYXRoLm1pbihzWzBdK2Esbikscl1dOltbdSxNYXRoLm1heChzWzFdLWEsZSldLFtuLE1hdGgubWluKHNbMV0rYSxyKV1dKX1yZXR1cm4gaS5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obyh0KSxsKCkpOm8oKX0saS50cmFuc2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHModCksbCgpKTpzKCl9LGkuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhKHQpLGwoKSk6YSgpfSxpLmNsaXBFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/dT1lPW49cj1udWxsOih1PSt0WzBdWzBdLGU9K3RbMF1bMV0sbj0rdFsxXVswXSxyPSt0WzFdWzFdKSxsKCkpOm51bGw9PXU/bnVsbDpbW3UsZV0sW24scl1dfSxsKCl9ZnVuY3Rpb24gTmYodCl7cmV0dXJuIEFjKChmYyt0KS8yKX1mdW5jdGlvbiBEZih0LGUpe3ZhciBuPXhjKHQpLHI9dD09PWU/VGModCk6d2Mobi94YyhlKSkvd2MoTmYoZSkvTmYodCkpLGk9bipFYyhOZih0KSxyKS9yO2lmKCFyKXJldHVybiBNZjtmdW5jdGlvbiBhKHQsZSl7aT4wP2U8MWUtNi1mYyYmKGU9MWUtNi1mYyk6ZT5mYy0xZS02JiYoZT1mYy0xZS02KTt2YXIgbj1pL0VjKE5mKGUpLHIpO3JldHVybltuKlRjKHIqdCksaS1uKnhjKHIqdCldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWktZSxhPUNjKHIpKlNjKHQqdCtuKm4pO3JldHVybltiYyh0LHZjKG4pKS9yKkNjKG4pLDIqbWMoRWMoaS9hLDEvcikpLWZjXX0sYX12YXIgTGY9ZnVuY3Rpb24oKXtyZXR1cm4gbWYoRGYpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O2Z1bmN0aW9uIElmKHQsZSl7cmV0dXJuW3QsZV19SWYuaW52ZXJ0PUlmO3ZhciBSZj1mdW5jdGlvbigpe3JldHVybiBnZihJZikuc2NhbGUoMTUyLjYzKX07ZnVuY3Rpb24gRmYodCxlKXt2YXIgbj14Yyh0KSxyPXQ9PT1lP1RjKHQpOihuLXhjKGUpKS8oZS10KSxpPW4vcit0O2lmKHZjKHIpPDFlLTYpcmV0dXJuIElmO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qVGMoYSksaS1uKnhjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWU7cmV0dXJuW2JjKHQsdmMobikpL3IqQ2MobiksaS1DYyhyKSpTYyh0KnQrbipuKV19LGF9dmFyIFBmPWZ1bmN0aW9uKCl7cmV0dXJuIG1mKEZmKS5zY2FsZSgxMzEuMTU0KS5jZW50ZXIoWzAsMTMuOTM4OV0pfSxqZj0xLjM0MDI2NCxZZj0tLjA4MTEwNix6Zj04OTNlLTYsVWY9LjAwMzc5NiwkZj1TYygzKS8yO2Z1bmN0aW9uIHFmKHQsZSl7dmFyIG49T2MoJGYqVGMoZSkpLHI9bipuLGk9cipyKnI7cmV0dXJuW3QqeGMobikvKCRmKihqZiszKllmKnIraSooNyp6Zis5KlVmKnIpKSksbiooamYrWWYqcitpKih6ZitVZipyKSldfXFmLmludmVydD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyPWUsaT1yKnIsYT1pKmkqaSxvPTA7bzwxMiYmKGE9KGk9KHItPW49KHIqKGpmK1lmKmkrYSooemYrVWYqaSkpLWUpLyhqZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKSkqcikqaSppLCEodmMobik8MWUtMTIpKTsrK28pO3JldHVyblskZip0KihqZiszKllmKmkrYSooNyp6Zis5KlVmKmkpKS94YyhyKSxPYyhUYyhyKS8kZildfTt2YXIgV2Y9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YocWYpLnNjYWxlKDE3Ny4xNTgpfTtmdW5jdGlvbiBWZih0LGUpe3ZhciBuPXhjKGUpLHI9eGModCkqbjtyZXR1cm5bbipUYyh0KS9yLFRjKGUpL3JdfVZmLmludmVydD1FZihtYyk7dmFyIEhmPWZ1bmN0aW9uKCl7cmV0dXJuIGdmKFZmKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfTtmdW5jdGlvbiBHZih0LGUsbixyKXtyZXR1cm4gMT09PXQmJjE9PT1lJiYwPT09biYmMD09PXI/aWg6cmYoe3BvaW50OmZ1bmN0aW9uKGksYSl7dGhpcy5zdHJlYW0ucG9pbnQoaSp0K24sYSplK3IpfX0pfXZhciBYZj1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYSxvPTEscz0wLGM9MCx1PTEsbD0xLGg9aWgsZj1udWxsLGQ9aWg7ZnVuY3Rpb24gcCgpe3JldHVybiByPWk9bnVsbCxhfXJldHVybiBhPXtzdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIHImJmk9PT10P3I6cj1oKGQoaT10KSl9LHBvc3RjbGlwOmZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXIsZj10PWU9bj1udWxsLHAoKSk6ZH0sY2xpcEV4dGVudDpmdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT1yPyhmPXQ9ZT1uPW51bGwsaWgpOkNsKGY9K3JbMF1bMF0sdD0rclswXVsxXSxlPStyWzFdWzBdLG49K3JbMV1bMV0pLHAoKSk6bnVsbD09Zj9udWxsOltbZix0XSxbZSxuXV19LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUdmKChvPSt0KSp1LG8qbCxzLGMpLHAoKSk6b30sdHJhbnNsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUdmKG8qdSxvKmwscz0rdFswXSxjPSt0WzFdKSxwKCkpOltzLGNdfSxyZWZsZWN0WDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1HZihvKih1PXQ/LTE6MSksbypsLHMsYykscCgpKTp1PDB9LHJlZmxlY3RZOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPUdmKG8qdSxvKihsPXQ/LTE6MSkscyxjKSxwKCkpOmw8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHNmKGEsdCxlKX0sZml0U2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBjZihhLHQsZSl9LGZpdFdpZHRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHVmKGEsdCxlKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxmKGEsdCxlKX19fTtmdW5jdGlvbiBaZih0LGUpe3ZhciBuPWUqZSxyPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK3IqKHIqKC4wMDM5NzEqbi0uMDAxNTI5KnIpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K3IqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqcikpKV19WmYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lLGk9MjU7ZG97dmFyIGE9cipyLG89YSphO3ItPW49KHIqKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZSh2YyhuKT4xZS02JiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfTt2YXIgUWY9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YoWmYpLnNjYWxlKDE3NS4yOTUpfTtmdW5jdGlvbiBLZih0LGUpe3JldHVyblt4YyhlKSpUYyh0KSxUYyhlKV19S2YuaW52ZXJ0PUVmKE9jKTt2YXIgSmY9ZnVuY3Rpb24oKXtyZXR1cm4gZ2YoS2YpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArMWUtNil9O2Z1bmN0aW9uIHRkKHQsZSl7dmFyIG49eGMoZSkscj0xK3hjKHQpKm47cmV0dXJuW24qVGModCkvcixUYyhlKS9yXX10ZC5pbnZlcnQ9RWYoKGZ1bmN0aW9uKHQpe3JldHVybiAyKm1jKHQpfSkpO3ZhciBlZD1mdW5jdGlvbigpe3JldHVybiBnZih0ZCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX07ZnVuY3Rpb24gbmQodCxlKXtyZXR1cm5bd2MoQWMoKGZjK2UpLzIpKSwtdF19bmQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuWy1lLDIqbWMoa2ModCkpLWZjXX07dmFyIHJkPWZ1bmN0aW9uKCl7dmFyIHQ9QmYobmQpLGU9dC5jZW50ZXIsbj10LnJvdGF0ZTtyZXR1cm4gdC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShbLXRbMV0sdFswXV0pOlsodD1lKCkpWzFdLC10WzBdXX0sdC5yb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihbdFswXSx0WzFdLHQubGVuZ3RoPjI/dFsyXSs5MDo5MF0pOlsodD1uKCkpWzBdLHRbMV0sdFsyXS05MF19LG4oWzAsMCw5MF0pLnNjYWxlKDE1OS4xNTUpfTtmdW5jdGlvbiBpZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBhZCh0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBvZCh0LGUpe3JldHVybiBNYXRoLm1heCh0LGUueSl9dmFyIHNkPWZ1bmN0aW9uKCl7dmFyIHQ9aWQsZT0xLG49MSxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbz0wO2kuZWFjaEFmdGVyKChmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24/KGUueD1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoYWQsMCkvdC5sZW5ndGh9KG4pLGUueT1mdW5jdGlvbih0KXtyZXR1cm4gMSt0LnJlZHVjZShvZCwwKX0obikpOihlLng9YT9vKz10KGUsYSk6MCxlLnk9MCxhPWUpfSkpO3ZhciBzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oaSksYz1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGkpLHU9cy54LXQocyxjKS8yLGw9Yy54K3QoYyxzKS8yO3JldHVybiBpLmVhY2hBZnRlcihyP2Z1bmN0aW9uKHQpe3QueD0odC54LWkueCkqZSx0Lnk9KGkueS10LnkpKm59OmZ1bmN0aW9uKHQpe3QueD0odC54LXUpLyhsLXUpKmUsdC55PSgxLShpLnk/dC55L2kueToxKSkqbn0pfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfTtmdW5jdGlvbiBjZCh0KXt2YXIgZT0wLG49dC5jaGlsZHJlbixyPW4mJm4ubGVuZ3RoO2lmKHIpZm9yKDstLXI+PTA7KWUrPW5bcl0udmFsdWU7ZWxzZSBlPTE7dC52YWx1ZT1lfWZ1bmN0aW9uIHVkKHQsZSl7dmFyIG4scixpLGEsbyxzPW5ldyBkZCh0KSxjPSt0LnZhbHVlJiYocy52YWx1ZT10LnZhbHVlKSx1PVtzXTtmb3IobnVsbD09ZSYmKGU9bGQpO249dS5wb3AoKTspaWYoYyYmKG4udmFsdWU9K24uZGF0YS52YWx1ZSksKGk9ZShuLmRhdGEpKSYmKG89aS5sZW5ndGgpKWZvcihuLmNoaWxkcmVuPW5ldyBBcnJheShvKSxhPW8tMTthPj0wOy0tYSl1LnB1c2gocj1uLmNoaWxkcmVuW2FdPW5ldyBkZChpW2FdKSksci5wYXJlbnQ9bixyLmRlcHRoPW4uZGVwdGgrMTtyZXR1cm4gcy5lYWNoQmVmb3JlKGZkKX1mdW5jdGlvbiBsZCh0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBoZCh0KXt0LmRhdGE9dC5kYXRhLmRhdGF9ZnVuY3Rpb24gZmQodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBkZCh0KXt0aGlzLmRhdGE9dCx0aGlzLmRlcHRoPXRoaXMuaGVpZ2h0PTAsdGhpcy5wYXJlbnQ9bnVsbH1kZC5wcm90b3R5cGU9dWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkZCxjb3VudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2hBZnRlcihjZCl9LGVhY2g6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYT10aGlzLG89W2FdO2Rve2ZvcihlPW8ucmV2ZXJzZSgpLG89W107YT1lLnBvcCgpOylpZih0KGEpLG49YS5jaGlsZHJlbilmb3Iocj0wLGk9bi5sZW5ndGg7cjxpOysrcilvLnB1c2gobltyXSl9d2hpbGUoby5sZW5ndGgpO3JldHVybiB0aGlzfSxlYWNoQWZ0ZXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpPXRoaXMsYT1baV0sbz1bXTtpPWEucG9wKCk7KWlmKG8ucHVzaChpKSxlPWkuY2hpbGRyZW4pZm9yKG49MCxyPWUubGVuZ3RoO248cjsrK24pYS5wdXNoKGVbbl0pO2Zvcig7aT1vLnBvcCgpOyl0KGkpO3JldHVybiB0aGlzfSxlYWNoQmVmb3JlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dGhpcyxpPVtyXTtyPWkucG9wKCk7KWlmKHQociksZT1yLmNoaWxkcmVuKWZvcihuPWUubGVuZ3RoLTE7bj49MDstLW4paS5wdXNoKGVbbl0pO3JldHVybiB0aGlzfSxzdW06ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKChmdW5jdGlvbihlKXtmb3IodmFyIG49K3QoZS5kYXRhKXx8MCxyPWUuY2hpbGRyZW4saT1yJiZyLmxlbmd0aDstLWk+PTA7KW4rPXJbaV0udmFsdWU7ZS52YWx1ZT1ufSkpfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uc29ydCh0KX0pKX0scGF0aDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIG49dC5hbmNlc3RvcnMoKSxyPWUuYW5jZXN0b3JzKCksaT1udWxsO3Q9bi5wb3AoKSxlPXIucG9wKCk7Zm9yKDt0PT09ZTspaT10LHQ9bi5wb3AoKSxlPXIucG9wKCk7cmV0dXJuIGl9KGUsdCkscj1bZV07ZSE9PW47KWU9ZS5wYXJlbnQsci5wdXNoKGUpO2Zvcih2YXIgaT1yLmxlbmd0aDt0IT09bjspci5zcGxpY2UoaSwwLHQpLHQ9dC5wYXJlbnQ7cmV0dXJuIHJ9LGFuY2VzdG9yczpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9W3RdO3Q9dC5wYXJlbnQ7KWUucHVzaCh0KTtyZXR1cm4gZX0sZGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbihlKXt0LnB1c2goZSl9KSksdH0sbGVhdmVzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8dC5wdXNoKGUpfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPVtdO3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKG4pe24hPT10JiZlLnB1c2goe3NvdXJjZTpuLnBhcmVudCx0YXJnZXQ6bn0pfSkpLGV9LGNvcHk6ZnVuY3Rpb24oKXtyZXR1cm4gdWQodGhpcykuZWFjaEJlZm9yZShoZCl9fTt2YXIgcGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciB5ZD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPTAsaT0odD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPXQubGVuZ3RoO3I7KW49TWF0aC5yYW5kb20oKSpyLS18MCxlPXRbcl0sdFtyXT10W25dLHRbbl09ZTtyZXR1cm4gdH0ocGQuY2FsbCh0KSkpLmxlbmd0aCxhPVtdO3I8aTspZT10W3JdLG4mJm1kKG4sZSk/KytyOihuPXhkKGE9Z2QoYSxlKSkscj0wKTtyZXR1cm4gbn07ZnVuY3Rpb24gZ2QodCxlKXt2YXIgbixyO2lmKGJkKGUsdCkpcmV0dXJuW2VdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24paWYodmQoZSx0W25dKSYmYmQoX2QodFtuXSxlKSx0KSlyZXR1cm5bdFtuXSxlXTtmb3Iobj0wO248dC5sZW5ndGgtMTsrK24pZm9yKHI9bisxO3I8dC5sZW5ndGg7KytyKWlmKHZkKF9kKHRbbl0sdFtyXSksZSkmJnZkKF9kKHRbbl0sZSksdFtyXSkmJnZkKF9kKHRbcl0sZSksdFtuXSkmJmJkKGtkKHRbbl0sdFtyXSxlKSx0KSlyZXR1cm5bdFtuXSx0W3JdLGVdO3Rocm93IG5ldyBFcnJvcn1mdW5jdGlvbiB2ZCh0LGUpe3ZhciBuPXQuci1lLnIscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbjwwfHxuKm48cipyK2kqaX1mdW5jdGlvbiBtZCh0LGUpe3ZhciBuPXQuci1lLnIrMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIGJkKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDsrK24paWYoIW1kKHQsZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24geGQodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiBfZCh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4ga2QodFswXSx0WzFdLHRbMl0pfXZhciBlfWZ1bmN0aW9uIF9kKHQsZSl7dmFyIG49dC54LHI9dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGM9YS1uLHU9by1yLGw9cy1pLGg9TWF0aC5zcXJ0KGMqYyt1KnUpO3JldHVybnt4OihuK2ErYy9oKmwpLzIseToocitvK3UvaCpsKS8yLHI6KGgraStzKS8yfX1mdW5jdGlvbiBrZCh0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9dC5yLG89ZS54LHM9ZS55LGM9ZS5yLHU9bi54LGw9bi55LGg9bi5yLGY9ci1vLGQ9ci11LHA9aS1zLHk9aS1sLGc9Yy1hLHY9aC1hLG09cipyK2kqaS1hKmEsYj1tLW8qby1zKnMrYypjLHg9bS11KnUtbCpsK2gqaCxfPWQqcC1mKnksaz0ocCp4LXkqYikvKDIqXyktcix3PSh5KmctcCp2KS9fLEU9KGQqYi1mKngpLygyKl8pLWksVD0oZip2LWQqZykvXyxDPXcqdytUKlQtMSxTPTIqKGErayp3K0UqVCksQT1rKmsrRSpFLWEqYSxNPS0oQz8oUytNYXRoLnNxcnQoUypTLTQqQypBKSkvKDIqQyk6QS9TKTtyZXR1cm57eDpyK2srdypNLHk6aStFK1QqTSxyOk19fWZ1bmN0aW9uIHdkKHQsZSxuKXt2YXIgcixpLGEsbyxzPXQueC1lLngsYz10LnktZS55LHU9cypzK2MqYzt1PyhpPWUucituLnIsaSo9aSxvPXQucituLnIsaT4obyo9byk/KHI9KHUrby1pKS8oMip1KSxhPU1hdGguc3FydChNYXRoLm1heCgwLG8vdS1yKnIpKSxuLng9dC54LXIqcy1hKmMsbi55PXQueS1yKmMrYSpzKToocj0odStpLW8pLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsaS91LXIqcikpLG4ueD1lLngrcipzLWEqYyxuLnk9ZS55K3IqYythKnMpKToobi54PWUueCtuLnIsbi55PWUueSl9ZnVuY3Rpb24gRWQodCxlKXt2YXIgbj10LnIrZS5yLTFlLTYscj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gbj4wJiZuKm4+cipyK2kqaX1mdW5jdGlvbiBUZCh0KXt2YXIgZT10Ll8sbj10Lm5leHQuXyxyPWUucituLnIsaT0oZS54Km4ucituLngqZS5yKS9yLGE9KGUueSpuLnIrbi55KmUucikvcjtyZXR1cm4gaSppK2EqYX1mdW5jdGlvbiBDZCh0KXt0aGlzLl89dCx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gU2QodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxuLHIsaSxhLG8scyxjLHUsbCxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihuPXRbMV0sZS54PS1uLnIsbi54PWUucixuLnk9MCwhKGk+MikpcmV0dXJuIGUucituLnI7d2QobixlLHI9dFsyXSksZT1uZXcgQ2QoZSksbj1uZXcgQ2Qobikscj1uZXcgQ2QociksZS5uZXh0PXIucHJldmlvdXM9bixuLm5leHQ9ZS5wcmV2aW91cz1yLHIubmV4dD1uLnByZXZpb3VzPWU7dDpmb3Iocz0zO3M8aTsrK3Mpe3dkKGUuXyxuLl8scj10W3NdKSxyPW5ldyBDZChyKSxjPW4ubmV4dCx1PWUucHJldmlvdXMsbD1uLl8ucixoPWUuXy5yO2Rve2lmKGw8PWgpe2lmKEVkKGMuXyxyLl8pKXtuPWMsZS5uZXh0PW4sbi5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWwrPWMuXy5yLGM9Yy5uZXh0fWVsc2V7aWYoRWQodS5fLHIuXykpeyhlPXUpLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9aCs9dS5fLnIsdT11LnByZXZpb3VzfX13aGlsZShjIT09dS5uZXh0KTtmb3Ioci5wcmV2aW91cz1lLHIubmV4dD1uLGUubmV4dD1uLnByZXZpb3VzPW49cixhPVRkKGUpOyhyPXIubmV4dCkhPT1uOykobz1UZChyKSk8YSYmKGU9cixhPW8pO249ZS5uZXh0fWZvcihlPVtuLl9dLHI9bjsocj1yLm5leHQpIT09bjspZS5wdXNoKHIuXyk7Zm9yKHI9eWQoZSkscz0wO3M8aTsrK3MpKGU9dFtzXSkueC09ci54LGUueS09ci55O3JldHVybiByLnJ9dmFyIEFkPWZ1bmN0aW9uKHQpe3JldHVybiBTZCh0KSx0fTtmdW5jdGlvbiBNZCh0KXtyZXR1cm4gbnVsbD09dD9udWxsOk9kKHQpfWZ1bmN0aW9uIE9kKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdH1mdW5jdGlvbiBCZCgpe3JldHVybiAwfXZhciBOZD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIERkKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9dmFyIExkPWZ1bmN0aW9uKCl7dmFyIHQ9bnVsbCxlPTEsbj0xLHI9QmQ7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9bi8yLHQ/aS5lYWNoQmVmb3JlKElkKHQpKS5lYWNoQWZ0ZXIoUmQociwuNSkpLmVhY2hCZWZvcmUoRmQoMSkpOmkuZWFjaEJlZm9yZShJZChEZCkpLmVhY2hBZnRlcihSZChCZCwxKSkuZWFjaEFmdGVyKFJkKHIsaS5yL01hdGgubWluKGUsbikpKS5lYWNoQmVmb3JlKEZkKE1hdGgubWluKGUsbikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU1kKGUpLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdFswXSxuPSt0WzFdLGkpOltlLG5dfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksaSk6cn0saX07ZnVuY3Rpb24gSWQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fChlLnI9TWF0aC5tYXgoMCwrdChlKXx8MCkpfX1mdW5jdGlvbiBSZCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtpZihyPW4uY2hpbGRyZW4pe3ZhciByLGksYSxvPXIubGVuZ3RoLHM9dChuKSplfHwwO2lmKHMpZm9yKGk9MDtpPG87KytpKXJbaV0ucis9cztpZihhPVNkKHIpLHMpZm9yKGk9MDtpPG87KytpKXJbaV0uci09cztuLnI9YStzfX19ZnVuY3Rpb24gRmQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPWUucGFyZW50O2Uucio9dCxuJiYoZS54PW4ueCt0KmUueCxlLnk9bi55K3QqZS55KX19dmFyIFBkPWZ1bmN0aW9uKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX0samQ9ZnVuY3Rpb24odCxlLG4scixpKXtmb3IodmFyIGEsbz10LmNoaWxkcmVuLHM9LTEsYz1vLmxlbmd0aCx1PXQudmFsdWUmJihyLWUpL3QudmFsdWU7KytzPGM7KShhPW9bc10pLnkwPW4sYS55MT1pLGEueDA9ZSxhLngxPWUrPWEudmFsdWUqdX0sWWQ9ZnVuY3Rpb24oKXt2YXIgdD0xLGU9MSxuPTAscj0hMTtmdW5jdGlvbiBpKGkpe3ZhciBhPWkuaGVpZ2h0KzE7cmV0dXJuIGkueDA9aS55MD1uLGkueDE9dCxpLnkxPWUvYSxpLmVhY2hCZWZvcmUoZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7ci5jaGlsZHJlbiYmamQocixyLngwLHQqKHIuZGVwdGgrMSkvZSxyLngxLHQqKHIuZGVwdGgrMikvZSk7dmFyIGk9ci54MCxhPXIueTAsbz1yLngxLW4scz1yLnkxLW47bzxpJiYoaT1vPShpK28pLzIpLHM8YSYmKGE9cz0oYStzKS8yKSxyLngwPWksci55MD1hLHIueDE9byxyLnkxPXN9fShlLGEpKSxyJiZpLmVhY2hCZWZvcmUoUGQpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ISF0LGkpOnJ9LGkuc2l6ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rblswXSxlPStuWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3QsaSk6bn0saX0semQ9e2RlcHRoOi0xfSxVZD17fTtmdW5jdGlvbiAkZCh0KXtyZXR1cm4gdC5pZH1mdW5jdGlvbiBxZCh0KXtyZXR1cm4gdC5wYXJlbnRJZH12YXIgV2Q9ZnVuY3Rpb24oKXt2YXIgdD0kZCxlPXFkO2Z1bmN0aW9uIG4obil7dmFyIHIsaSxhLG8scyxjLHUsbD1uLmxlbmd0aCxoPW5ldyBBcnJheShsKSxmPXt9O2ZvcihpPTA7aTxsOysraSlyPW5baV0scz1oW2ldPW5ldyBkZChyKSxudWxsIT0oYz10KHIsaSxuKSkmJihjKz0iIikmJihmW3U9IiQiKyhzLmlkPWMpXT11IGluIGY/VWQ6cyk7Zm9yKGk9MDtpPGw7KytpKWlmKHM9aFtpXSxudWxsIT0oYz1lKG5baV0saSxuKSkmJihjKz0iIikpe2lmKCEobz1mWyIkIitjXSkpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2MpO2lmKG89PT1VZCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIitjKTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PXpkLGEuZWFjaEJlZm9yZSgoZnVuY3Rpb24odCl7dC5kZXB0aD10LnBhcmVudC5kZXB0aCsxLC0tbH0pKS5lYWNoQmVmb3JlKGZkKSxhLnBhcmVudD1udWxsLGw+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIGF9cmV0dXJuIG4uaWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9T2QoZSksbik6dH0sbi5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1PZCh0KSxuKTplfSxufTtmdW5jdGlvbiBWZCh0LGUpe3JldHVybiB0LnBhcmVudD09PWUucGFyZW50PzE6Mn1mdW5jdGlvbiBIZCh0KXt2YXIgZT10LmNoaWxkcmVuO3JldHVybiBlP2VbMF06dC50fWZ1bmN0aW9uIEdkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gWGQodCxlLG4pe3ZhciByPW4vKGUuaS10LmkpO2UuYy09cixlLnMrPW4sdC5jKz1yLGUueis9bixlLm0rPW59ZnVuY3Rpb24gWmQodCxlLG4pe3JldHVybiB0LmEucGFyZW50PT09ZS5wYXJlbnQ/dC5hOm59ZnVuY3Rpb24gUWQodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1RZC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkZC5wcm90b3R5cGUpO3ZhciBLZD1mdW5jdGlvbigpe3ZhciB0PVZkLGU9MSxuPTEscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scixpLGEsbz1uZXcgUWQodCwwKSxzPVtvXTtlPXMucG9wKCk7KWlmKHI9ZS5fLmNoaWxkcmVuKWZvcihlLmNoaWxkcmVuPW5ldyBBcnJheShhPXIubGVuZ3RoKSxpPWEtMTtpPj0wOy0taSlzLnB1c2gobj1lLmNoaWxkcmVuW2ldPW5ldyBRZChyW2ldLGkpKSxuLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgUWQobnVsbCwwKSkuY2hpbGRyZW49W29dLG99KGkpO2lmKGMuZWFjaEFmdGVyKGEpLGMucGFyZW50Lm09LWMueixjLmVhY2hCZWZvcmUobykscilpLmVhY2hCZWZvcmUocyk7ZWxzZXt2YXIgdT1pLGw9aSxoPWk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng8dS54JiYodT10KSx0Lng+bC54JiYobD10KSx0LmRlcHRoPmguZGVwdGgmJihoPXQpfSkpO3ZhciBmPXU9PT1sPzE6dCh1LGwpLzIsZD1mLXUueCxwPWUvKGwueCtmK2QpLHk9bi8oaC5kZXB0aHx8MSk7aS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0Lng9KHQueCtkKSpwLHQueT10LmRlcHRoKnl9KSl9cmV0dXJuIGl9ZnVuY3Rpb24gYShlKXt2YXIgbj1lLmNoaWxkcmVuLHI9ZS5wYXJlbnQuY2hpbGRyZW4saT1lLmk/cltlLmktMV06bnVsbDtpZihuKXshZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxyPTAsaT10LmNoaWxkcmVuLGE9aS5sZW5ndGg7LS1hPj0wOykoZT1pW2FdKS56Kz1uLGUubSs9bixuKz1lLnMrKHIrPWUuYyl9KGUpO3ZhciBhPShuWzBdLnorbltuLmxlbmd0aC0xXS56KS8yO2k/KGUuej1pLnordChlLl8saS5fKSxlLm09ZS56LWEpOmUuej1hfWVsc2UgaSYmKGUuej1pLnordChlLl8saS5fKSk7ZS5wYXJlbnQuQT1mdW5jdGlvbihlLG4scil7aWYobil7Zm9yKHZhciBpLGE9ZSxvPWUscz1uLGM9YS5wYXJlbnQuY2hpbGRyZW5bMF0sdT1hLm0sbD1vLm0saD1zLm0sZj1jLm07cz1HZChzKSxhPUhkKGEpLHMmJmE7KWM9SGQoYyksKG89R2QobykpLmE9ZSwoaT1zLnoraC1hLnotdSt0KHMuXyxhLl8pKT4wJiYoWGQoWmQocyxlLHIpLGUsaSksdSs9aSxsKz1pKSxoKz1zLm0sdSs9YS5tLGYrPWMubSxsKz1vLm07cyYmIUdkKG8pJiYoby50PXMsby5tKz1oLWwpLGEmJiFIZChjKSYmKGMudD1hLGMubSs9dS1mLHI9ZSl9cmV0dXJuIHJ9KGUsaSxlLnBhcmVudC5BfHxyWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpufXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ITEsZT0rdFswXSxuPSt0WzFdLGkpOnI/bnVsbDpbZSxuXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMCxlPSt0WzBdLG49K3RbMV0saSk6cj9bZSxuXTpudWxsfSxpfSxKZD1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKGktbikvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueDA9ZSxhLngxPXIsYS55MD1uLGEueTE9bis9YS52YWx1ZSp1fSx0cD0oMStNYXRoLnNxcnQoNSkpLzI7ZnVuY3Rpb24gZXAodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzLGMsdSxsLGgsZixkLHAseSxnLHY9W10sbT1lLmNoaWxkcmVuLGI9MCx4PTAsXz1tLmxlbmd0aCxrPWUudmFsdWU7YjxfOyl7Yz1pLW4sdT1hLXI7ZG97bD1tW3grK10udmFsdWV9d2hpbGUoIWwmJng8Xyk7Zm9yKGg9Zj1sLGc9bCpsKih5PU1hdGgubWF4KHUvYyxjL3UpLyhrKnQpKSxwPU1hdGgubWF4KGYvZyxnL2gpO3g8XzsrK3gpe2lmKGwrPXM9bVt4XS52YWx1ZSxzPGgmJihoPXMpLHM+ZiYmKGY9cyksZz1sKmwqeSwoZD1NYXRoLm1heChmL2csZy9oKSk+cCl7bC09czticmVha31wPWR9di5wdXNoKG89e3ZhbHVlOmwsZGljZTpjPHUsY2hpbGRyZW46bS5zbGljZShiLHgpfSksby5kaWNlP2pkKG8sbixyLGksaz9yKz11KmwvazphKTpKZChvLG4scixrP24rPWMqbC9rOmksYSksay09bCxiPXh9cmV0dXJuIHZ9dmFyIG5wPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLGEpe2VwKGUsdCxuLHIsaSxhKX1yZXR1cm4gbi5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gdCgoZT0rZSk+MT9lOjEpfSxufSh0cCkscnA9ZnVuY3Rpb24oKXt2YXIgdD1ucCxlPSExLG49MSxyPTEsaT1bMF0sYT1CZCxvPUJkLHM9QmQsYz1CZCx1PUJkO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9bix0LnkxPXIsdC5lYWNoQmVmb3JlKGgpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShQZCksdH1mdW5jdGlvbiBoKGUpe3ZhciBuPWlbZS5kZXB0aF0scj1lLngwK24sbD1lLnkwK24saD1lLngxLW4sZj1lLnkxLW47aDxyJiYocj1oPShyK2gpLzIpLGY8bCYmKGw9Zj0obCtmKS8yKSxlLngwPXIsZS55MD1sLGUueDE9aCxlLnkxPWYsZS5jaGlsZHJlbiYmKG49aVtlLmRlcHRoKzFdPWEoZSkvMixyKz11KGUpLW4sbCs9byhlKS1uLChoLT1zKGUpLW4pPHImJihyPWg9KHIraCkvMiksKGYtPWMoZSktbik8bCYmKGw9Zj0obCtmKS8yKSx0KGUscixsLGgsZikpfXJldHVybiBsLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSEhdCxsKTplfSxsLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3RbMF0scj0rdFsxXSxsKTpbbixyXX0sbC50aWxlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PU9kKGUpLGwpOnR9LGwucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9sLnBhZGRpbmdJbm5lcih0KS5wYWRkaW5nT3V0ZXIodCk6bC5wYWRkaW5nSW5uZXIoKX0sbC5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6YX0sbC5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bC5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOmwucGFkZGluZ1RvcCgpfSxsLnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6b30sbC5wYWRkaW5nUmlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6c30sbC5wYWRkaW5nQm90dG9tPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6TmQoK3QpLGwpOmN9LGwucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpOZCgrdCksbCk6dX0sbH0saXA9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMrMSk7Zm9yKHVbMF09bz1hPTA7YTxjOysrYSl1W2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLG4scixpLGEsbyxjKXtpZihlPj1uLTEpe3ZhciBsPXNbZV07cmV0dXJuIGwueDA9aSxsLnkwPWEsbC54MT1vLHZvaWQobC55MT1jKX12YXIgaD11W2VdLGY9ci8yK2gsZD1lKzEscD1uLTE7Zm9yKDtkPHA7KXt2YXIgeT1kK3A+Pj4xO3VbeV08Zj9kPXkrMTpwPXl9Zi11W2QtMV08dVtkXS1mJiZlKzE8ZCYmLS1kO3ZhciBnPXVbZF0taCx2PXItZztpZihvLWk+Yy1hKXt2YXIgbT0oaSp2K28qZykvcjt0KGUsZCxnLGksYSxtLGMpLHQoZCxuLHYsbSxhLG8sYyl9ZWxzZXt2YXIgYj0oYSp2K2MqZykvcjt0KGUsZCxnLGksYSxvLGIpLHQoZCxuLHYsaSxiLG8sYyl9fSgwLGMsdC52YWx1ZSxlLG4scixpKX0sYXA9ZnVuY3Rpb24odCxlLG4scixpKXsoMSZ0LmRlcHRoP0pkOmpkKSh0LGUsbixyLGkpfSxvcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuLHIsaSxhKXtpZigobz10Ll9zcXVhcmlmeSkmJm8ucmF0aW89PT1lKWZvcih2YXIgbyxzLGMsdSxsLGg9LTEsZj1vLmxlbmd0aCxkPXQudmFsdWU7KytoPGY7KXtmb3IoYz0ocz1vW2hdKS5jaGlsZHJlbix1PXMudmFsdWU9MCxsPWMubGVuZ3RoO3U8bDsrK3Upcy52YWx1ZSs9Y1t1XS52YWx1ZTtzLmRpY2U/amQocyxuLHIsaSxyKz0oYS1yKSpzLnZhbHVlL2QpOkpkKHMsbixyLG4rPShpLW4pKnMudmFsdWUvZCxhKSxkLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1lcChlLHQsbixyLGksYSksby5yYXRpbz1lfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KHRwKSxzcD1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX0sY3A9ZnVuY3Rpb24odCxlKXt2YXIgbj11bigrdCwrZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPW4odCk7cmV0dXJuIGUtMzYwKk1hdGguZmxvb3IoZS8zNjApfX0sdXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKHQqKDEtbikrZSpuKX19LGxwPU1hdGguU1FSVDI7ZnVuY3Rpb24gaHAodCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKSsxL3QpLzJ9dmFyIGZwPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRbMF0sYT10WzFdLG89dFsyXSxzPWVbMF0sYz1lWzFdLHU9ZVsyXSxsPXMtaSxoPWMtYSxmPWwqbCtoKmg7aWYoZjwxZS0xMilyPU1hdGgubG9nKHUvbykvbHAsbj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KmwsYSt0KmgsbypNYXRoLmV4cChscCp0KnIpXX07ZWxzZXt2YXIgZD1NYXRoLnNxcnQoZikscD0odSp1LW8qbys0KmYpLygyKm8qMipkKSx5PSh1KnUtbypvLTQqZikvKDIqdSoyKmQpLGc9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSx2PU1hdGgubG9nKE1hdGguc3FydCh5KnkrMSkteSk7cj0odi1nKS9scCxuPWZ1bmN0aW9uKHQpe3ZhciBlLG49dCpyLHM9aHAoZyksYz1vLygyKmQpKihzKihlPWxwKm4rZywoKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSkpLWZ1bmN0aW9uKHQpe3JldHVybigodD1NYXRoLmV4cCh0KSktMS90KS8yfShnKSk7cmV0dXJuW2krYypsLGErYypoLG8qcy9ocChscCpuK2cpXX19cmV0dXJuIG4uZHVyYXRpb249MWUzKnIsbn07ZnVuY3Rpb24gZHAodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7dmFyIHI9dCgoZT10bihlKSkuaCwobj10bihuKSkuaCksaT1obihlLnMsbi5zKSxhPWhuKGUubCxuLmwpLG89aG4oZS5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9cih0KSxlLnM9aSh0KSxlLmw9YSh0KSxlLm9wYWNpdHk9byh0KSxlKyIifX19dmFyIHBwPWRwKHVuKSx5cD1kcChobik7ZnVuY3Rpb24gZ3AodCxlKXt2YXIgbj1obigodD1wYSh0KSkubCwoZT1wYShlKSkubCkscj1obih0LmEsZS5hKSxpPWhuKHQuYixlLmIpLGE9aG4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9cihlKSx0LmI9aShlKSx0Lm9wYWNpdHk9YShlKSx0KyIifX1mdW5jdGlvbiB2cCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWthKGUpKS5oLChuPWthKG4pKS5oKSxpPWhuKGUuYyxuLmMpLGE9aG4oZS5sLG4ubCksbz1obihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUuYz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX12YXIgbXA9dnAodW4pLGJwPXZwKGhuKTtmdW5jdGlvbiB4cCh0KXtyZXR1cm4gZnVuY3Rpb24gZShuKXtmdW5jdGlvbiByKGUscil7dmFyIGk9dCgoZT1PYShlKSkuaCwocj1PYShyKSkuaCksYT1obihlLnMsci5zKSxvPWhuKGUubCxyLmwpLHM9aG4oZS5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmg9aSh0KSxlLnM9YSh0KSxlLmw9byhNYXRoLnBvdyh0LG4pKSxlLm9wYWNpdHk9cyh0KSxlKyIifX1yZXR1cm4gbj0rbixyLmdhbW1hPWUscn0oMSl9dmFyIF9wPXhwKHVuKSxrcD14cChobik7ZnVuY3Rpb24gd3AodCxlKXtmb3IodmFyIG49MCxyPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KHI8MD8wOnIpO248cjspYVtuXT10KGksaT1lWysrbl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKHItMSxNYXRoLmZsb29yKHQqPXIpKSk7cmV0dXJuIGFbZV0odC1lKX19dmFyIEVwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPW5ldyBBcnJheShlKSxyPTA7cjxlOysrciluW3JdPXQoci8oZS0xKSk7cmV0dXJuIG59LFRwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9dC5sZW5ndGgsaT10W3ItMV0sYT0wOysrbjxyOyllPWksaT10W25dLGErPWVbMV0qaVswXS1lWzBdKmlbMV07cmV0dXJuIGEvMn0sQ3A9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj0tMSxpPXQubGVuZ3RoLGE9MCxvPTAscz10W2ktMV0sYz0wOysrcjxpOyllPXMscz10W3JdLGMrPW49ZVswXSpzWzFdLXNbMF0qZVsxXSxhKz0oZVswXStzWzBdKSpuLG8rPShlWzFdK3NbMV0pKm47cmV0dXJuW2EvKGMqPTMpLG8vY119O2Z1bmN0aW9uIFNwKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIEFwKHQpe2Zvcih2YXIgZSxuLHIsaT10Lmxlbmd0aCxhPVswLDFdLG89MixzPTI7czxpOysrcyl7Zm9yKDtvPjEmJihlPXRbYVtvLTJdXSxuPXRbYVtvLTFdXSxyPXRbc10sKG5bMF0tZVswXSkqKHJbMV0tZVsxXSktKG5bMV0tZVsxXSkqKHJbMF0tZVswXSk8PTApOyktLW87YVtvKytdPXN9cmV0dXJuIGEuc2xpY2UoMCxvKX12YXIgTXA9ZnVuY3Rpb24odCl7aWYoKG49dC5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIGUsbixyPW5ldyBBcnJheShuKSxpPW5ldyBBcnJheShuKTtmb3IoZT0wO2U8bjsrK2UpcltlXT1bK3RbZV1bMF0sK3RbZV1bMV0sZV07Zm9yKHIuc29ydChTcCksZT0wO2U8bjsrK2UpaVtlXT1bcltlXVswXSwtcltlXVsxXV07dmFyIGE9QXAociksbz1BcChpKSxzPW9bMF09PT1hWzBdLGM9b1tvLmxlbmd0aC0xXT09PWFbYS5sZW5ndGgtMV0sdT1bXTtmb3IoZT1hLmxlbmd0aC0xO2U+PTA7LS1lKXUucHVzaCh0W3JbYVtlXV1bMl1dKTtmb3IoZT0rcztlPG8ubGVuZ3RoLWM7KytlKXUucHVzaCh0W3Jbb1tlXV1bMl1dKTtyZXR1cm4gdX0sT3A9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scixpPXQubGVuZ3RoLGE9dFtpLTFdLG89ZVswXSxzPWVbMV0sYz1hWzBdLHU9YVsxXSxsPSExLGg9MDtoPGk7KytoKW49KGE9dFtoXSlbMF0sKHI9YVsxXSk+cyE9dT5zJiZvPChjLW4pKihzLXIpLyh1LXIpK24mJihsPSFsKSxjPW4sdT1yO3JldHVybiBsfSxCcD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1hWzBdLHM9YVsxXSxjPTA7KytyPGk7KWU9byxuPXMsZS09bz0oYT10W3JdKVswXSxuLT1zPWFbMV0sYys9TWF0aC5zcXJ0KGUqZStuKm4pO3JldHVybiBjfSxOcD1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJhbmRvbSgpfSxEcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCxuKXtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sMT09PWFyZ3VtZW50cy5sZW5ndGg/KG49dCx0PTApOm4tPXQsZnVuY3Rpb24oKXtyZXR1cm4gZSgpKm4rdH19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLExwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByLGk7cmV0dXJuIHQ9bnVsbD09dD8wOit0LG49bnVsbD09bj8xOituLGZ1bmN0aW9uKCl7dmFyIGE7aWYobnVsbCE9cilhPXIscj1udWxsO2Vsc2UgZG97cj0yKmUoKS0xLGE9MiplKCktMSxpPXIqcithKmF9d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrbiphKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19cmV0dXJuIG4uc291cmNlPXQsbn0oTnApLElwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbigpe3ZhciB0PUxwLnNvdXJjZShlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKHQoKSl9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxScD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAscj0wO3I8dDsrK3Ipbis9ZSgpO3JldHVybiBufX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCksRnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3ZhciBuPVJwLnNvdXJjZShlKSh0KTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbigpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KE5wKSxQcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtZSgpKS90fX1yZXR1cm4gbi5zb3VyY2U9dCxufShOcCk7ZnVuY3Rpb24ganAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZShlKS5kb21haW4odCl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWXAodCxlKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLmludGVycG9sYXRvcih0KTticmVhaztkZWZhdWx0OnRoaXMuaW50ZXJwb2xhdG9yKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc312YXIgenA9QXJyYXkucHJvdG90eXBlLFVwPXpwLm1hcCwkcD16cC5zbGljZSxxcD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBXcCgpe3ZhciB0PVFpKCksZT1bXSxuPVtdLHI9cXA7ZnVuY3Rpb24gaShpKXt2YXIgYT1pKyIiLG89dC5nZXQoYSk7aWYoIW8pe2lmKHIhPT1xcClyZXR1cm4gcjt0LnNldChhLG89ZS5wdXNoKGkpKX1yZXR1cm4gblsoby0xKSVuLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXSx0PVFpKCk7Zm9yKHZhciByLGEsbz0tMSxzPW4ubGVuZ3RoOysrbzxzOyl0LmhhcyhhPShyPW5bb10pKyIiKXx8dC5zZXQoYSxlLnB1c2gocikpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksaSk6bi5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxpKTpyfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gV3AoZSxuKS51bmtub3duKHIpfSxqcC5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiBWcCgpe3ZhciB0LGUsbj1XcCgpLnVua25vd24odm9pZCAwKSxyPW4uZG9tYWluLGk9bi5yYW5nZSxhPVswLDFdLG89ITEscz0wLGM9MCx1PS41O2Z1bmN0aW9uIGwoKXt2YXIgbj1yKCkubGVuZ3RoLGw9YVsxXTxhWzBdLGg9YVtsLTBdLGY9YVsxLWxdO3Q9KGYtaCkvTWF0aC5tYXgoMSxuLXMrMipjKSxvJiYodD1NYXRoLmZsb29yKHQpKSxoKz0oZi1oLXQqKG4tcykpKnUsZT10KigxLXMpLG8mJihoPU1hdGgucm91bmQoaCksZT1NYXRoLnJvdW5kKGUpKTt2YXIgZD1rKG4pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGgrdCplfSkpO3JldHVybiBpKGw/ZC5yZXZlcnNlKCk6ZCl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIodCksbCgpKTpyKCl9LG4ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Wyt0WzBdLCt0WzFdXSxsKCkpOmEuc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhPVsrdFswXSwrdFsxXV0sbz0hMCxsKCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIGV9LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiB0fSxuLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhdCxsKCkpOm99LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGM9K3QpLGwoKSk6c30sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9TWF0aC5taW4oMSx0KSxsKCkpOnN9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSt0LGwoKSk6Y30sbi5hbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLGwoKSk6dX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFZwKHIoKSxhKS5yb3VuZChvKS5wYWRkaW5nSW5uZXIocykucGFkZGluZ091dGVyKGMpLmFsaWduKHUpfSxqcC5hcHBseShsKCksYXJndW1lbnRzKX1mdW5jdGlvbiBIcCh0KXt2YXIgZT10LmNvcHk7cmV0dXJuIHQucGFkZGluZz10LnBhZGRpbmdPdXRlcixkZWxldGUgdC5wYWRkaW5nSW5uZXIsZGVsZXRlIHQucGFkZGluZ091dGVyLHQuY29weT1mdW5jdGlvbigpe3JldHVybiBIcChlKCkpfSx0fWZ1bmN0aW9uIEdwKCl7cmV0dXJuIEhwKFZwLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfXZhciBYcD1mdW5jdGlvbih0KXtyZXR1cm4rdH0sWnA9WzAsMV07ZnVuY3Rpb24gUXAodCl7cmV0dXJuIHR9ZnVuY3Rpb24gS3AodCxlKXtyZXR1cm4oZS09dD0rdCk/ZnVuY3Rpb24obil7cmV0dXJuKG4tdCkvZX06KG49aXNOYU4oZSk/TmFOOi41LGZ1bmN0aW9uKCl7cmV0dXJuIG59KTt2YXIgbn1mdW5jdGlvbiBKcCh0KXt2YXIgZSxuPXRbMF0scj10W3QubGVuZ3RoLTFdO3JldHVybiBuPnImJihlPW4sbj1yLHI9ZSksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KG4sTWF0aC5taW4ocix0KSl9fWZ1bmN0aW9uIHR5KHQsZSxuKXt2YXIgcj10WzBdLGk9dFsxXSxhPWVbMF0sbz1lWzFdO3JldHVybiBpPHI/KHI9S3AoaSxyKSxhPW4obyxhKSk6KHI9S3AocixpKSxhPW4oYSxvKSksZnVuY3Rpb24odCl7cmV0dXJuIGEocih0KSl9fWZ1bmN0aW9uIGV5KHQsZSxuKXt2YXIgcj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCktMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPS0xO2Zvcih0W3JdPHRbMF0mJih0PXQuc2xpY2UoKS5yZXZlcnNlKCksZT1lLnNsaWNlKCkucmV2ZXJzZSgpKTsrK288cjspaVtvXT1LcCh0W29dLHRbbysxXSksYVtvXT1uKGVbb10sZVtvKzFdKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49Yyh0LGUsMSxyKS0xO3JldHVybiBhW25dKGlbbl0oZSkpfX1mdW5jdGlvbiBueSh0LGUpe3JldHVybiBlLmRvbWFpbih0LmRvbWFpbigpKS5yYW5nZSh0LnJhbmdlKCkpLmludGVycG9sYXRlKHQuaW50ZXJwb2xhdGUoKSkuY2xhbXAodC5jbGFtcCgpKS51bmtub3duKHQudW5rbm93bigpKX1mdW5jdGlvbiByeSgpe3ZhciB0LGUsbixyLGksYSxvPVpwLHM9WnAsYz1Bbix1PVFwO2Z1bmN0aW9uIGwoKXtyZXR1cm4gcj1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCk+Mj9leTp0eSxpPWE9bnVsbCxofWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGlzTmFOKGU9K2UpP246KGl8fChpPXIoby5tYXAodCkscyxjKSkpKHQodShlKSkpfXJldHVybiBoLmludmVydD1mdW5jdGlvbihuKXtyZXR1cm4gdShlKChhfHwoYT1yKHMsby5tYXAodCksX24pKSkobikpKX0saC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89VXAuY2FsbCh0LFhwKSx1PT09UXB8fCh1PUpwKG8pKSxsKCkpOm8uc2xpY2UoKX0saC5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0kcC5jYWxsKHQpLGwoKSk6cy5zbGljZSgpfSxoLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHM9JHAuY2FsbCh0KSxjPXVwLGwoKX0saC5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10P0pwKG8pOlFwLGgpOnUhPT1RcH0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGwoKSk6Y30saC51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsaCk6bn0sZnVuY3Rpb24obixyKXtyZXR1cm4gdD1uLGU9cixsKCl9fWZ1bmN0aW9uIGl5KHQsZSl7cmV0dXJuIHJ5KCkodCxlKX12YXIgYXk9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYT1BKHQsZSxuKTtzd2l0Y2goKHI9V3MobnVsbD09cj8iLGYiOnIpKS50eXBlKXtjYXNlInMiOnZhciBvPU1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKTtyZXR1cm4gbnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9YWMoYSxvKSl8fChyLnByZWNpc2lvbj1pKSxacyhyLG8pO2Nhc2UiIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJwIjpjYXNlInIiOm51bGwhPXIucHJlY2lzaW9ufHxpc05hTihpPW9jKGEsTWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpKSl8fChyLnByZWNpc2lvbj1pLSgiZSI9PT1yLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9aWMoYSkpfHwoci5wcmVjaXNpb249aS0yKigiJSI9PT1yLnR5cGUpKX1yZXR1cm4gWHMocil9O2Z1bmN0aW9uIG95KHQpe3ZhciBlPXQuZG9tYWluO3JldHVybiB0LnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciBuPWUoKTtyZXR1cm4gQyhuWzBdLG5bbi5sZW5ndGgtMV0sbnVsbD09dD8xMDp0KX0sdC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSgpO3JldHVybiBheShyWzBdLHJbci5sZW5ndGgtMV0sbnVsbD09dD8xMDp0LG4pfSx0Lm5pY2U9ZnVuY3Rpb24obil7bnVsbD09biYmKG49MTApO3ZhciByLGk9ZSgpLGE9MCxvPWkubGVuZ3RoLTEscz1pW2FdLGM9aVtvXTtyZXR1cm4gYzxzJiYocj1zLHM9YyxjPXIscj1hLGE9byxvPXIpLChyPVMocyxjLG4pKT4wP3I9UyhzPU1hdGguZmxvb3Iocy9yKSpyLGM9TWF0aC5jZWlsKGMvcikqcixuKTpyPDAmJihyPVMocz1NYXRoLmNlaWwocypyKS9yLGM9TWF0aC5mbG9vcihjKnIpL3IsbikpLHI+MD8oaVthXT1NYXRoLmZsb29yKHMvcikqcixpW29dPU1hdGguY2VpbChjL3IpKnIsZShpKSk6cjwwJiYoaVthXT1NYXRoLmNlaWwocypyKS9yLGlbb109TWF0aC5mbG9vcihjKnIpL3IsZShpKSksdH0sdH1mdW5jdGlvbiBzeSgpe3ZhciB0PWl5KFFwLFFwKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG55KHQsc3koKSl9LGpwLmFwcGx5KHQsYXJndW1lbnRzKSxveSh0KX1mdW5jdGlvbiBjeSh0KXt2YXIgZTtmdW5jdGlvbiBuKHQpe3JldHVybiBpc05hTih0PSt0KT9lOnR9cmV0dXJuIG4uaW52ZXJ0PW4sbi5kb21haW49bi5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VcC5jYWxsKGUsWHApLG4pOnQuc2xpY2UoKX0sbi51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGN5KHQpLnVua25vd24oZSl9LHQ9YXJndW1lbnRzLmxlbmd0aD9VcC5jYWxsKHQsWHApOlswLDFdLG95KG4pfXZhciB1eT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9MCxpPSh0PXQuc2xpY2UoKSkubGVuZ3RoLTEsYT10W3JdLG89dFtpXTtyZXR1cm4gbzxhJiYobj1yLHI9aSxpPW4sbj1hLGE9byxvPW4pLHRbcl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fTtmdW5jdGlvbiBseSh0KXtyZXR1cm4gTWF0aC5sb2codCl9ZnVuY3Rpb24gaHkodCl7cmV0dXJuIE1hdGguZXhwKHQpfWZ1bmN0aW9uIGZ5KHQpe3JldHVybi1NYXRoLmxvZygtdCl9ZnVuY3Rpb24gZHkodCl7cmV0dXJuLU1hdGguZXhwKC10KX1mdW5jdGlvbiBweSh0KXtyZXR1cm4gaXNGaW5pdGUodCk/KygiMWUiK3QpOnQ8MD8wOnR9ZnVuY3Rpb24geXkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi10KC1lKX19ZnVuY3Rpb24gZ3kodCl7dmFyIGUsbixyPXQobHksaHkpLGk9ci5kb21haW4sYT0xMDtmdW5jdGlvbiBvKCl7cmV0dXJuIGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NYXRoLkU/TWF0aC5sb2c6MTA9PT10JiZNYXRoLmxvZzEwfHwyPT09dCYmTWF0aC5sb2cyfHwodD1NYXRoLmxvZyh0KSxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkvdH0pfShhKSxuPWZ1bmN0aW9uKHQpe3JldHVybiAxMD09PXQ/cHk6dD09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3codCxlKX19KGEpLGkoKVswXTwwPyhlPXl5KGUpLG49eXkobiksdChmeSxkeSkpOnQobHksaHkpLHJ9cmV0dXJuIHIuYmFzZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxvKCkpOmF9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKHQpLG8oKSk6aSgpfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3ZhciByLG89aSgpLHM9b1swXSxjPW9bby5sZW5ndGgtMV07KHI9YzxzKSYmKGY9cyxzPWMsYz1mKTt2YXIgdSxsLGgsZj1lKHMpLGQ9ZShjKSxwPW51bGw9PXQ/MTA6K3QseT1bXTtpZighKGElMSkmJmQtZjxwKXtpZihmPU1hdGgucm91bmQoZiktMSxkPU1hdGgucm91bmQoZCkrMSxzPjApe2Zvcig7ZjxkOysrZilmb3IobD0xLHU9bihmKTtsPGE7KytsKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO3kucHVzaChoKX19ZWxzZSBmb3IoO2Y8ZDsrK2YpZm9yKGw9YS0xLHU9bihmKTtsPj0xOy0tbClpZighKChoPXUqbCk8cykpe2lmKGg+YylicmVhazt5LnB1c2goaCl9fWVsc2UgeT1DKGYsZCxNYXRoLm1pbihkLWYscCkpLm1hcChuKTtyZXR1cm4gcj95LnJldmVyc2UoKTp5fSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxpKXtpZihudWxsPT1pJiYoaT0xMD09PWE/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmKGk9WHMoaSkpLHQ9PT0xLzApcmV0dXJuIGk7bnVsbD09dCYmKHQ9MTApO3ZhciBvPU1hdGgubWF4KDEsYSp0L3IudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10L24oTWF0aC5yb3VuZChlKHQpKSk7cmV0dXJuIHIqYTxhLS41JiYocio9YSkscjw9bz9pKHQpOiIifX0sci5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkodXkoaSgpLHtmbG9vcjpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmZsb29yKGUodCkpKX0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gbihNYXRoLmNlaWwoZSh0KSkpfX0pKX0scn1mdW5jdGlvbiB2eSgpe3ZhciB0PWd5KHJ5KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnkodCx2eSgpKS5iYXNlKHQuYmFzZSgpKX0sanAuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gbXkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5sb2cxcChNYXRoLmFicyhlL3QpKX19ZnVuY3Rpb24gYnkodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnNpZ24oZSkqTWF0aC5leHBtMShNYXRoLmFicyhlKSkqdH19ZnVuY3Rpb24geHkodCl7dmFyIGU9MSxuPXQobXkoZSksYnkoZSkpO3JldHVybiBuLmNvbnN0YW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QobXkoZT0rbiksYnkoZSkpOmV9LG95KG4pfWZ1bmN0aW9uIF95KCl7dmFyIHQ9eHkocnkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBueSh0LF95KCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LGpwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBreSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gd3kodCl7cmV0dXJuIHQ8MD8tTWF0aC5zcXJ0KC10KTpNYXRoLnNxcnQodCl9ZnVuY3Rpb24gRXkodCl7cmV0dXJuIHQ8MD8tdCp0OnQqdH1mdW5jdGlvbiBUeSh0KXt2YXIgZT10KFFwLFFwKSxuPTE7ZnVuY3Rpb24gcigpe3JldHVybiAxPT09bj90KFFwLFFwKTouNT09PW4/dCh3eSxFeSk6dChreShuKSxreSgxL24pKX1yZXR1cm4gZS5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxyKCkpOm59LG95KGUpfWZ1bmN0aW9uIEN5KCl7dmFyIHQ9VHkocnkoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBueSh0LEN5KCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LGpwLmFwcGx5KHQsYXJndW1lbnRzKSx0fWZ1bmN0aW9uIFN5KCl7cmV0dXJuIEN5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gQXkoKXt2YXIgdCxlPVtdLG49W10saT1bXTtmdW5jdGlvbiBhKCl7dmFyIHQ9MCxyPU1hdGgubWF4KDEsbi5sZW5ndGgpO2ZvcihpPW5ldyBBcnJheShyLTEpOysrdDxyOylpW3QtMV09QihlLHQvcik7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtyZXR1cm4gaXNOYU4oZT0rZSk/dDpuW2MoaSxlKV19cmV0dXJuIG8uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm4gcjwwP1tOYU4sTmFOXTpbcj4wP2lbci0xXTplWzBdLHI8aS5sZW5ndGg/aVtyXTplW2UubGVuZ3RoLTFdXX0sby5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdO2Zvcih2YXIgbixpPTAsbz10Lmxlbmd0aDtpPG87KytpKW51bGw9PShuPXRbaV0pfHxpc05hTihuPStuKXx8ZS5wdXNoKG4pO3JldHVybiBlLnNvcnQociksYSgpfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCksYSgpKTpuLnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEF5KCkuZG9tYWluKGUpLnJhbmdlKG4pLnVua25vd24odCl9LGpwLmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBNeSgpe3ZhciB0LGU9MCxuPTEscj0xLGk9Wy41XSxhPVswLDFdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGU8PWU/YVtjKGksZSwwLHIpXTp0fWZ1bmN0aW9uIHMoKXt2YXIgdD0tMTtmb3IoaT1uZXcgQXJyYXkocik7Kyt0PHI7KWlbdF09KCh0KzEpKm4tKHQtcikqZSkvKHIrMSk7cmV0dXJuIG99cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0scygpKTpbZSxuXX0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0oYT0kcC5jYWxsKHQpKS5sZW5ndGgtMSxzKCkpOmEuc2xpY2UoKX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIG89YS5pbmRleE9mKHQpO3JldHVybiBvPDA/W05hTixOYU5dOm88MT9bZSxpWzBdXTpvPj1yP1tpW3ItMV0sbl06W2lbby0xXSxpW29dXX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6b30sby50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIGkuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIE15KCkuZG9tYWluKFtlLG5dKS5yYW5nZShhKS51bmtub3duKHQpfSxqcC5hcHBseShveShvKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE95KCl7dmFyIHQsZT1bLjVdLG49WzAsMV0scj0xO2Z1bmN0aW9uIGkoaSl7cmV0dXJuIGk8PWk/bltjKGUsaSwwLHIpXTp0fXJldHVybiBpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0kcC5jYWxsKHQpLHI9TWF0aC5taW4oZS5sZW5ndGgsbi5sZW5ndGgtMSksaSk6ZS5zbGljZSgpfSxpLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSRwLmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTpuLnNsaWNlKCl9LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3ZhciByPW4uaW5kZXhPZih0KTtyZXR1cm5bZVtyLTFdLGVbcl1dfSxpLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT3koKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sanAuYXBwbHkoaSxhcmd1bWVudHMpfXZhciBCeT1uZXcgRGF0ZSxOeT1uZXcgRGF0ZTtmdW5jdGlvbiBEeSh0LGUsbixyKXtmdW5jdGlvbiBpKGUpe3JldHVybiB0KGU9MD09PWFyZ3VtZW50cy5sZW5ndGg/bmV3IERhdGU6bmV3IERhdGUoK2UpKSxlfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoK2UpKSxlfSxpLmNlaWw9ZnVuY3Rpb24obil7cmV0dXJuIHQobj1uZXcgRGF0ZShuLTEpKSxlKG4sMSksdChuKSxufSxpLnJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCksbj1pLmNlaWwodCk7cmV0dXJuIHQtZTxuLXQ/ZTpufSxpLm9mZnNldD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHQ9bmV3IERhdGUoK3QpLG51bGw9PW4/MTpNYXRoLmZsb29yKG4pKSx0fSxpLnJhbmdlPWZ1bmN0aW9uKG4scixhKXt2YXIgbyxzPVtdO2lmKG49aS5jZWlsKG4pLGE9bnVsbD09YT8xOk1hdGguZmxvb3IoYSksIShuPHImJmE+MCkpcmV0dXJuIHM7ZG97cy5wdXNoKG89bmV3IERhdGUoK24pKSxlKG4sYSksdChuKX13aGlsZShvPG4mJm48cik7cmV0dXJuIHN9LGkuZmlsdGVyPWZ1bmN0aW9uKG4pe3JldHVybiBEeSgoZnVuY3Rpb24oZSl7aWYoZT49ZSlmb3IoO3QoZSksIW4oZSk7KWUuc2V0VGltZShlLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7ZSh0LC0xKSwhbih0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7ZSh0LDEpLCFuKHQpOyk7fSkpfSxuJiYoaS5jb3VudD1mdW5jdGlvbihlLHIpe3JldHVybiBCeS5zZXRUaW1lKCtlKSxOeS5zZXRUaW1lKCtyKSx0KEJ5KSx0KE55KSxNYXRoLmZsb29yKG4oQnksTnkpKX0saS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP2kuZmlsdGVyKHI/ZnVuY3Rpb24oZSl7cmV0dXJuIHIoZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIGkuY291bnQoMCxlKSV0PT0wfSk6aTpudWxsfSksaX12YXIgTHk9RHkoKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO0x5LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/RHkoKGZ1bmN0aW9uKGUpe2Uuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihlLmdldEZ1bGxZZWFyKCkvdCkqdCksZS5zZXRNb250aCgwLDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBJeT1MeSxSeT1MeS5yYW5nZSxGeT1EeSgoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLFB5PUZ5LGp5PUZ5LnJhbmdlO2Z1bmN0aW9uIFl5KHQpe3JldHVybiBEeSgoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpLShlLmdldERheSgpKzctdCklNyksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS82MDQ4ZTV9KSl9dmFyIHp5PVl5KDApLFV5PVl5KDEpLCR5PVl5KDIpLHF5PVl5KDMpLFd5PVl5KDQpLFZ5PVl5KDUpLEh5PVl5KDYpLEd5PXp5LnJhbmdlLFh5PVV5LnJhbmdlLFp5PSR5LnJhbmdlLFF5PXF5LnJhbmdlLEt5PVd5LnJhbmdlLEp5PVZ5LnJhbmdlLHRnPUh5LnJhbmdlLGVnPUR5KChmdW5jdGlvbih0KXt0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC02ZTQqKGUuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKS84NjRlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXREYXRlKCktMX0pKSxuZz1lZyxyZz1lZy5yYW5nZSxpZz1EeSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKS0xZTMqdC5nZXRTZWNvbmRzKCktNmU0KnQuZ2V0TWludXRlcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCszNmU1KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMzZlNX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpfSkpLGFnPWlnLG9nPWlnLnJhbmdlLHNnPUR5KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjZz1zZyx1Zz1zZy5yYW5nZSxsZz1EeSgoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxoZz1sZyxmZz1sZy5yYW5nZSxkZz1EeSgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS10fSkpO2RnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/RHkoKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFRpbWUoK2Urbip0KX0pLChmdW5jdGlvbihlLG4pe3JldHVybihuLWUpL3R9KSk6ZGc6bnVsbH07dmFyIHBnPWRnLHlnPWRnLnJhbmdlO2Z1bmN0aW9uIGdnKHQpe3JldHVybiBEeSgoZnVuY3Rpb24oZSl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpLShlLmdldFVUQ0RheSgpKzctdCklNyksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNjA0OGU1fSkpfXZhciB2Zz1nZygwKSxtZz1nZygxKSxiZz1nZygyKSx4Zz1nZygzKSxfZz1nZyg0KSxrZz1nZyg1KSx3Zz1nZyg2KSxFZz12Zy5yYW5nZSxUZz1tZy5yYW5nZSxDZz1iZy5yYW5nZSxTZz14Zy5yYW5nZSxBZz1fZy5yYW5nZSxNZz1rZy5yYW5nZSxPZz13Zy5yYW5nZSxCZz1EeSgoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLE5nPUJnLERnPUJnLnJhbmdlLExnPUR5KChmdW5jdGlvbih0KXt0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKX0pKTtMZy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gaXNGaW5pdGUodD1NYXRoLmZsb29yKHQpKSYmdD4wP0R5KChmdW5jdGlvbihlKXtlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRVVENGdWxsWWVhcigpL3QpKnQpLGUuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUsbil7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrbip0KX0pKTpudWxsfTt2YXIgSWc9TGcsUmc9TGcucmFuZ2U7ZnVuY3Rpb24gRmcodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIFBnKHQpe2lmKDA8PXQueSYmdC55PDEwMCl7dmFyIGU9bmV3IERhdGUoRGF0ZS5VVEMoLTEsdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpKTtyZXR1cm4gZS5zZXRVVENGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpfWZ1bmN0aW9uIGpnKHQsZSxuKXtyZXR1cm57eTp0LG06ZSxkOm4sSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBZZyh0KXt2YXIgZT10LmRhdGVUaW1lLG49dC5kYXRlLHI9dC50aW1lLGk9dC5wZXJpb2RzLGE9dC5kYXlzLG89dC5zaG9ydERheXMscz10Lm1vbnRocyxjPXQuc2hvcnRNb250aHMsdT1LZyhpKSxsPUpnKGkpLGg9S2coYSksZj1KZyhhKSxkPUtnKG8pLHA9SmcobykseT1LZyhzKSxnPUpnKHMpLHY9S2coYyksbT1KZyhjKSxiPXthOmZ1bmN0aW9uKHQpe3JldHVybiBvW3QuZ2V0RGF5KCldfSxBOmZ1bmN0aW9uKHQpe3JldHVybiBhW3QuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBjW3QuZ2V0TW9udGgoKV19LEI6ZnVuY3Rpb24odCl7cmV0dXJuIHNbdC5nZXRNb250aCgpXX0sYzpudWxsLGQ6eHYsZTp4dixmOlR2LEg6X3YsSTprdixqOnd2LEw6RXYsbTpDdixNOlN2LHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROmVtLHM6bm0sUzpBdix1Ok12LFU6T3YsVjpCdix3Ok52LFc6RHYseDpudWxsLFg6bnVsbCx5Okx2LFk6SXYsWjpSdiwiJSI6dG19LHg9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDpGdixlOkZ2LGY6VXYsSDpQdixJOmp2LGo6WXYsTDp6dixtOiR2LE06cXYscDpmdW5jdGlvbih0KXtyZXR1cm4gaVsrKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6ZW0sczpubSxTOld2LHU6VnYsVTpIdixWOkd2LHc6WHYsVzpadix4Om51bGwsWDpudWxsLHk6UXYsWTpLdixaOkp2LCIlIjp0bX0sXz17YTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9cFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1oLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQudz1mW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXYuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPW1bclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQjpmdW5jdGlvbih0LGUsbil7dmFyIHI9eS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lm09Z1tyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gRSh0LGUsbixyKX0sZDpsdixlOmx2LGY6Z3YsSDpmdixJOmZ2LGo6aHYsTDp5dixtOnV2LE06ZHYscDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dS5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnA9bFtyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxxOmN2LFE6bXYsczpidixTOnB2LHU6ZXYsVTpudixWOnJ2LHc6dHYsVzppdix4OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRSh0LG4sZSxyKX0sWDpmdW5jdGlvbih0LGUsbil7cmV0dXJuIEUodCxyLGUsbil9LHk6b3YsWTphdixaOnN2LCIlIjp2dn07ZnVuY3Rpb24gayh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGEsbz1bXSxzPS0xLGM9MCx1PXQubGVuZ3RoO2ZvcihuIGluc3RhbmNlb2YgRGF0ZXx8KG49bmV3IERhdGUoK24pKTsrK3M8dTspMzc9PT10LmNoYXJDb2RlQXQocykmJihvLnB1c2godC5zbGljZShjLHMpKSxudWxsIT0oaT1WZ1tyPXQuY2hhckF0KCsrcyldKT9yPXQuY2hhckF0KCsrcyk6aT0iZSI9PT1yPyIgIjoiMCIsKGE9ZVtyXSkmJihyPWEobixpKSksby5wdXNoKHIpLGM9cysxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxzKSksby5qb2luKCIiKX19ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgcixpLGE9amcoMTkwMCx2b2lkIDAsMSk7aWYoRShhLHQsbis9IiIsMCkhPW4ubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGEpcmV0dXJuIG5ldyBEYXRlKGEuUSk7aWYoInMiaW4gYSlyZXR1cm4gbmV3IERhdGUoMWUzKmEucysoIkwiaW4gYT9hLkw6MCkpO2lmKCFlfHwiWiJpbiBhfHwoYS5aPTApLCJwImluIGEmJihhLkg9YS5IJTEyKzEyKmEucCksdm9pZCAwPT09YS5tJiYoYS5tPSJxImluIGE/YS5xOjApLCJWImluIGEpe2lmKGEuVjwxfHxhLlY+NTMpcmV0dXJuIG51bGw7InciaW4gYXx8KGEudz0xKSwiWiJpbiBhPyhpPShyPVBnKGpnKGEueSwwLDEpKSkuZ2V0VVRDRGF5KCkscj1pPjR8fDA9PT1pP21nLmNlaWwocik6bWcocikscj1OZy5vZmZzZXQociw3KihhLlYtMSkpLGEueT1yLmdldFVUQ0Z1bGxZZWFyKCksYS5tPXIuZ2V0VVRDTW9udGgoKSxhLmQ9ci5nZXRVVENEYXRlKCkrKGEudys2KSU3KTooaT0ocj1GZyhqZyhhLnksMCwxKSkpLmdldERheSgpLHI9aT40fHwwPT09aT9VeS5jZWlsKHIpOlV5KHIpLHI9bmcub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRGdWxsWWVhcigpLGEubT1yLmdldE1vbnRoKCksYS5kPXIuZ2V0RGF0ZSgpKyhhLncrNiklNyl9ZWxzZSgiVyJpbiBhfHwiVSJpbiBhKSYmKCJ3ImluIGF8fChhLnc9InUiaW4gYT9hLnUlNzoiVyJpbiBhPzE6MCksaT0iWiJpbiBhP1BnKGpnKGEueSwwLDEpKS5nZXRVVENEYXkoKTpGZyhqZyhhLnksMCwxKSkuZ2V0RGF5KCksYS5tPTAsYS5kPSJXImluIGE/KGEudys2KSU3KzcqYS5XLShpKzUpJTc6YS53KzcqYS5VLShpKzYpJTcpO3JldHVybiJaImluIGE/KGEuSCs9YS5aLzEwMHwwLGEuTSs9YS5aJTEwMCxQZyhhKSk6RmcoYSl9fWZ1bmN0aW9uIEUodCxlLG4scil7Zm9yKHZhciBpLGEsbz0wLHM9ZS5sZW5ndGgsYz1uLmxlbmd0aDtvPHM7KXtpZihyPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPV9baSBpbiBWZz9lLmNoYXJBdChvKyspOmldKXx8KHI9YSh0LG4scikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1uLmNoYXJDb2RlQXQocisrKSlyZXR1cm4tMX1yZXR1cm4gcn1yZXR1cm4oYi54PWsobixiKSxiLlg9ayhyLGIpLGIuYz1rKGUsYikseC54PWsobix4KSx4Llg9ayhyLHgpLHguYz1rKGUseCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLGIpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1rKHQrPSIiLHgpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y1BhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXcodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fSl9dmFyIHpnLFVnLCRnLHFnLFdnLFZnPXsiLSI6IiIsXzoiICIsMDoiMCJ9LEhnPS9eXHMqXGQrLyxHZz0vXiUvLFhnPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBaZyh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBRZyh0KXtyZXR1cm4gdC5yZXBsYWNlKFhnLCJcXCQmIil9ZnVuY3Rpb24gS2codCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFFnKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gSmcodCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gdHYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gZXYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbnYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcnYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaXYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYXYodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb3YodCxlLG4pe3ZhciByPUhnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBzdih0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGN2KHQsZSxuKXt2YXIgcj1IZy5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHV2KHQsZSxuKXt2YXIgcj1IZy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBsdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBodih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5dih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBndih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2dih0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBtdih0LGUsbil7dmFyIHI9SGcuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ2KHQsZSxuKXt2YXIgcj1IZy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geHYodCxlKXtyZXR1cm4gWmcodC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBfdih0LGUpe3JldHVybiBaZyh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiBrdih0LGUpe3JldHVybiBaZyh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gd3YodCxlKXtyZXR1cm4gWmcoMStuZy5jb3VudChJeSh0KSx0KSxlLDMpfWZ1bmN0aW9uIEV2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBUdih0LGUpe3JldHVybiBFdih0LGUpKyIwMDAifWZ1bmN0aW9uIEN2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gU3YodCxlKXtyZXR1cm4gWmcodC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBBdih0LGUpe3JldHVybiBaZyh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE12KHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBPdih0LGUpe3JldHVybiBaZyh6eS5jb3VudChJeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gQnYodCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP1d5KHQpOld5LmNlaWwodCksWmcoV3kuY291bnQoSXkodCksdCkrKDQ9PT1JeSh0KS5nZXREYXkoKSksZSwyKX1mdW5jdGlvbiBOdih0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBEdih0LGUpe3JldHVybiBaZyhVeS5jb3VudChJeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gTHYodCxlKXtyZXR1cm4gWmcodC5nZXRGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEl2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBSdih0KXt2YXIgZT10LmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKGU+MD8iLSI6KGUqPS0xLCIrIikpK1pnKGUvNjB8MCwiMCIsMikrWmcoZSU2MCwiMCIsMil9ZnVuY3Rpb24gRnYodCxlKXtyZXR1cm4gWmcodC5nZXRVVENEYXRlKCksZSwyKX1mdW5jdGlvbiBQdih0LGUpe3JldHVybiBaZyh0LmdldFVUQ0hvdXJzKCksZSwyKX1mdW5jdGlvbiBqdih0LGUpe3JldHVybiBaZyh0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gWXYodCxlKXtyZXR1cm4gWmcoMStOZy5jb3VudChJZyh0KSx0KSxlLDMpfWZ1bmN0aW9uIHp2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBVdih0LGUpe3JldHVybiB6dih0LGUpKyIwMDAifWZ1bmN0aW9uICR2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0VVRDTW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gcXYodCxlKXtyZXR1cm4gWmcodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBXdih0LGUpe3JldHVybiBaZyh0LmdldFVUQ1NlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIFZ2KHQpe3ZhciBlPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBIdih0LGUpe3JldHVybiBaZyh2Zy5jb3VudChJZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gR3YodCxlKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiB0PW4+PTR8fDA9PT1uP19nKHQpOl9nLmNlaWwodCksWmcoX2cuY291bnQoSWcodCksdCkrKDQ9PT1JZyh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiBYdih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBadih0LGUpe3JldHVybiBaZyhtZy5jb3VudChJZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gUXYodCxlKXtyZXR1cm4gWmcodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIEt2KHQsZSl7cmV0dXJuIFpnKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBKdigpe3JldHVybiIrMDAwMCJ9ZnVuY3Rpb24gdG0oKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gZW0odCl7cmV0dXJuK3R9ZnVuY3Rpb24gbm0odCl7cmV0dXJuIE1hdGguZmxvb3IoK3QvMWUzKX1mdW5jdGlvbiBybSh0KXtyZXR1cm4gemc9WWcodCksVWc9emcuZm9ybWF0LCRnPXpnLnBhcnNlLHFnPXpnLnV0Y0Zvcm1hdCxXZz16Zy51dGNQYXJzZSx6Z31ybSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIGltKHQpe3JldHVybiBuZXcgRGF0ZSh0KX1mdW5jdGlvbiBhbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERhdGU/K3Q6K25ldyBEYXRlKCt0KX1mdW5jdGlvbiBvbSh0LGUsbixyLGEsbyxzLGMsdSl7dmFyIGw9aXkoUXAsUXApLGg9bC5pbnZlcnQsZj1sLmRvbWFpbixkPXUoIi4lTCIpLHA9dSgiOiVTIikseT11KCIlSTolTSIpLGc9dSgiJUkgJXAiKSx2PXUoIiVhICVkIiksbT11KCIlYiAlZCIpLGI9dSgiJUIiKSx4PXUoIiVZIiksXz1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsNmU0XSxbbyw1LDNlNV0sW28sMTUsOWU1XSxbbywzMCwxOGU1XSxbYSwxLDM2ZTVdLFthLDMsMTA4ZTVdLFthLDYsMjE2ZTVdLFthLDEyLDQzMmU1XSxbciwxLDg2NGU1XSxbciwyLDE3MjhlNV0sW24sMSw2MDQ4ZTVdLFtlLDEsMjU5MmU2XSxbZSwzLDc3NzZlNl0sW3QsMSwzMTUzNmU2XV07ZnVuY3Rpb24gayhpKXtyZXR1cm4ocyhpKTxpP2Q6byhpKTxpP3A6YShpKTxpP3k6cihpKTxpP2c6ZShpKTxpP24oaSk8aT92Om06dChpKTxpP2I6eCkoaSl9ZnVuY3Rpb24gdyhlLG4scixhKXtpZihudWxsPT1lJiYoZT0xMCksIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbz1NYXRoLmFicyhyLW4pL2Uscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gdFsyXX0pKS5yaWdodChfLG8pO3M9PT1fLmxlbmd0aD8oYT1BKG4vMzE1MzZlNixyLzMxNTM2ZTYsZSksZT10KTpzPyhhPShzPV9bby9fW3MtMV1bMl08X1tzXVsyXS9vP3MtMTpzXSlbMV0sZT1zWzBdKTooYT1NYXRoLm1heChBKG4scixlKSwxKSxlPWMpfXJldHVybiBudWxsPT1hP2U6ZS5ldmVyeShhKX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBEYXRlKGgodCkpfSxsLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9mKFVwLmNhbGwodCxhbSkpOmYoKS5tYXAoaW0pfSxsLnRpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mKCksaT1yWzBdLGE9cltyLmxlbmd0aC0xXSxvPWE8aTtyZXR1cm4gbyYmKG49aSxpPWEsYT1uKSxuPShuPXcodCxpLGEsZSkpP24ucmFuZ2UoaSxhKzEpOltdLG8/bi5yZXZlcnNlKCk6bn0sbC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWU/azp1KGUpfSxsLm5pY2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1mKCk7cmV0dXJuKHQ9dyh0LG5bMF0sbltuLmxlbmd0aC0xXSxlKSk/Zih1eShuLHQpKTpsfSxsLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbnkobCxvbSh0LGUsbixyLGEsbyxzLGMsdSkpfSxsfXZhciBzbT1mdW5jdGlvbigpe3JldHVybiBqcC5hcHBseShvbShJeSxQeSx6eSxuZyxhZyxjZyxoZyxwZyxVZykuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pLGFyZ3VtZW50cyl9LGNtPUR5KChmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUoMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDTW9udGgodC5nZXRVVENNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKS10LmdldFVUQ01vbnRoKCkrMTIqKGUuZ2V0VVRDRnVsbFllYXIoKS10LmdldFVUQ0Z1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCl9KSksdW09Y20sbG09Y20ucmFuZ2UsaG09RHkoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTWludXRlcygwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMzZlNSplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzM2ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDSG91cnMoKX0pKSxmbT1obSxkbT1obS5yYW5nZSxwbT1EeSgoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSx5bT1wbSxnbT1wbS5yYW5nZSx2bT1mdW5jdGlvbigpe3JldHVybiBqcC5hcHBseShvbShJZyx1bSx2ZyxOZyxmbSx5bSxoZyxwZyxxZykuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIG1tKCl7dmFyIHQsZSxuLHIsaSxhPTAsbz0xLHM9UXAsYz0hMTtmdW5jdGlvbiB1KGUpe3JldHVybiBpc05hTihlPStlKT9pOnMoMD09PW4/LjU6KGU9KHIoZSktdCkqbixjP01hdGgubWF4KDAsTWF0aC5taW4oMSxlKSk6ZSkpfXJldHVybiB1LmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1yKGE9K2lbMF0pLGU9cihvPStpWzFdKSxuPXQ9PT1lPzA6MS8oZS10KSx1KTpbYSxvXX0sdS5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0hIXQsdSk6Y30sdS5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCx1KTpzfSx1LnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCx1KTppfSxmdW5jdGlvbihpKXtyZXR1cm4gcj1pLHQ9aShhKSxlPWkobyksbj10PT09ZT8wOjEvKGUtdCksdX19ZnVuY3Rpb24gYm0odCxlKXtyZXR1cm4gZS5kb21haW4odC5kb21haW4oKSkuaW50ZXJwb2xhdG9yKHQuaW50ZXJwb2xhdG9yKCkpLmNsYW1wKHQuY2xhbXAoKSkudW5rbm93bih0LnVua25vd24oKSl9ZnVuY3Rpb24geG0oKXt2YXIgdD1veShtbSgpKFFwKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LHhtKCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gX20oKXt2YXIgdD1neShtbSgpKS5kb21haW4oWzEsMTBdKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsX20oKSkuYmFzZSh0LmJhc2UoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBrbSgpe3ZhciB0PXh5KG1tKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxrbSgpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gd20oKXt2YXIgdD1UeShtbSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsd20oKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIEVtKCl7cmV0dXJuIHdtLmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gVG0oKXt2YXIgdD1bXSxlPVFwO2Z1bmN0aW9uIG4obil7aWYoIWlzTmFOKG49K24pKXJldHVybiBlKChjKHQsbiktMSkvKHQubGVuZ3RoLTEpKX1yZXR1cm4gbi5kb21haW49ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQuc2xpY2UoKTt0PVtdO2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKW51bGw9PShpPWVbYV0pfHxpc05hTihpPStpKXx8dC5wdXNoKGkpO3JldHVybiB0LnNvcnQociksbn0sbi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVG0oZSkuZG9tYWluKHQpfSxZcC5hcHBseShuLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQ20oKXt2YXIgdCxlLG4scixpLGEsbyxzPTAsYz0uNSx1PTEsbD1RcCxoPSExO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGlzTmFOKHQ9K3QpP286KHQ9LjUrKCh0PSthKHQpKS1lKSoodDxlP3I6aSksbChoP01hdGgubWF4KDAsTWF0aC5taW4oMSx0KSk6dCkpfXJldHVybiBmLmRvbWFpbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1hKHM9K29bMF0pLGU9YShjPStvWzFdKSxuPWEodT0rb1syXSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmKTpbcyxjLHVdfSxmLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSEhdCxmKTpofSxmLmludGVycG9sYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD10LGYpOmx9LGYudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LGYpOm99LGZ1bmN0aW9uKG8pe3JldHVybiBhPW8sdD1vKHMpLGU9byhjKSxuPW8odSkscj10PT09ZT8wOi41LyhlLXQpLGk9ZT09PW4/MDouNS8obi1lKSxmfX1mdW5jdGlvbiBTbSgpe3ZhciB0PW95KENtKCkoUXApKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGJtKHQsU20oKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBBbSgpe3ZhciB0PWd5KENtKCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxBbSgpKS5iYXNlKHQuYmFzZSgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIE1tKCl7dmFyIHQ9eHkoQ20oKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBibSh0LE1tKCkpLmNvbnN0YW50KHQuY29uc3RhbnQoKSl9LFlwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBPbSgpe3ZhciB0PVR5KENtKCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYm0odCxPbSgpKS5leHBvbmVudCh0LmV4cG9uZW50KCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gQm0oKXtyZXR1cm4gT20uYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX12YXIgTm09ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzZ8MCxuPW5ldyBBcnJheShlKSxyPTA7cjxlOyluW3JdPSIjIit0LnNsaWNlKDYqciw2Kisrcik7cmV0dXJuIG59LERtPU5tKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKSxMbT1ObSgiN2ZjOTdmYmVhZWQ0ZmRjMDg2ZmZmZjk5Mzg2Y2IwZjAwMjdmYmY1YjE3NjY2NjY2IiksSW09Tm0oIjFiOWU3N2Q5NWYwMjc1NzBiM2U3Mjk4YTY2YTYxZWU2YWIwMmE2NzYxZDY2NjY2NiIpLFJtPU5tKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKSxGbT1ObSgiZmJiNGFlYjNjZGUzY2NlYmM1ZGVjYmU0ZmVkOWE2ZmZmZmNjZTVkOGJkZmRkYWVjZjJmMmYyIiksUG09Tm0oImIzZTJjZGZkY2RhY2NiZDVlOGY0Y2FlNGU2ZjVjOWZmZjJhZWYxZTJjY2NjY2NjYyIpLGptPU5tKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKSxZbT1ObSgiNjZjMmE1ZmM4ZDYyOGRhMGNiZTc4YWMzYTZkODU0ZmZkOTJmZTVjNDk0YjNiM2IzIiksem09Tm0oIjhkZDNjN2ZmZmZiM2JlYmFkYWZiODA3MjgwYjFkM2ZkYjQ2MmIzZGU2OWZjY2RlNWQ5ZDlkOWJjODBiZGNjZWJjNWZmZWQ2ZiIpLFVtPU5tKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKSwkbT1mdW5jdGlvbih0KXtyZXR1cm4gcG4odFt0Lmxlbmd0aC0xXSl9LHFtPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcChObSksV209JG0ocW0pLFZtPW5ldyBBcnJheSgzKS5jb25jYXQoImFmOGRjM2Y3ZjdmNzdmYmY3YiIsIjdiMzI5NGMyYTVjZmE2ZGJhMDAwODgzNyIsIjdiMzI5NGMyYTVjZmY3ZjdmN2E2ZGJhMDAwODgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGQ5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4M2FmOGRjM2U3ZDRlOGY3ZjdmN2Q5ZjBkMzdmYmY3YjFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNyIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGQ5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIsIjQwMDA0Yjc2MmE4Mzk5NzBhYmMyYTVjZmU3ZDRlOGY3ZjdmN2Q5ZjBkM2E2ZGJhMDVhYWU2MTFiNzgzNzAwNDQxYiIpLm1hcChObSksSG09JG0oVm0pLEdtPW5ldyBBcnJheSgzKS5jb25jYXQoImU5YTNjOWY3ZjdmN2ExZDc2YSIsImQwMWM4YmYxYjZkYWI4ZTE4NjRkYWMyNiIsImQwMWM4YmYxYjZkYWY3ZjdmN2I4ZTE4NjRkYWMyNiIsImM1MWI3ZGU5YTNjOWZkZTBlZmU2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGU5YTNjOWZkZTBlZmY3ZjdmN2U2ZjVkMGExZDc2YTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsImM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmU2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIsIjhlMDE1MmM1MWI3ZGRlNzdhZWYxYjZkYWZkZTBlZmY3ZjdmN2U2ZjVkMGI4ZTE4NjdmYmM0MTRkOTIyMTI3NjQxOSIpLm1hcChObSksWG09JG0oR20pLFptPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcChObSksUW09JG0oWm0pLEttPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmY3ZjdmNzY3YTljZiIsImNhMDAyMGY0YTU4MjkyYzVkZTA1NzFiMCIsImNhMDAyMGY0YTU4MmY3ZjdmNzkyYzVkZTA1NzFiMCIsImIyMTgyYmVmOGE2MmZkZGJjN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmVmOGE2MmZkZGJjN2Y3ZjdmN2QxZTVmMDY3YTljZjIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYyIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2Y3ZjdmN2QxZTVmMDkyYzVkZTQzOTNjMzIxNjZhYzA1MzA2MSIpLm1hcChObSksSm09JG0oS20pLHRiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmOGE2MmZmZmZmZjk5OTk5OSIsImNhMDAyMGY0YTU4MmJhYmFiYTQwNDA0MCIsImNhMDAyMGY0YTU4MmZmZmZmZmJhYmFiYTQwNDA0MCIsImIyMTgyYmVmOGE2MmZkZGJjN2UwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmVmOGE2MmZkZGJjN2ZmZmZmZmUwZTBlMDk5OTk5OTRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsImIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZCIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2UwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIsIjY3MDAxZmIyMTgyYmQ2NjA0ZGY0YTU4MmZkZGJjN2ZmZmZmZmUwZTBlMGJhYmFiYTg3ODc4NzRkNGQ0ZDFhMWExYSIpLm1hcChObSksZWI9JG0odGIpLG5iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcChObSkscmI9JG0obmIpLGliPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxY2Y2MCIsImQ3MTkxY2ZkYWU2MWE2ZDk2YTFhOTY0MSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmE2ZDk2YTFhOTY0MSIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2ZjOGQ1OWZlZTA4YmZmZmZiZmQ5ZWY4YjkxY2Y2MDFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmQ5ZWY4YmE2ZDk2YTY2YmQ2MzFhOTg1MDAwNjgzNyIpLm1hcChObSksYWI9JG0oaWIpLG9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjk5ZDU5NCIsImQ3MTkxY2ZkYWU2MWFiZGRhNDJiODNiYSIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZGRhNDJiODNiYSIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmZjOGQ1OWZlZTA4YmZmZmZiZmU2ZjU5ODk5ZDU5NDMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsImQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZCIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIsIjllMDE0MmQ1M2U0ZmY0NmQ0M2ZkYWU2MWZlZTA4YmZmZmZiZmU2ZjU5OGFiZGRhNDY2YzJhNTMyODhiZDVlNGZhMiIpLm1hcChObSksc2I9JG0ob2IpLGNiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksdWI9JG0oY2IpLGxiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZWNmNDllYmNkYTg4NTZhNyIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NDE5ZCIsImVkZjhmYmIzY2RlMzhjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjg4NTZhNzgxMGY3YyIsImVkZjhmYmJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDZlMDE2YiIsImY3ZmNmZGUwZWNmNGJmZDNlNjllYmNkYThjOTZjNjhjNmJiMTg4NDE5ZDgxMGY3YzRkMDA0YiIpLm1hcChObSksaGI9JG0obGIpLGZiPW5ldyBBcnJheSgzKS5jb25jYXQoImUwZjNkYmE4ZGRiNTQzYTJjYSIsImYwZjllOGJhZTRiYzdiY2NjNDJiOGNiZSIsImYwZjllOGJhZTRiYzdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDQzYTJjYTA4NjhhYyIsImYwZjllOGNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NTg5ZSIsImY3ZmNmMGUwZjNkYmNjZWJjNWE4ZGRiNTdiY2NjNDRlYjNkMzJiOGNiZTA4NjhhYzA4NDA4MSIpLm1hcChObSksZGI9JG0oZmIpLHBiPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcChObSkseWI9JG0ocGIpLGdiPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTJmMGE2YmRkYjFjOTA5OSIsImY2ZWZmN2JkYzllMTY3YTljZjAyODE4YSIsImY2ZWZmN2JkYzllMTY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjFjOTA5OTAxNmM1OSIsImY2ZWZmN2QwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNjQ1MCIsImZmZjdmYmVjZTJmMGQwZDFlNmE2YmRkYjY3YTljZjM2OTBjMDAyODE4YTAxNmM1OTAxNDYzNiIpLm1hcChObSksdmI9JG0oZ2IpLG1iPW5ldyBBcnJheSgzKS5jb25jYXQoImVjZTdmMmE2YmRkYjJiOGNiZSIsImYxZWVmNmJkYzllMTc0YTljZjA1NzBiMCIsImYxZWVmNmJkYzllMTc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjJiOGNiZTA0NWE4ZCIsImYxZWVmNmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDAzNGU3YiIsImZmZjdmYmVjZTdmMmQwZDFlNmE2YmRkYjc0YTljZjM2OTBjMDA1NzBiMDA0NWE4ZDAyMzg1OCIpLm1hcChObSksYmI9JG0obWIpLHhiPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcChObSksX2I9JG0oeGIpLGtiPW5ldyBBcnJheSgzKS5jb25jYXQoImZkZTBkZGZhOWZiNWM1MWI4YSIsImZlZWJlMmZiYjRiOWY3NjhhMWFlMDE3ZSIsImZlZWJlMmZiYjRiOWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWM1MWI4YTdhMDE3NyIsImZlZWJlMmZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NyIsImZmZjdmM2ZkZTBkZGZjYzVjMGZhOWZiNWY3NjhhMWRkMzQ5N2FlMDE3ZTdhMDE3NzQ5MDA2YSIpLm1hcChObSksd2I9JG0oa2IpLEViPW5ldyBBcnJheSgzKS5jb25jYXQoImVkZjhiMTdmY2RiYjJjN2ZiOCIsImZmZmZjY2ExZGFiNDQxYjZjNDIyNWVhOCIsImZmZmZjY2ExZGFiNDQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDJjN2ZiODI1MzQ5NCIsImZmZmZjY2M3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODBjMmM4NCIsImZmZmZkOWVkZjhiMWM3ZTliNDdmY2RiYjQxYjZjNDFkOTFjMDIyNWVhODI1MzQ5NDA4MWQ1OCIpLm1hcChObSksVGI9JG0oRWIpLENiPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcChObSksU2I9JG0oQ2IpLEFiPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZjdiY2ZlYzQ0ZmQ5NWYwZSIsImZmZmZkNGZlZDk4ZWZlOTkyOWNjNGMwMiIsImZmZmZkNGZlZDk4ZWZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWQ5NWYwZTk5MzQwNCIsImZmZmZkNGZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjhjMmQwNCIsImZmZmZlNWZmZjdiY2ZlZTM5MWZlYzQ0ZmZlOTkyOWVjNzAxNGNjNGMwMjk5MzQwNDY2MjUwNiIpLm1hcChObSksTWI9JG0oQWIpLE9iPW5ldyBBcnJheSgzKS5jb25jYXQoImZmZWRhMGZlYjI0Y2YwM2IyMCIsImZmZmZiMmZlY2M1Y2ZkOGQzY2UzMWExYyIsImZmZmZiMmZlY2M1Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2YwM2IyMGJkMDAyNiIsImZmZmZiMmZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2IxMDAyNiIsImZmZmZjY2ZmZWRhMGZlZDk3NmZlYjI0Y2ZkOGQzY2ZjNGUyYWUzMWExY2JkMDAyNjgwMDAyNiIpLm1hcChObSksQmI9JG0oT2IpLE5iPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChObSksRGI9JG0oTmIpLExiPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVlMGExZDk5YjMxYTM1NCIsImVkZjhlOWJhZTRiMzc0YzQ3NjIzOGI0NSIsImVkZjhlOWJhZTRiMzc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjMxYTM1NDAwNmQyYyIsImVkZjhlOWM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNWEzMiIsImY3ZmNmNWU1ZjVlMGM3ZTljMGExZDk5Yjc0YzQ3NjQxYWI1ZDIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcChObSksSWI9JG0oTGIpLFJiPW5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChObSksRmI9JG0oUmIpLFBiPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcChObSksamI9JG0oUGIpLFliPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChObSksemI9JG0oWWIpLFViPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZTZjZWZkYWU2YmU2NTUwZCIsImZlZWRkZWZkYmU4NWZkOGQzY2Q5NDcwMSIsImZlZWRkZWZkYmU4NWZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2U2NTUwZGE2MzYwMyIsImZlZWRkZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMThjMmQwNCIsImZmZjVlYmZlZTZjZWZkZDBhMmZkYWU2YmZkOGQzY2YxNjkxM2Q5NDgwMWE2MzYwMzdmMjcwNCIpLm1hcChObSksJGI9JG0oVWIpLHFiPWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtdCooMzUuMzQtdCooMjM4MS43My10Kig2NDAyLjctdCooNzAyNC43Mi0yNzEwLjU3KnQpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OSt0KigxNzAuNzMrdCooNTIuODItdCooMTMxLjQ2LXQqKDE3Ni41OC02Ny4zNyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrdCooNDQyLjM2LXQqKDI0ODIuNDMtdCooNjE2Ny4yNC10Kig2NjE0Ljk0LTI0NzUuNjcqdCkpKSkpKSkrIikifSxXYj1rcChPYSgzMDAsLjUsMCksT2EoLTI0MCwuNSwxKSksVmI9a3AoT2EoLTEwMCwuNzUsLjM1KSxPYSg4MCwxLjUsLjgpKSxIYj1rcChPYSgyNjAsLjc1LC4zNSksT2EoODAsMS41LC44KSksR2I9T2EoKSxYYj1mdW5jdGlvbih0KXsodDwwfHx0PjEpJiYodC09TWF0aC5mbG9vcih0KSk7dmFyIGU9TWF0aC5hYnModC0uNSk7cmV0dXJuIEdiLmg9MzYwKnQtMTAwLEdiLnM9MS41LTEuNSplLEdiLmw9LjgtLjkqZSxHYisiIn0sWmI9SGUoKSxRYj1NYXRoLlBJLzMsS2I9MipNYXRoLlBJLzMsSmI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHQ9KC41LXQpKk1hdGguUEksWmIucj0yNTUqKGU9TWF0aC5zaW4odCkpKmUsWmIuZz0yNTUqKGU9TWF0aC5zaW4odCtRYikpKmUsWmIuYj0yNTUqKGU9TWF0aC5zaW4odCtLYikpKmUsWmIrIiJ9LHR4PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzQuNjErdCooMTE3Mi4zMy10KigxMDc5My41Ni10KigzMzMwMC4xMi10KigzODM5NC40OS0xNDgyNS4wNSp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjMuMzErdCooNTU3LjMzK3QqKDEyMjUuMzMtdCooMzU3NC45Ni10KigxMDczLjc3KzcwNy41Nip0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMjcuMit0KigzMjExLjEtdCooMTUzMjcuOTctdCooMjc4MTQtdCooMjI1NjkuMTgtNjgzOC42Nip0KSkpKSkpKSsiKSJ9O2Z1bmN0aW9uIGV4KHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fXZhciBueD1leChObSgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLHJ4PWV4KE5tKCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMDkwMjAyMGIwMjAyMGQwMzAzMGYwMzAzMTIwNDA0MTQwNTA0MTYwNjA1MTgwNjA1MWEwNzA2MWMwODA3MWUwOTA3MjAwYTA4MjIwYjA5MjQwYzA5MjYwZDBhMjkwZTBiMmIxMDBiMmQxMTBjMmYxMjBkMzExMzBkMzQxNDBlMzYxNTBlMzgxNjBmM2IxODBmM2QxOTEwM2YxYTEwNDIxYzEwNDQxZDExNDcxZTExNDkyMDExNGIyMTExNGUyMjExNTAyNDEyNTMyNTEyNTUyNzEyNTgyOTExNWEyYTExNWMyYzExNWYyZDExNjEyZjExNjMzMTExNjUzMzEwNjczNDEwNjkzNjEwNmIzODEwNmMzOTBmNmUzYjBmNzAzZDBmNzEzZjBmNzI0MDBmNzQ0MjBmNzU0NDBmNzY0NTEwNzc0NzEwNzg0OTEwNzg0YTEwNzk0YzExN2E0ZTExN2I0ZjEyN2I1MTEyN2M1MjEzN2M1NDEzN2Q1NjE0N2Q1NzE1N2U1OTE1N2U1YTE2N2U1YzE2N2Y1ZDE3N2Y1ZjE4N2Y2MDE4ODA2MjE5ODA2NDFhODA2NTFhODA2NzFiODA2ODFjODE2YTFjODE2YjFkODE2ZDFkODE2ZTFlODE3MDFmODE3MjFmODE3MzIwODE3NTIxODE3NjIxODE3ODIyODE3OTIyODI3YjIzODI3YzIzODI3ZTI0ODI4MDI1ODI4MTI1ODE4MzI2ODE4NDI2ODE4NjI3ODE4ODI3ODE4OTI4ODE4YjI5ODE4YzI5ODE4ZTJhODE5MDJhODE5MTJiODE5MzJiODA5NDJjODA5NjJjODA5ODJkODA5OTJkODA5YjJlN2Y5YzJlN2Y5ZTJmN2ZhMDJmN2ZhMTMwN2VhMzMwN2VhNTMxN2VhNjMxN2RhODMyN2RhYTMzN2RhYjMzN2NhZDM0N2NhZTM0N2JiMDM1N2JiMjM1N2JiMzM2N2FiNTM2N2FiNzM3NzliODM3NzliYTM4NzhiYzM5NzhiZDM5NzdiZjNhNzdjMDNhNzZjMjNiNzVjNDNjNzVjNTNjNzRjNzNkNzNjODNlNzNjYTNlNzJjYzNmNzFjZDQwNzFjZjQwNzBkMDQxNmZkMjQyNmZkMzQzNmVkNTQ0NmRkNjQ1NmNkODQ1NmNkOTQ2NmJkYjQ3NmFkYzQ4NjlkZTQ5NjhkZjRhNjhlMDRjNjdlMjRkNjZlMzRlNjVlNDRmNjRlNTUwNjRlNzUyNjNlODUzNjJlOTU0NjJlYTU2NjFlYjU3NjBlYzU4NjBlZDVhNWZlZTViNWVlZjVkNWVmMDVmNWVmMTYwNWRmMjYyNWRmMjY0NWNmMzY1NWNmNDY3NWNmNDY5NWNmNTZiNWNmNjZjNWNmNjZlNWNmNzcwNWNmNzcyNWNmODc0NWNmODc2NWNmOTc4NWRmOTc5NWRmOTdiNWRmYTdkNWVmYTdmNWVmYTgxNWZmYjgzNWZmYjg1NjBmYjg3NjFmYzg5NjFmYzhhNjJmYzhjNjNmYzhlNjRmYzkwNjVmZDkyNjZmZDk0NjdmZDk2NjhmZDk4NjlmZDlhNmFmZDliNmJmZTlkNmNmZTlmNmRmZWExNmVmZWEzNmZmZWE1NzFmZWE3NzJmZWE5NzNmZWFhNzRmZWFjNzZmZWFlNzdmZWIwNzhmZWIyN2FmZWI0N2JmZWI2N2NmZWI3N2VmZWI5N2ZmZWJiODFmZWJkODJmZWJmODRmZWMxODVmZWMyODdmZWM0ODhmZWM2OGFmZWM4OGNmZWNhOGRmZWNjOGZmZWNkOTBmZWNmOTJmZWQxOTRmZWQzOTVmZWQ1OTdmZWQ3OTlmZWQ4OWFmZGRhOWNmZGRjOWVmZGRlYTBmZGUwYTFmZGUyYTNmZGUzYTVmZGU1YTdmZGU3YTlmZGU5YWFmZGViYWNmY2VjYWVmY2VlYjBmY2YwYjJmY2YyYjRmY2Y0YjZmY2Y2YjhmY2Y3YjlmY2Y5YmJmY2ZiYmRmY2ZkYmYiKSksaXg9ZXgoTm0oIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxheD1leChObSgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpLG94PWZ1bmN0aW9uKHQpe3JldHVybiBrZShuZSh0KS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfSxzeD0wO2Z1bmN0aW9uIGN4KCl7cmV0dXJuIG5ldyB1eH1mdW5jdGlvbiB1eCgpe3RoaXMuXz0iQCIrKCsrc3gpLnRvU3RyaW5nKDM2KX11eC5wcm90b3R5cGU9Y3gucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp1eCxnZXQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuXzshKGUgaW4gdCk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gdFtlXX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbdGhpcy5fXT1lfSxyZW1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuXyBpbiB0JiZkZWxldGUgdFt0aGlzLl9dfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgbHg9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P25ldyBiZShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBiZShbbnVsbD09dD9bXTp0XSxtZSl9LGh4PWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9TW4oKS50b3VjaGVzKTtmb3IodmFyIG49MCxyPWU/ZS5sZW5ndGg6MCxpPW5ldyBBcnJheShyKTtuPHI7KytuKWlbbl09T24odCxlW25dKTtyZXR1cm4gaX0sZng9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxkeD1NYXRoLmFicyxweD1NYXRoLmF0YW4yLHl4PU1hdGguY29zLGd4PU1hdGgubWF4LHZ4PU1hdGgubWluLG14PU1hdGguc2luLGJ4PU1hdGguc3FydCx4eD1NYXRoLlBJLF94PXh4LzIsa3g9Mip4eDtmdW5jdGlvbiB3eCh0KXtyZXR1cm4gdD4xPzA6dDwtMT94eDpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gRXgodCl7cmV0dXJuIHQ+PTE/X3g6dDw9LTE/LV94Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBUeCh0KXtyZXR1cm4gdC5pbm5lclJhZGl1c31mdW5jdGlvbiBDeCh0KXtyZXR1cm4gdC5vdXRlclJhZGl1c31mdW5jdGlvbiBTeCh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEF4KHQpe3JldHVybiB0LmVuZEFuZ2xlfWZ1bmN0aW9uIE14KHQpe3JldHVybiB0JiZ0LnBhZEFuZ2xlfWZ1bmN0aW9uIE94KHQsZSxuLHIsaSxhLG8scyl7dmFyIGM9bi10LHU9ci1lLGw9by1pLGg9cy1hLGY9aCpjLWwqdTtpZighKGYqZjwxZS0xMikpcmV0dXJuW3QrKGY9KGwqKGUtYSktaCoodC1pKSkvZikqYyxlK2YqdV19ZnVuY3Rpb24gQngodCxlLG4scixpLGEsbyl7dmFyIHM9dC1uLGM9ZS1yLHU9KG8/YTotYSkvYngocypzK2MqYyksbD11KmMsaD0tdSpzLGY9dCtsLGQ9ZStoLHA9bitsLHk9citoLGc9KGYrcCkvMix2PShkK3kpLzIsbT1wLWYsYj15LWQseD1tKm0rYipiLF89aS1hLGs9Zip5LXAqZCx3PShiPDA/LTE6MSkqYngoZ3goMCxfKl8qeC1rKmspKSxFPShrKmItbSp3KS94LFQ9KC1rKm0tYip3KS94LEM9KGsqYittKncpL3gsUz0oLWsqbStiKncpL3gsQT1FLWcsTT1ULXYsTz1DLWcsQj1TLXY7cmV0dXJuIEEqQStNKk0+TypPK0IqQiYmKEU9QyxUPVMpLHtjeDpFLGN5OlQseDAxOi1sLHkwMTotaCx4MTE6RSooaS9fLTEpLHkxMTpUKihpL18tMSl9fXZhciBOeD1mdW5jdGlvbigpe3ZhciB0PVR4LGU9Q3gsbj1meCgwKSxyPW51bGwsaT1TeCxhPUF4LG89TXgscz1udWxsO2Z1bmN0aW9uIGMoKXt2YXIgYyx1LGw9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktX3gsZD1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1feCxwPWR4KGQtZikseT1kPmY7aWYoc3x8KHM9Yz1VaSgpKSxoPGwmJih1PWgsaD1sLGw9dSksaD4xZS0xMilpZihwPmt4LTFlLTEyKXMubW92ZVRvKGgqeXgoZiksaCpteChmKSkscy5hcmMoMCwwLGgsZixkLCF5KSxsPjFlLTEyJiYocy5tb3ZlVG8obCp5eChkKSxsKm14KGQpKSxzLmFyYygwLDAsbCxkLGYseSkpO2Vsc2V7dmFyIGcsdixtPWYsYj1kLHg9ZixfPWQsaz1wLHc9cCxFPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLzIsVD1FPjFlLTEyJiYocj8rci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YngobCpsK2gqaCkpLEM9dngoZHgoaC1sKS8yLCtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksUz1DLEE9QztpZihUPjFlLTEyKXt2YXIgTT1FeChUL2wqbXgoRSkpLE89RXgoVC9oKm14KEUpKTsoay09MipNKT4xZS0xMj8oeCs9TSo9eT8xOi0xLF8tPU0pOihrPTAseD1fPShmK2QpLzIpLCh3LT0yKk8pPjFlLTEyPyhtKz1PKj15PzE6LTEsYi09Tyk6KHc9MCxtPWI9KGYrZCkvMil9dmFyIEI9aCp5eChtKSxOPWgqbXgobSksRD1sKnl4KF8pLEw9bCpteChfKTtpZihDPjFlLTEyKXt2YXIgSSxSPWgqeXgoYiksRj1oKm14KGIpLFA9bCp5eCh4KSxqPWwqbXgoeCk7aWYocDx4eCYmKEk9T3goQixOLFAsaixSLEYsRCxMKSkpe3ZhciBZPUItSVswXSx6PU4tSVsxXSxVPVItSVswXSwkPUYtSVsxXSxxPTEvbXgod3goKFkqVSt6KiQpLyhieChZKlkreip6KSpieChVKlUrJCokKSkpLzIpLFc9YngoSVswXSpJWzBdK0lbMV0qSVsxXSk7Uz12eChDLChsLVcpLyhxLTEpKSxBPXZ4KEMsKGgtVykvKHErMSkpfX13PjFlLTEyP0E+MWUtMTI/KGc9QngoUCxqLEIsTixoLEEseSksdj1CeChSLEYsRCxMLGgsQSx5KSxzLm1vdmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLEE8Qz9zLmFyYyhnLmN4LGcuY3ksQSxweChnLnkwMSxnLngwMSkscHgodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LEEscHgoZy55MDEsZy54MDEpLHB4KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGgscHgoZy5jeStnLnkxMSxnLmN4K2cueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLCF5KSxzLmFyYyh2LmN4LHYuY3ksQSxweCh2LnkxMSx2LngxMSkscHgodi55MDEsdi54MDEpLCF5KSkpOihzLm1vdmVUbyhCLE4pLHMuYXJjKDAsMCxoLG0sYiwheSkpOnMubW92ZVRvKEIsTiksbD4xZS0xMiYmaz4xZS0xMj9TPjFlLTEyPyhnPUJ4KEQsTCxSLEYsbCwtUyx5KSx2PUJ4KEIsTixQLGosbCwtUyx5KSxzLmxpbmVUbyhnLmN4K2cueDAxLGcuY3krZy55MDEpLFM8Qz9zLmFyYyhnLmN4LGcuY3ksUyxweChnLnkwMSxnLngwMSkscHgodi55MDEsdi54MDEpLCF5KToocy5hcmMoZy5jeCxnLmN5LFMscHgoZy55MDEsZy54MDEpLHB4KGcueTExLGcueDExKSwheSkscy5hcmMoMCwwLGwscHgoZy5jeStnLnkxMSxnLmN4K2cueDExKSxweCh2LmN5K3YueTExLHYuY3grdi54MTEpLHkpLHMuYXJjKHYuY3gsdi5jeSxTLHB4KHYueTExLHYueDExKSxweCh2LnkwMSx2LngwMSksIXkpKSk6cy5hcmMoMCwwLGwsXyx4LHkpOnMubGluZVRvKEQsTCl9ZWxzZSBzLm1vdmVUbygwLDApO2lmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGMuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgbj0oK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIscj0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIteHgvMjtyZXR1cm5beXgocikqbixteChyKSpuXX0sYy5pbm5lclJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KCtlKSxjKTp0fSxjLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOmV9LGMuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMucGFkUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTpyfSxjLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6aX0sYy5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxjKTphfSxjLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1udWxsPT10P251bGw6dCxjKTpzfSxjfTtmdW5jdGlvbiBEeCh0KXt0aGlzLl9jb250ZXh0PXR9RHgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEx4PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRHgodCl9O2Z1bmN0aW9uIEl4KHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFJ4KHQpe3JldHVybiB0WzFdfXZhciBGeD1mdW5jdGlvbigpe3ZhciB0PUl4LGU9Ungsbj1meCghMCkscj1udWxsLGk9THgsYT1udWxsO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGw9by5sZW5ndGgsaD0hMTtmb3IobnVsbD09ciYmKGE9aSh1PVVpKCkpKSxzPTA7czw9bDsrK3MpIShzPGwmJm4oYz1vW3NdLHMsbykpPT09aCYmKChoPSFoKT9hLmxpbmVTdGFydCgpOmEubGluZUVuZCgpKSxoJiZhLnBvaW50KCt0KGMscyxvKSwrZShjLHMsbykpO2lmKHUpcmV0dXJuIGE9bnVsbCx1KyIifHxudWxsfXJldHVybiBvLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksbyk6dH0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOmV9LG8uZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksbyk6bn0sby5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG51bGwhPXImJihhPWkocikpLG8pOml9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9yPWE9bnVsbDphPWkocj10KSxvKTpyfSxvfSxQeD1mdW5jdGlvbigpe3ZhciB0PUl4LGU9bnVsbCxuPWZ4KDApLHI9UngsaT1meCghMCksYT1udWxsLG89THgscz1udWxsO2Z1bmN0aW9uIGMoYyl7dmFyIHUsbCxoLGYsZCxwPWMubGVuZ3RoLHk9ITEsZz1uZXcgQXJyYXkocCksdj1uZXcgQXJyYXkocCk7Zm9yKG51bGw9PWEmJihzPW8oZD1VaSgpKSksdT0wO3U8PXA7Kyt1KXtpZighKHU8cCYmaShmPWNbdV0sdSxjKSk9PT15KWlmKHk9IXkpbD11LHMuYXJlYVN0YXJ0KCkscy5saW5lU3RhcnQoKTtlbHNle2ZvcihzLmxpbmVFbmQoKSxzLmxpbmVTdGFydCgpLGg9dS0xO2g+PWw7LS1oKXMucG9pbnQoZ1toXSx2W2hdKTtzLmxpbmVFbmQoKSxzLmFyZWFFbmQoKX15JiYoZ1t1XT0rdChmLHUsYyksdlt1XT0rbihmLHUsYykscy5wb2ludChlPytlKGYsdSxjKTpnW3VdLHI/K3IoZix1LGMpOnZbdV0pKX1pZihkKXJldHVybiBzPW51bGwsZCsiInx8bnVsbH1mdW5jdGlvbiB1KCl7cmV0dXJuIEZ4KCkuZGVmaW5lZChpKS5jdXJ2ZShvKS5jb250ZXh0KGEpfXJldHVybiBjLng9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjpmeCgrbiksZT1udWxsLGMpOnR9LGMueDA9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeCgrZSksYyk6dH0sYy54MT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksYyk6ZX0sYy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLHI9bnVsbCxjKTpufSxjLnkwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOm59LGMueTE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLGMpOnJ9LGMubGluZVgwPWMubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkobil9LGMubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KHQpLnkocil9LGMubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIHUoKS54KGUpLnkobil9LGMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCEhdCksYyk6aX0sYy5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10LG51bGwhPWEmJihzPW8oYSkpLGMpOm99LGMuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD9hPXM9bnVsbDpzPW8oYT10KSxjKTphfSxjfSxqeD1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sWXg9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHp4PWZ1bmN0aW9uKCl7dmFyIHQ9WXgsZT1qeCxuPW51bGwscj1meCgwKSxpPWZ4KGt4KSxhPWZ4KDApO2Z1bmN0aW9uIG8obyl7dmFyIHMsYyx1LGwsaCxmPW8ubGVuZ3RoLGQ9MCxwPW5ldyBBcnJheShmKSx5PW5ldyBBcnJheShmKSxnPStyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2PU1hdGgubWluKGt4LE1hdGgubWF4KC1reCxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSksbT1NYXRoLm1pbihNYXRoLmFicyh2KS9mLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPW0qKHY8MD8tMToxKTtmb3Iocz0wO3M8ZjsrK3MpKGg9eVtwW3NdPXNdPSt0KG9bc10scyxvKSk+MCYmKGQrPWgpO2ZvcihudWxsIT1lP3Auc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZSh5W3RdLHlbbl0pfSkpOm51bGwhPW4mJnAuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihvW3RdLG9bZV0pfSkpLHM9MCx1PWQ/KHYtZipiKS9kOjA7czxmOysrcyxnPWwpYz1wW3NdLGw9ZysoKGg9eVtjXSk+MD9oKnU6MCkrYix5W2NdPXtkYXRhOm9bY10saW5kZXg6cyx2YWx1ZTpoLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpsLHBhZEFuZ2xlOm19O3JldHVybiB5fXJldHVybiBvLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZngoK2UpLG8pOnR9LG8uc29ydFZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG49bnVsbCxvKTplfSxvLnNvcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlPW51bGwsbyk6bn0sby5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoK3QpLG8pOnJ9LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTphfSxvfSxVeD1xeChMeCk7ZnVuY3Rpb24gJHgodCl7dGhpcy5fY3VydmU9dH1mdW5jdGlvbiBxeCh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgJHgodChlKSl9cmV0dXJuIGUuX2N1cnZlPXQsZX1mdW5jdGlvbiBXeCh0KXt2YXIgZT10LmN1cnZlO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShxeCh0KSk6ZSgpLl9jdXJ2ZX0sdH0keC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFTdGFydCgpfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYUVuZCgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl9jdXJ2ZS5wb2ludChlKk1hdGguc2luKHQpLGUqLU1hdGguY29zKHQpKX19O3ZhciBWeD1mdW5jdGlvbigpe3JldHVybiBXeChGeCgpLmN1cnZlKFV4KSl9LEh4PWZ1bmN0aW9uKCl7dmFyIHQ9UHgoKS5jdXJ2ZShVeCksZT10LmN1cnZlLG49dC5saW5lWDAscj10LmxpbmVYMSxpPXQubGluZVkwLGE9dC5saW5lWTE7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5zdGFydEFuZ2xlPXQueDAsZGVsZXRlIHQueDAsdC5lbmRBbmdsZT10LngxLGRlbGV0ZSB0LngxLHQucmFkaXVzPXQueSxkZWxldGUgdC55LHQuaW5uZXJSYWRpdXM9dC55MCxkZWxldGUgdC55MCx0Lm91dGVyUmFkaXVzPXQueTEsZGVsZXRlIHQueTEsdC5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBXeChuKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gV3gocigpKX0sZGVsZXRlIHQubGluZVgxLHQubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFd4KGkoKSl9LGRlbGV0ZSB0LmxpbmVZMCx0LmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBXeChhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKHF4KHQpKTplKCkuX2N1cnZlfSx0fSxHeD1mdW5jdGlvbih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX0sWHg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIFp4KHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBReCh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gS3godCl7dmFyIGU9Wngsbj1ReCxyPUl4LGk9UngsYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPVh4LmNhbGwoYXJndW1lbnRzKSxjPWUuYXBwbHkodGhpcyxzKSx1PW4uYXBwbHkodGhpcyxzKTtpZihhfHwoYT1vPVVpKCkpLHQoYSwrci5hcHBseSh0aGlzLChzWzBdPWMscykpLCtpLmFwcGx5KHRoaXMscyksK3IuYXBwbHkodGhpcywoc1swXT11LHMpKSwraS5hcHBseSh0aGlzLHMpKSxvKXJldHVybiBhPW51bGwsbysiInx8bnVsbH1yZXR1cm4gby5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxvKTplfSxvLnRhcmdldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8ueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ4KCt0KSxvKTpyfSxvLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksbyk6aX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99ZnVuY3Rpb24gSngodCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlPShlK3IpLzIsbixlLGkscixpKX1mdW5jdGlvbiB0Xyh0LGUsbixyLGkpe3QubW92ZVRvKGUsbiksdC5iZXppZXJDdXJ2ZVRvKGUsbj0obitpKS8yLHIsbixyLGkpfWZ1bmN0aW9uIGVfKHQsZSxuLHIsaSl7dmFyIGE9R3goZSxuKSxvPUd4KGUsbj0obitpKS8yKSxzPUd4KHIsbiksYz1HeChyLGkpO3QubW92ZVRvKGFbMF0sYVsxXSksdC5iZXppZXJDdXJ2ZVRvKG9bMF0sb1sxXSxzWzBdLHNbMV0sY1swXSxjWzFdKX1mdW5jdGlvbiBuXygpe3JldHVybiBLeChKeCl9ZnVuY3Rpb24gcl8oKXtyZXR1cm4gS3godF8pfWZ1bmN0aW9uIGlfKCl7dmFyIHQ9S3goZV8pO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQucmFkaXVzPXQueSxkZWxldGUgdC55LHR9dmFyIGFfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUveHgpO3QubW92ZVRvKG4sMCksdC5hcmMoMCwwLG4sMCxreCl9fSxvXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqbiwtbiksdC5saW5lVG8oLW4sLW4pLHQubGluZVRvKC1uLC0zKm4pLHQubGluZVRvKG4sLTMqbiksdC5saW5lVG8obiwtbiksdC5saW5lVG8oMypuLC1uKSx0LmxpbmVUbygzKm4sbiksdC5saW5lVG8obixuKSx0LmxpbmVUbyhuLDMqbiksdC5saW5lVG8oLW4sMypuKSx0LmxpbmVUbygtbixuKSx0LmxpbmVUbygtMypuLG4pLHQuY2xvc2VQYXRoKCl9fSxzXz1NYXRoLnNxcnQoMS8zKSxjXz0yKnNfLHVfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvY18pLHI9bipzXzt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLDApLHQubGluZVRvKDAsbiksdC5saW5lVG8oLXIsMCksdC5jbG9zZVBhdGgoKX19LGxfPU1hdGguc2luKHh4LzEwKS9NYXRoLnNpbig3Knh4LzEwKSxoXz1NYXRoLnNpbihreC8xMCkqbF8sZl89LU1hdGguY29zKGt4LzEwKSpsXyxkXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydCguODkwODEzMDkxNTI5Mjg1MiplKSxyPWhfKm4saT1mXypuO3QubW92ZVRvKDAsLW4pLHQubGluZVRvKHIsaSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89a3gqYS81LHM9TWF0aC5jb3MobyksYz1NYXRoLnNpbihvKTt0LmxpbmVUbyhjKm4sLXMqbiksdC5saW5lVG8ocypyLWMqaSxjKnIrcyppKX10LmNsb3NlUGF0aCgpfX0scF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZSkscj0tbi8yO3QucmVjdChyLHIsbixuKX19LHlfPU1hdGguc3FydCgzKSxnXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPS1NYXRoLnNxcnQoZS8oMyp5XykpO3QubW92ZVRvKDAsMipuKSx0LmxpbmVUbygteV8qbiwtbiksdC5saW5lVG8oeV8qbiwtbiksdC5jbG9zZVBhdGgoKX19LHZfPU1hdGguc3FydCgzKS8yLG1fPTEvTWF0aC5zcXJ0KDEyKSxiXz0zKihtXy8yKzEpLHhfPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUvYl8pLHI9bi8yLGk9biptXyxhPXIsbz1uKm1fK24scz0tYSxjPW87dC5tb3ZlVG8ocixpKSx0LmxpbmVUbyhhLG8pLHQubGluZVRvKHMsYyksdC5saW5lVG8oLS41KnItdl8qaSx2XypyKy0uNSppKSx0LmxpbmVUbygtLjUqYS12XypvLHZfKmErLS41Km8pLHQubGluZVRvKC0uNSpzLXZfKmMsdl8qcystLjUqYyksdC5saW5lVG8oLS41KnIrdl8qaSwtLjUqaS12XypyKSx0LmxpbmVUbygtLjUqYSt2XypvLC0uNSpvLXZfKmEpLHQubGluZVRvKC0uNSpzK3ZfKmMsLS41KmMtdl8qcyksdC5jbG9zZVBhdGgoKX19LF9fPVthXyxvXyx1XyxwXyxkXyxnXyx4X10sa189ZnVuY3Rpb24oKXt2YXIgdD1meChhXyksZT1meCg2NCksbj1udWxsO2Z1bmN0aW9uIHIoKXt2YXIgcjtpZihufHwobj1yPVVpKCkpLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLmRyYXcobiwrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHIpcmV0dXJuIG49bnVsbCxyKyIifHxudWxsfXJldHVybiByLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpmeChlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCkscik6ZX0sci5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDp0LHIpOm59LHJ9LHdfPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBFXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKnQuX3gwK3QuX3gxKS8zLCgyKnQuX3kwK3QuX3kxKS8zLCh0Ll94MCsyKnQuX3gxKS8zLCh0Ll95MCsyKnQuX3kxKS8zLCh0Ll94MCs0KnQuX3gxK2UpLzYsKHQuX3kwKzQqdC5feTErbikvNil9ZnVuY3Rpb24gVF8odCl7dGhpcy5fY29udGV4dD10fVRfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDM6RV8odGhpcyx0aGlzLl94MSx0aGlzLl95MSk7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fY29udGV4dC5saW5lVG8oKDUqdGhpcy5feDArdGhpcy5feDEpLzYsKDUqdGhpcy5feTArdGhpcy5feTEpLzYpO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBDXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRfKHQpfTtmdW5jdGlvbiBTXyh0KXt0aGlzLl9jb250ZXh0PXR9U18ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpLHRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj10LHRoaXMuX3kyPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MSt0KS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzYpO2JyZWFrO2RlZmF1bHQ6RV8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBBXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFNfKHQpfTtmdW5jdGlvbiBNXyh0KXt0aGlzLl9jb250ZXh0PXR9TV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIG49KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixyPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLHIpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4scik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpFXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX07dmFyIE9fPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTV8odCl9O2Z1bmN0aW9uIEJfKHQsZSl7dGhpcy5fYmFzaXM9bmV3IFRfKHQpLHRoaXMuX2JldGE9ZX1CXy5wcm90b3R5cGU9e2xpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9W10sdGhpcy5feT1bXSx0aGlzLl9iYXNpcy5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3gsZT10aGlzLl95LG49dC5sZW5ndGgtMTtpZihuPjApZm9yKHZhciByLGk9dFswXSxhPWVbMF0sbz10W25dLWkscz1lW25dLWEsYz0tMTsrK2M8PW47KXI9Yy9uLHRoaXMuX2Jhc2lzLnBvaW50KHRoaXMuX2JldGEqdFtjXSsoMS10aGlzLl9iZXRhKSooaStyKm8pLHRoaXMuX2JldGEqZVtjXSsoMS10aGlzLl9iZXRhKSooYStyKnMpKTt0aGlzLl94PXRoaXMuX3k9bnVsbCx0aGlzLl9iYXNpcy5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIE5fPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gMT09PWU/bmV3IFRfKHQpOm5ldyBCXyh0LGUpfXJldHVybiBuLmJldGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguODUpO2Z1bmN0aW9uIERfKHQsZSxuKXt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8odC5feDErdC5fayoodC5feDItdC5feDApLHQuX3kxK3QuX2sqKHQuX3kyLXQuX3kwKSx0Ll94Mit0Ll9rKih0Ll94MS1lKSx0Ll95Mit0Ll9rKih0Ll95MS1uKSx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gTF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fUxfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpEXyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9dCx0aGlzLl95MT1lO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6RF8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBJXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIG5ldyBMXyh0LGUpfXJldHVybiBuLnRlbnNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSgwKTtmdW5jdGlvbiBSXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9rPSgxLWUpLzZ9Ul8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND10LHRoaXMuX3k0PWUpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PXQsdGhpcy5feTU9ZTticmVhaztkZWZhdWx0OkRfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgRl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgUl8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gUF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fVBfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkRfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgal89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgUF8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gWV8odCxlLG4pe3ZhciByPXQuX3gxLGk9dC5feTEsYT10Ll94MixvPXQuX3kyO2lmKHQuX2wwMV9hPjFlLTEyKXt2YXIgcz0yKnQuX2wwMV8yYSszKnQuX2wwMV9hKnQuX2wxMl9hK3QuX2wxMl8yYSxjPTMqdC5fbDAxX2EqKHQuX2wwMV9hK3QuX2wxMl9hKTtyPShyKnMtdC5feDAqdC5fbDEyXzJhK3QuX3gyKnQuX2wwMV8yYSkvYyxpPShpKnMtdC5feTAqdC5fbDEyXzJhK3QuX3kyKnQuX2wwMV8yYSkvY31pZih0Ll9sMjNfYT4xZS0xMil7dmFyIHU9Mip0Ll9sMjNfMmErMyp0Ll9sMjNfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wyM19hKih0Ll9sMjNfYSt0Ll9sMTJfYSk7YT0oYSp1K3QuX3gxKnQuX2wyM18yYS1lKnQuX2wxMl8yYSkvbCxvPShvKnUrdC5feTEqdC5fbDIzXzJhLW4qdC5fbDEyXzJhKS9sfXQuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyLGksYSxvLHQuX3gyLHQuX3kyKX1mdW5jdGlvbiB6Xyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfXpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyB6Xyh0LGUpOm5ldyBMXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uICRfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9JF8ucHJvdG90eXBlPXthcmVhU3RhcnQ6d18sYXJlYUVuZDp3XyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSl9fSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9ZX19O3ZhciBxXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGU/bmV3ICRfKHQsZSk6bmV3IFJfKHQsMCl9cmV0dXJuIG4uYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoK2UpfSxufSguNSk7ZnVuY3Rpb24gV18odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1XXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6WV8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVl89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBXXyh0LGUpOm5ldyBQXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIEhfKHQpe3RoaXMuX2NvbnRleHQ9dH1IXy5wcm90b3R5cGU9e2FyZWFTdGFydDp3XyxhcmVhRW5kOndfLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19O3ZhciBHXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEhfKHQpfTtmdW5jdGlvbiBYXyh0KXtyZXR1cm4gdDwwPy0xOjF9ZnVuY3Rpb24gWl8odCxlLG4pe3ZhciByPXQuX3gxLXQuX3gwLGk9ZS10Ll94MSxhPSh0Ll95MS10Ll95MCkvKHJ8fGk8MCYmLTApLG89KG4tdC5feTEpLyhpfHxyPDAmJi0wKSxzPShhKmkrbypyKS8ocitpKTtyZXR1cm4oWF8oYSkrWF8obykpKk1hdGgubWluKE1hdGguYWJzKGEpLE1hdGguYWJzKG8pLC41Kk1hdGguYWJzKHMpKXx8MH1mdW5jdGlvbiBRXyh0LGUpe3ZhciBuPXQuX3gxLXQuX3gwO3JldHVybiBuPygzKih0Ll95MS10Ll95MCkvbi1lKS8yOmV9ZnVuY3Rpb24gS18odCxlLG4pe3ZhciByPXQuX3gwLGk9dC5feTAsYT10Ll94MSxvPXQuX3kxLHM9KGEtcikvMzt0Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocitzLGkrcyplLGEtcyxvLXMqbixhLG8pfWZ1bmN0aW9uIEpfKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiB0ayh0KXt0aGlzLl9jb250ZXh0PW5ldyBlayh0KX1mdW5jdGlvbiBlayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gbmsodCl7cmV0dXJuIG5ldyBKXyh0KX1mdW5jdGlvbiByayh0KXtyZXR1cm4gbmV3IHRrKHQpfWZ1bmN0aW9uIGlrKHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBhayh0KXt2YXIgZSxuLHI9dC5sZW5ndGgtMSxpPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPHItMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtyLTFdPTIsYVtyLTFdPTcsb1tyLTFdPTgqdFtyLTFdK3Rbcl0sZT0xO2U8cjsrK2Upbj1pW2VdL2FbZS0xXSxhW2VdLT1uLG9bZV0tPW4qb1tlLTFdO2ZvcihpW3ItMV09b1tyLTFdL2Fbci0xXSxlPXItMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtyLTFdPSh0W3JdK2lbci0xXSkvMixlPTA7ZTxyLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfUpfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpLXyh0aGlzLHRoaXMuX3QwLFFfKHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIG49TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxLXyh0aGlzLFFfKHRoaXMsbj1aXyh0aGlzLHQsZSkpLG4pO2JyZWFrO2RlZmF1bHQ6S18odGhpcyx0aGlzLl90MCxuPVpfKHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPW59fX0sKHRrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEpfLnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7Sl8ucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxlay5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQscixuLGEsaSl9fSxpay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoO2lmKG4paWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PW4pdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgcj1hayh0KSxpPWFrKGUpLGE9MCxvPTE7bzxuOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHJbMF1bYV0saVswXVthXSxyWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1uKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fTt2YXIgb2s9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpayh0KX07ZnVuY3Rpb24gc2sodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fdD1lfXNrLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3g9dGhpcy5feT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpezA8dGhpcy5fdCYmdGhpcy5fdDwxJiYyPT09dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdGhpcy5feSksKHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU+PTAmJih0aGlzLl90PTEtdGhpcy5fdCx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDppZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsZSksdGhpcy5fY29udGV4dC5saW5lVG8odCxlKTtlbHNle3ZhciBuPXRoaXMuX3gqKDEtdGhpcy5fdCkrdCp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKG4sdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8obixlKX19dGhpcy5feD10LHRoaXMuX3k9ZX19O3ZhciBjaz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHNrKHQsLjUpfTtmdW5jdGlvbiB1ayh0KXtyZXR1cm4gbmV3IHNrKHQsMCl9ZnVuY3Rpb24gbGsodCl7cmV0dXJuIG5ldyBzayh0LDEpfXZhciBoaz1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgbixyLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKHI9byxvPXRbZVthXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihyW25dWzFdKT9yW25dWzBdOnJbbl1bMV19LGZrPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxuPW5ldyBBcnJheShlKTstLWU+PTA7KW5bZV09ZTtyZXR1cm4gbn07ZnVuY3Rpb24gZGsodCxlKXtyZXR1cm4gdFtlXX12YXIgcGs9ZnVuY3Rpb24oKXt2YXIgdD1meChbXSksZT1mayxuPWhrLHI9ZGs7ZnVuY3Rpb24gaShpKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz1pLmxlbmd0aCx1PXMubGVuZ3RoLGw9bmV3IEFycmF5KHUpO2ZvcihhPTA7YTx1OysrYSl7Zm9yKHZhciBoLGY9c1thXSxkPWxbYV09bmV3IEFycmF5KGMpLHA9MDtwPGM7KytwKWRbcF09aD1bMCwrcihpW3BdLGYscCxpKV0saC5kYXRhPWlbcF07ZC5rZXk9Zn1mb3IoYT0wLG89ZShsKTthPHU7KythKWxbb1thXV0uaW5kZXg9YTtyZXR1cm4gbihsLG8pLGx9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ4KFh4LmNhbGwoZSkpLGkpOnR9LGkudmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmeCgrdCksaSk6cn0saS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P2ZrOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZngoWHguY2FsbCh0KSksaSk6ZX0saS5vZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9oazp0LGkpOm59LGl9LHlrPWZ1bmN0aW9uKHQsZSl7aWYoKHI9dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89dFswXS5sZW5ndGg7YTxvOysrYSl7Zm9yKGk9bj0wO248cjsrK24paSs9dFtuXVthXVsxXXx8MDtpZihpKWZvcihuPTA7bjxyOysrbil0W25dW2FdWzFdLz1pfWhrKHQsZSl9fSxnaz1mdW5jdGlvbih0LGUpe2lmKChzPXQubGVuZ3RoKT4wKWZvcih2YXIgbixyLGksYSxvLHMsYz0wLHU9dFtlWzBdXS5sZW5ndGg7Yzx1OysrYylmb3IoYT1vPTAsbj0wO248czsrK24pKGk9KHI9dFtlW25dXVtjXSlbMV0tclswXSk+MD8oclswXT1hLHJbMV09YSs9aSk6aTwwPyhyWzFdPW8sclswXT1vKz1pKTooclswXT0wLHJbMV09aSl9LHZrPWZ1bmN0aW9uKHQsZSl7aWYoKG49dC5sZW5ndGgpPjApe2Zvcih2YXIgbixyPTAsaT10W2VbMF1dLGE9aS5sZW5ndGg7cjxhOysrcil7Zm9yKHZhciBvPTAscz0wO288bjsrK28pcys9dFtvXVtyXVsxXXx8MDtpW3JdWzFdKz1pW3JdWzBdPS1zLzJ9aGsodCxlKX19LG1rPWZ1bmN0aW9uKHQsZSl7aWYoKGk9dC5sZW5ndGgpPjAmJihyPShuPXRbZVswXV0pLmxlbmd0aCk+MCl7Zm9yKHZhciBuLHIsaSxhPTAsbz0xO288cjsrK28pe2Zvcih2YXIgcz0wLGM9MCx1PTA7czxpOysrcyl7Zm9yKHZhciBsPXRbZVtzXV0saD1sW29dWzFdfHwwLGY9KGgtKGxbby0xXVsxXXx8MCkpLzIsZD0wO2Q8czsrK2Qpe3ZhciBwPXRbZVtkXV07Zis9KHBbb11bMV18fDApLShwW28tMV1bMV18fDApfWMrPWgsdSs9ZipofW5bby0xXVsxXSs9bltvLTFdWzBdPWEsYyYmKGEtPXUvYyl9bltvLTFdWzFdKz1uW28tMV1bMF09YSxoayh0LGUpfX0sYms9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoeGspO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIHhrKHQpe2Zvcih2YXIgZSxuPS0xLHI9MCxpPXQubGVuZ3RoLGE9LTEvMDsrK248aTspKGU9K3Rbbl1bMV0pPmEmJihhPWUscj1uKTtyZXR1cm4gcn12YXIgX2s9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXAoa2spO3JldHVybiBmayh0KS5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlW3RdLWVbbl19KSl9O2Z1bmN0aW9uIGtrKHQpe2Zvcih2YXIgZSxuPTAscj0tMSxpPXQubGVuZ3RoOysrcjxpOykoZT0rdFtyXVsxXSkmJihuKz1lKTtyZXR1cm4gbn12YXIgd2s9ZnVuY3Rpb24odCl7cmV0dXJuIF9rKHQpLnJldmVyc2UoKX0sRWs9ZnVuY3Rpb24odCl7dmFyIGUsbixyPXQubGVuZ3RoLGk9dC5tYXAoa2spLGE9YmsodCksbz0wLHM9MCxjPVtdLHU9W107Zm9yKGU9MDtlPHI7KytlKW49YVtlXSxvPHM/KG8rPWlbbl0sYy5wdXNoKG4pKToocys9aVtuXSx1LnB1c2gobikpO3JldHVybiB1LnJldmVyc2UoKS5jb25jYXQoYyl9LFRrPWZ1bmN0aW9uKHQpe3JldHVybiBmayh0KS5yZXZlcnNlKCl9O3ZhciBDaz1EYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZz9mdW5jdGlvbih0KXtyZXR1cm4gdC50b0lTT1N0cmluZygpfTpxZygiJVktJW0tJWRUJUg6JU06JVMuJUxaIik7dmFyIFNrPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGUodCk7cmV0dXJuIGlzTmFOKGUpP251bGw6ZX06V2coIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpLEFrPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgJG4saT1lO3JldHVybiBudWxsPT1lPyhyLnJlc3RhcnQodCxlLG4pLHIpOihlPStlLG49bnVsbD09bj96bigpOituLHIucmVzdGFydCgoZnVuY3Rpb24gYShvKXtvKz1pLHIucmVzdGFydChhLGkrPWUsbiksdChvKX0pLGUsbikscil9LE1rPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gT2sodCl7cmV0dXJuIHRbMF19ZnVuY3Rpb24gQmsodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gTmsoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBEayh0KXt0LlU9dC5DPXQuTD10LlI9dC5QPXQuTj1udWxsfWZ1bmN0aW9uIExrKHQsZSl7dmFyIG49ZSxyPWUuUixpPW4uVTtpP2kuTD09PW4/aS5MPXI6aS5SPXI6dC5fPXIsci5VPWksbi5VPXIsbi5SPXIuTCxuLlImJihuLlIuVT1uKSxyLkw9bn1mdW5jdGlvbiBJayh0LGUpe3ZhciBuPWUscj1lLkwsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uTD1yLlIsbi5MJiYobi5MLlU9biksci5SPW59ZnVuY3Rpb24gUmsodCl7Zm9yKDt0Lkw7KXQ9dC5MO3JldHVybiB0fU5rLnByb3RvdHlwZT17Y29uc3RydWN0b3I6TmssaW5zZXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHQpe2lmKGUuUD10LGUuTj10Lk4sdC5OJiYodC5OLlA9ZSksdC5OPWUsdC5SKXtmb3IodD10LlI7dC5MOyl0PXQuTDt0Lkw9ZX1lbHNlIHQuUj1lO249dH1lbHNlIHRoaXMuXz8odD1Sayh0aGlzLl8pLGUuUD1udWxsLGUuTj10LHQuUD10Lkw9ZSxuPXQpOihlLlA9ZS5OPW51bGwsdGhpcy5fPWUsbj1udWxsKTtmb3IoZS5MPWUuUj1udWxsLGUuVT1uLGUuQz0hMCx0PWU7biYmbi5DOyluPT09KHI9bi5VKS5MPyhpPXIuUikmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uUiYmKExrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLElrKHRoaXMscikpOihpPXIuTCkmJmkuQz8obi5DPWkuQz0hMSxyLkM9ITAsdD1yKToodD09PW4uTCYmKElrKHRoaXMsbiksbj0odD1uKS5VKSxuLkM9ITEsci5DPSEwLExrKHRoaXMscikpLG49dC5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24odCl7dC5OJiYodC5OLlA9dC5QKSx0LlAmJih0LlAuTj10Lk4pLHQuTj10LlA9bnVsbDt2YXIgZSxuLHIsaT10LlUsYT10Lkwsbz10LlI7aWYobj1hP28/Umsobyk6YTpvLGk/aS5MPT09dD9pLkw9bjppLlI9bjp0aGlzLl89bixhJiZvPyhyPW4uQyxuLkM9dC5DLG4uTD1hLGEuVT1uLG4hPT1vPyhpPW4uVSxuLlU9dC5VLHQ9bi5SLGkuTD10LG4uUj1vLG8uVT1uKToobi5VPWksaT1uLHQ9bi5SKSk6KHI9dC5DLHQ9biksdCYmKHQuVT1pKSwhcilpZih0JiZ0LkMpdC5DPSExO2Vsc2V7ZG97aWYodD09PXRoaXMuXylicmVhaztpZih0PT09aS5MKXtpZigoZT1pLlIpLkMmJihlLkM9ITEsaS5DPSEwLExrKHRoaXMsaSksZT1pLlIpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuUiYmZS5SLkN8fChlLkwuQz0hMSxlLkM9ITAsSWsodGhpcyxlKSxlPWkuUiksZS5DPWkuQyxpLkM9ZS5SLkM9ITEsTGsodGhpcyxpKSx0PXRoaXMuXzticmVha319ZWxzZSBpZigoZT1pLkwpLkMmJihlLkM9ITEsaS5DPSEwLElrKHRoaXMsaSksZT1pLkwpLGUuTCYmZS5MLkN8fGUuUiYmZS5SLkMpe2UuTCYmZS5MLkN8fChlLlIuQz0hMSxlLkM9ITAsTGsodGhpcyxlKSxlPWkuTCksZS5DPWkuQyxpLkM9ZS5MLkM9ITEsSWsodGhpcyxpKSx0PXRoaXMuXzticmVha31lLkM9ITAsdD1pLGk9aS5VfXdoaWxlKCF0LkMpO3QmJih0LkM9ITEpfX19O3ZhciBGaz1OaztmdW5jdGlvbiBQayh0LGUsbixyKXt2YXIgaT1bbnVsbCxudWxsXSxhPWN3LnB1c2goaSktMTtyZXR1cm4gaS5sZWZ0PXQsaS5yaWdodD1lLG4mJllrKGksdCxlLG4pLHImJllrKGksZSx0LHIpLG93W3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLG93W2UuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKGEpLGl9ZnVuY3Rpb24gamsodCxlLG4pe3ZhciByPVtlLG5dO3JldHVybiByLmxlZnQ9dCxyfWZ1bmN0aW9uIFlrKHQsZSxuLHIpe3RbMF18fHRbMV0/dC5sZWZ0PT09bj90WzFdPXI6dFswXT1yOih0WzBdPXIsdC5sZWZ0PWUsdC5yaWdodD1uKX1mdW5jdGlvbiB6ayh0LGUsbixyLGkpe3ZhciBhLG89dFswXSxzPXRbMV0sYz1vWzBdLHU9b1sxXSxsPTAsaD0xLGY9c1swXS1jLGQ9c1sxXS11O2lmKGE9ZS1jLGZ8fCEoYT4wKSl7aWYoYS89ZixmPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGY+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9ci1jLGZ8fCEoYTwwKSl7aWYoYS89ZixmPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGY+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfWlmKGE9bi11LGR8fCEoYT4wKSl7aWYoYS89ZCxkPDApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1lbHNlIGlmKGQ+MCl7aWYoYT5oKXJldHVybjthPmwmJihsPWEpfWlmKGE9aS11LGR8fCEoYTwwKSl7aWYoYS89ZCxkPDApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1lbHNlIGlmKGQ+MCl7aWYoYTxsKXJldHVybjthPGgmJihoPWEpfXJldHVybiEobD4wfHxoPDEpfHwobD4wJiYodFswXT1bYytsKmYsdStsKmRdKSxoPDEmJih0WzFdPVtjK2gqZix1K2gqZF0pLCEwKX19fX19ZnVuY3Rpb24gVWsodCxlLG4scixpKXt2YXIgYT10WzFdO2lmKGEpcmV0dXJuITA7dmFyIG8scyxjPXRbMF0sdT10LmxlZnQsbD10LnJpZ2h0LGg9dVswXSxmPXVbMV0sZD1sWzBdLHA9bFsxXSx5PShoK2QpLzIsZz0oZitwKS8yO2lmKHA9PT1mKXtpZih5PGV8fHk+PXIpcmV0dXJuO2lmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVt5LG5dO2E9W3ksaV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1beSxpXTthPVt5LG5dfX1lbHNlIGlmKHM9Zy0obz0oaC1kKS8ocC1mKSkqeSxvPC0xfHxvPjEpaWYoaD5kKXtpZihjKXtpZihjWzFdPj1pKXJldHVybn1lbHNlIGM9WyhuLXMpL28sbl07YT1bKGktcykvbyxpXX1lbHNle2lmKGMpe2lmKGNbMV08bilyZXR1cm59ZWxzZSBjPVsoaS1zKS9vLGldO2E9WyhuLXMpL28sbl19ZWxzZSBpZihmPHApe2lmKGMpe2lmKGNbMF0+PXIpcmV0dXJufWVsc2UgYz1bZSxvKmUrc107YT1bcixvKnIrc119ZWxzZXtpZihjKXtpZihjWzBdPGUpcmV0dXJufWVsc2UgYz1bcixvKnIrc107YT1bZSxvKmUrc119cmV0dXJuIHRbMF09Yyx0WzFdPWEsITB9ZnVuY3Rpb24gJGsodCxlKXt2YXIgbj10LnNpdGUscj1lLmxlZnQsaT1lLnJpZ2h0O3JldHVybiBuPT09aSYmKGk9cixyPW4pLGk/TWF0aC5hdGFuMihpWzFdLXJbMV0saVswXS1yWzBdKToobj09PXI/KHI9ZVsxXSxpPWVbMF0pOihyPWVbMF0saT1lWzFdKSxNYXRoLmF0YW4yKHJbMF0taVswXSxpWzFdLXJbMV0pKX1mdW5jdGlvbiBxayh0LGUpe3JldHVybiBlWysoZS5sZWZ0IT09dC5zaXRlKV19ZnVuY3Rpb24gV2sodCxlKXtyZXR1cm4gZVsrKGUubGVmdD09PXQuc2l0ZSldfXZhciBWayxIaz1bXTtmdW5jdGlvbiBHaygpe0RrKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBYayh0KXt2YXIgZT10LlAsbj10Lk47aWYoZSYmbil7dmFyIHI9ZS5zaXRlLGk9dC5zaXRlLGE9bi5zaXRlO2lmKHIhPT1hKXt2YXIgbz1pWzBdLHM9aVsxXSxjPXJbMF0tbyx1PXJbMV0tcyxsPWFbMF0tbyxoPWFbMV0tcyxmPTIqKGMqaC11KmwpO2lmKCEoZj49LWx3KSl7dmFyIGQ9YypjK3UqdSxwPWwqbCtoKmgseT0oaCpkLXUqcCkvZixnPShjKnAtbCpkKS9mLHY9SGsucG9wKCl8fG5ldyBHazt2LmFyYz10LHYuc2l0ZT1pLHYueD15K28sdi55PSh2LmN5PWcrcykrTWF0aC5zcXJ0KHkqeStnKmcpLHQuY2lyY2xlPXY7Zm9yKHZhciBtPW51bGwsYj1zdy5fO2I7KWlmKHYueTxiLnl8fHYueT09PWIueSYmdi54PD1iLngpe2lmKCFiLkwpe209Yi5QO2JyZWFrfWI9Yi5MfWVsc2V7aWYoIWIuUil7bT1iO2JyZWFrfWI9Yi5SfXN3Lmluc2VydChtLHYpLG18fChWaz12KX19fX1mdW5jdGlvbiBaayh0KXt2YXIgZT10LmNpcmNsZTtlJiYoZS5QfHwoVms9ZS5OKSxzdy5yZW1vdmUoZSksSGsucHVzaChlKSxEayhlKSx0LmNpcmNsZT1udWxsKX12YXIgUWs9W107ZnVuY3Rpb24gS2soKXtEayh0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gSmsodCl7dmFyIGU9UWsucG9wKCl8fG5ldyBLaztyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiB0dyh0KXtaayh0KSxhdy5yZW1vdmUodCksUWsucHVzaCh0KSxEayh0KX1mdW5jdGlvbiBldyh0KXt2YXIgZT10LmNpcmNsZSxuPWUueCxyPWUuY3ksaT1bbixyXSxhPXQuUCxvPXQuTixzPVt0XTt0dyh0KTtmb3IodmFyIGM9YTtjLmNpcmNsZSYmTWF0aC5hYnMobi1jLmNpcmNsZS54KTx1dyYmTWF0aC5hYnMoci1jLmNpcmNsZS5jeSk8dXc7KWE9Yy5QLHMudW5zaGlmdChjKSx0dyhjKSxjPWE7cy51bnNoaWZ0KGMpLFprKGMpO2Zvcih2YXIgdT1vO3UuY2lyY2xlJiZNYXRoLmFicyhuLXUuY2lyY2xlLngpPHV3JiZNYXRoLmFicyhyLXUuY2lyY2xlLmN5KTx1dzspbz11Lk4scy5wdXNoKHUpLHR3KHUpLHU9bztzLnB1c2godSksWmsodSk7dmFyIGwsaD1zLmxlbmd0aDtmb3IobD0xO2w8aDsrK2wpdT1zW2xdLGM9c1tsLTFdLFlrKHUuZWRnZSxjLnNpdGUsdS5zaXRlLGkpO2M9c1swXSwodT1zW2gtMV0pLmVkZ2U9UGsoYy5zaXRlLHUuc2l0ZSxudWxsLGkpLFhrKGMpLFhrKHUpfWZ1bmN0aW9uIG53KHQpe2Zvcih2YXIgZSxuLHIsaSxhPXRbMF0sbz10WzFdLHM9YXcuXztzOylpZigocj1ydyhzLG8pLWEpPnV3KXM9cy5MO2Vsc2V7aWYoISgoaT1hLWl3KHMsbykpPnV3KSl7cj4tdXc/KGU9cy5QLG49cyk6aT4tdXc/KGU9cyxuPXMuTik6ZT1uPXM7YnJlYWt9aWYoIXMuUil7ZT1zO2JyZWFrfXM9cy5SfSFmdW5jdGlvbih0KXtvd1t0LmluZGV4XT17c2l0ZTp0LGhhbGZlZGdlczpbXX19KHQpO3ZhciBjPUprKHQpO2lmKGF3Lmluc2VydChlLGMpLGV8fG4pe2lmKGU9PT1uKXJldHVybiBaayhlKSxuPUprKGUuc2l0ZSksYXcuaW5zZXJ0KGMsbiksYy5lZGdlPW4uZWRnZT1QayhlLnNpdGUsYy5zaXRlKSxYayhlKSx2b2lkIFhrKG4pO2lmKG4pe1prKGUpLFprKG4pO3ZhciB1PWUuc2l0ZSxsPXVbMF0saD11WzFdLGY9dFswXS1sLGQ9dFsxXS1oLHA9bi5zaXRlLHk9cFswXS1sLGc9cFsxXS1oLHY9MiooZipnLWQqeSksbT1mKmYrZCpkLGI9eSp5K2cqZyx4PVsoZyptLWQqYikvditsLChmKmIteSptKS92K2hdO1lrKG4uZWRnZSx1LHAseCksYy5lZGdlPVBrKHUsdCxudWxsLHgpLG4uZWRnZT1Qayh0LHAsbnVsbCx4KSxYayhlKSxYayhuKX1lbHNlIGMuZWRnZT1QayhlLnNpdGUsYy5zaXRlKX19ZnVuY3Rpb24gcncodCxlKXt2YXIgbj10LnNpdGUscj1uWzBdLGk9blsxXSxhPWktZTtpZighYSlyZXR1cm4gcjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0obj1vLnNpdGUpWzBdLGM9blsxXSx1PWMtZTtpZighdSlyZXR1cm4gczt2YXIgbD1zLXIsaD0xL2EtMS91LGY9bC91O3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoobCpsLygtMip1KS1jK3UvMitpLWEvMikpKS9oK3I6KHIrcykvMn1mdW5jdGlvbiBpdyh0LGUpe3ZhciBuPXQuTjtpZihuKXJldHVybiBydyhuLGUpO3ZhciByPXQuc2l0ZTtyZXR1cm4gclsxXT09PWU/clswXToxLzB9dmFyIGF3LG93LHN3LGN3LHV3PTFlLTYsbHc9MWUtMTI7ZnVuY3Rpb24gaHcodCxlKXtyZXR1cm4gZVsxXS10WzFdfHxlWzBdLXRbMF19ZnVuY3Rpb24gZncodCxlKXt2YXIgbixyLGksYT10LnNvcnQoaHcpLnBvcCgpO2Zvcihjdz1bXSxvdz1uZXcgQXJyYXkodC5sZW5ndGgpLGF3PW5ldyBGayxzdz1uZXcgRms7OylpZihpPVZrLGEmJighaXx8YVsxXTxpLnl8fGFbMV09PT1pLnkmJmFbMF08aS54KSlhWzBdPT09biYmYVsxXT09PXJ8fChudyhhKSxuPWFbMF0scj1hWzFdKSxhPXQucG9wKCk7ZWxzZXtpZighaSlicmVhaztldyhpLmFyYyl9aWYoZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxuLHIsaT0wLGE9b3cubGVuZ3RoO2k8YTsrK2kpaWYoKHQ9b3dbaV0pJiYocj0oZT10LmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIG89bmV3IEFycmF5KHIpLHM9bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxyOysrbilvW25dPW4sc1tuXT0kayh0LGN3W2Vbbl1dKTtmb3Ioby5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzW2VdLXNbdF19KSksbj0wO248cjsrK24pc1tuXT1lW29bbl1dO2ZvcihuPTA7bjxyOysrbillW25dPXNbbl19fSgpLGUpe3ZhciBvPStlWzBdWzBdLHM9K2VbMF1bMV0sYz0rZVsxXVswXSx1PStlWzFdWzFdOyFmdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGksYT1jdy5sZW5ndGg7YS0tOylVayhpPWN3W2FdLHQsZSxuLHIpJiZ6ayhpLHQsZSxuLHIpJiYoTWF0aC5hYnMoaVswXVswXS1pWzFdWzBdKT51d3x8TWF0aC5hYnMoaVswXVsxXS1pWzFdWzFdKT51dyl8fGRlbGV0ZSBjd1thXX0obyxzLGMsdSksZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGc9b3cubGVuZ3RoLHY9ITA7Zm9yKGk9MDtpPGc7KytpKWlmKGE9b3dbaV0pe2ZvcihvPWEuc2l0ZSxzPShjPWEuaGFsZmVkZ2VzKS5sZW5ndGg7cy0tOyljd1tjW3NdXXx8Yy5zcGxpY2UocywxKTtmb3Iocz0wLHU9Yy5sZW5ndGg7czx1OylwPShkPVdrKGEsY3dbY1tzXV0pKVswXSx5PWRbMV0saD0obD1xayhhLGN3W2NbKytzJXVdXSkpWzBdLGY9bFsxXSwoTWF0aC5hYnMocC1oKT51d3x8TWF0aC5hYnMoeS1mKT51dykmJihjLnNwbGljZShzLDAsY3cucHVzaChqayhvLGQsTWF0aC5hYnMocC10KTx1dyYmci15PnV3P1t0LE1hdGguYWJzKGgtdCk8dXc/ZjpyXTpNYXRoLmFicyh5LXIpPHV3JiZuLXA+dXc/W01hdGguYWJzKGYtcik8dXc/aDpuLHJdOk1hdGguYWJzKHAtbik8dXcmJnktZT51dz9bbixNYXRoLmFicyhoLW4pPHV3P2Y6ZV06TWF0aC5hYnMoeS1lKTx1dyYmcC10PnV3P1tNYXRoLmFicyhmLWUpPHV3P2g6dCxlXTpudWxsKSktMSksKyt1KTt1JiYodj0hMSl9aWYodil7dmFyIG0sYix4LF89MS8wO2ZvcihpPTAsdj1udWxsO2k8ZzsrK2kpKGE9b3dbaV0pJiYoeD0obT0obz1hLnNpdGUpWzBdLXQpKm0rKGI9b1sxXS1lKSpiKTxfJiYoXz14LHY9YSk7aWYodil7dmFyIGs9W3QsZV0sdz1bdCxyXSxFPVtuLHJdLFQ9W24sZV07di5oYWxmZWRnZXMucHVzaChjdy5wdXNoKGprKG89di5zaXRlLGssdykpLTEsY3cucHVzaChqayhvLHcsRSkpLTEsY3cucHVzaChqayhvLEUsVCkpLTEsY3cucHVzaChqayhvLFQsaykpLTEpfX1mb3IoaT0wO2k8ZzsrK2kpKGE9b3dbaV0pJiYoYS5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgb3dbaV0pfShvLHMsYyx1KX10aGlzLmVkZ2VzPWN3LHRoaXMuY2VsbHM9b3csYXc9c3c9Y3c9b3c9bnVsbH1mdy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmZ3LHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuaGFsZmVkZ2VzLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIHFrKGUsdFtuXSl9KSk7cmV0dXJuIG4uZGF0YT1lLnNpdGUuZGF0YSxufSkpfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24obixyKXtpZihhPShpPW4uaGFsZmVkZ2VzKS5sZW5ndGgpZm9yKHZhciBpLGEsbyxzLGMsdSxsPW4uc2l0ZSxoPS0xLGY9ZVtpW2EtMV1dLGQ9Zi5sZWZ0PT09bD9mLnJpZ2h0OmYubGVmdDsrK2g8YTspbz1kLGQ9KGY9ZVtpW2hdXSkubGVmdD09PWw/Zi5yaWdodDpmLmxlZnQsbyYmZCYmcjxvLmluZGV4JiZyPGQuaW5kZXgmJihjPW8sdT1kLCgocz1sKVswXS11WzBdKSooY1sxXS1zWzFdKS0oc1swXS1jWzBdKSoodVsxXS1zWzFdKTwwKSYmdC5wdXNoKFtsLmRhdGEsby5kYXRhLGQuZGF0YV0pfSkpLHR9LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5yaWdodH0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntzb3VyY2U6dC5sZWZ0LmRhdGEsdGFyZ2V0OnQucmlnaHQuZGF0YX19KSl9LGZpbmQ6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcixpLGE9dGhpcyxvPWEuX2ZvdW5kfHwwLHM9YS5jZWxscy5sZW5ndGg7IShpPWEuY2VsbHNbb10pOylpZigrK28+PXMpcmV0dXJuIG51bGw7dmFyIGM9dC1pLnNpdGVbMF0sdT1lLWkuc2l0ZVsxXSxsPWMqYyt1KnU7ZG97aT1hLmNlbGxzW3I9b10sbz1udWxsLGkuaGFsZmVkZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciByPWEuZWRnZXNbbl0scz1yLmxlZnQ7aWYocyE9PWkuc2l0ZSYmc3x8KHM9ci5yaWdodCkpe3ZhciBjPXQtc1swXSx1PWUtc1sxXSxoPWMqYyt1KnU7aDxsJiYobD1oLG89cy5pbmRleCl9fSkpfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gYS5fZm91bmQ9cixudWxsPT1ufHxsPD1uKm4/aS5zaXRlOm51bGx9fTt2YXIgZHc9ZnVuY3Rpb24oKXt2YXIgdD1PayxlPUJrLG49bnVsbDtmdW5jdGlvbiByKHIpe3JldHVybiBuZXcgZncoci5tYXAoKGZ1bmN0aW9uKG4saSl7dmFyIGE9W01hdGgucm91bmQodChuLGkscikvdXcpKnV3LE1hdGgucm91bmQoZShuLGkscikvdXcpKnV3XTtyZXR1cm4gYS5pbmRleD1pLGEuZGF0YT1uLGF9KSksbil9cmV0dXJuIHIucG9seWdvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkucG9seWdvbnMoKX0sci5saW5rcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS5saW5rcygpfSxyLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXtyZXR1cm4gcih0KS50cmlhbmdsZXMoKX0sci54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6TWsoK2UpLHIpOnR9LHIueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ok1rKCt0KSxyKTplfSxyLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0scik6biYmW1tuWzBdWzBdLG5bMF1bMV1dLFtuWzFdWzBdLG5bMV1bMV1dXX0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/bnVsbDpbWzAsMF0sWyt0WzBdLCt0WzFdXV0scik6biYmW25bMV1bMF0tblswXVswXSxuWzFdWzFdLW5bMF1bMV1dfSxyfSxwdz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIHl3KHQsZSxuKXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMudHJhbnNmb3JtPW59ZnVuY3Rpb24gZ3codCxlLG4pe3RoaXMuaz10LHRoaXMueD1lLHRoaXMueT1ufWd3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3csc2NhbGU6ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10P3RoaXM6bmV3IGd3KHRoaXMuayp0LHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PXQmMD09PWU/dGhpczpuZXcgZ3codGhpcy5rLHRoaXMueCt0aGlzLmsqdCx0aGlzLnkrdGhpcy5rKmUpfSxhcHBseTpmdW5jdGlvbih0KXtyZXR1cm5bdFswXSp0aGlzLmsrdGhpcy54LHRbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbih0KXtyZXR1cm4gdCp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKHQpe3JldHVyblsodFswXS10aGlzLngpL3RoaXMuaywodFsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0scmVzY2FsZVk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29weSgpLmRvbWFpbih0LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAodC5pbnZlcnQsdCkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgdnc9bmV3IGd3KDEsMCwwKTtmdW5jdGlvbiBtdyh0KXtmb3IoOyF0Ll9fem9vbTspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuIHZ3O3JldHVybiB0Ll9fem9vbX1mdW5jdGlvbiBidygpe2NlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfW13LnByb3RvdHlwZT1ndy5wcm90b3R5cGU7dmFyIHh3PWZ1bmN0aW9uKCl7Y2UucHJldmVudERlZmF1bHQoKSxjZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX07ZnVuY3Rpb24gX3coKXtyZXR1cm4hY2UuY3RybEtleSYmIWNlLmJ1dHRvbn1mdW5jdGlvbiBrdygpe3ZhciB0PXRoaXM7cmV0dXJuIHQgaW5zdGFuY2VvZiBTVkdFbGVtZW50Pyh0PXQub3duZXJTVkdFbGVtZW50fHx0KS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyh0PXQudmlld0JveC5iYXNlVmFsKS54LHQueV0sW3QueCt0LndpZHRoLHQueSt0LmhlaWdodF1dOltbMCwwXSxbdC53aWR0aC5iYXNlVmFsLnZhbHVlLHQuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW3QuY2xpZW50V2lkdGgsdC5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiB3dygpe3JldHVybiB0aGlzLl9fem9vbXx8dnd9ZnVuY3Rpb24gRXcoKXtyZXR1cm4tY2UuZGVsdGFZKigxPT09Y2UuZGVsdGFNb2RlPy4wNTpjZS5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBUdygpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBDdyh0LGUsbil7dmFyIHI9dC5pbnZlcnRYKGVbMF1bMF0pLW5bMF1bMF0saT10LmludmVydFgoZVsxXVswXSktblsxXVswXSxhPXQuaW52ZXJ0WShlWzBdWzFdKS1uWzBdWzFdLG89dC5pbnZlcnRZKGVbMV1bMV0pLW5bMV1bMV07cmV0dXJuIHQudHJhbnNsYXRlKGk+cj8ocitpKS8yOk1hdGgubWluKDAscil8fE1hdGgubWF4KDAsaSksbz5hPyhhK28pLzI6TWF0aC5taW4oMCxhKXx8TWF0aC5tYXgoMCxvKSl9dmFyIFN3PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPV93LHI9a3csaT1DdyxhPUV3LG89VHcscz1bMCwxLzBdLGM9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sdT0yNTAsbD1mcCxoPWx0KCJzdGFydCIsInpvb20iLCJlbmQiKSxmPTA7ZnVuY3Rpb24gZCh0KXt0LnByb3BlcnR5KCJfX3pvb20iLHd3KS5vbigid2hlZWwuem9vbSIseCkub24oIm1vdXNlZG93bi56b29tIixfKS5vbigiZGJsY2xpY2suem9vbSIsaykuZmlsdGVyKG8pLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLHcpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsVCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4oZT1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZSkpKT09PXQuaz90Om5ldyBndyhlLHQueCx0LnkpfWZ1bmN0aW9uIHkodCxlLG4pe3ZhciByPWVbMF0tblswXSp0LmssaT1lWzFdLW5bMV0qdC5rO3JldHVybiByPT09dC54JiZpPT09dC55P3Q6bmV3IGd3KHQuayxyLGkpfWZ1bmN0aW9uIGcodCl7cmV0dXJuWygrdFswXVswXSsgK3RbMV1bMF0pLzIsKCt0WzBdWzFdKyArdFsxXVsxXSkvMl19ZnVuY3Rpb24gdih0LGUsbil7dC5vbigic3RhcnQuem9vbSIsKGZ1bmN0aW9uKCl7bSh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pKS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJ6b29tIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9YXJndW1lbnRzLGE9bSh0LGkpLG89ci5hcHBseSh0LGkpLHM9bnVsbD09bj9nKG8pOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodCxpKTpuLGM9TWF0aC5tYXgob1sxXVswXS1vWzBdWzBdLG9bMV1bMV0tb1swXVsxXSksdT10Ll9fem9vbSxoPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodCxpKTplLGY9bCh1LmludmVydChzKS5jb25jYXQoYy91LmspLGguaW52ZXJ0KHMpLmNvbmNhdChjL2guaykpO3JldHVybiBmdW5jdGlvbih0KXtpZigxPT09dCl0PWg7ZWxzZXt2YXIgZT1mKHQpLG49Yy9lWzJdO3Q9bmV3IGd3KG4sc1swXS1lWzBdKm4sc1sxXS1lWzFdKm4pfWEuem9vbShudWxsLHQpfX0pKX1mdW5jdGlvbiBtKHQsZSxuKXtyZXR1cm4hbiYmdC5fX3pvb21pbmd8fG5ldyBiKHQsZSl9ZnVuY3Rpb24gYih0LGUpe3RoaXMudGhhdD10LHRoaXMuYXJncz1lLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9ci5hcHBseSh0LGUpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIHgoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9bSh0aGlzLGFyZ3VtZW50cyksZT10aGlzLl9fem9vbSxyPU1hdGgubWF4KHNbMF0sTWF0aC5taW4oc1sxXSxlLmsqTWF0aC5wb3coMixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSxvPU5uKHRoaXMpO2lmKHQud2hlZWwpdC5tb3VzZVswXVswXT09PW9bMF0mJnQubW91c2VbMF1bMV09PT1vWzFdfHwodC5tb3VzZVsxXT1lLmludmVydCh0Lm1vdXNlWzBdPW8pKSxjbGVhclRpbWVvdXQodC53aGVlbCk7ZWxzZXtpZihlLms9PT1yKXJldHVybjt0Lm1vdXNlPVtvLGUuaW52ZXJ0KG8pXSxvcih0aGlzKSx0LnN0YXJ0KCl9eHcoKSx0LndoZWVsPXNldFRpbWVvdXQodSwxNTApLHQuem9vbSgibW91c2UiLGkoeShwKGUsciksdC5tb3VzZVswXSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gdSgpe3Qud2hlZWw9bnVsbCx0LmVuZCgpfX1mdW5jdGlvbiBfKCl7aWYoIWUmJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdD1tKHRoaXMsYXJndW1lbnRzLCEwKSxyPWtlKGNlLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsdSwhMCkub24oIm1vdXNldXAuem9vbSIsbCwhMCksYT1Obih0aGlzKSxvPWNlLmNsaWVudFgscz1jZS5jbGllbnRZO1RlKGNlLnZpZXcpLGJ3KCksdC5tb3VzZT1bYSx0aGlzLl9fem9vbS5pbnZlcnQoYSldLG9yKHRoaXMpLHQuc3RhcnQoKX1mdW5jdGlvbiB1KCl7aWYoeHcoKSwhdC5tb3ZlZCl7dmFyIGU9Y2UuY2xpZW50WC1vLG49Y2UuY2xpZW50WS1zO3QubW92ZWQ9ZSplK24qbj5mfXQuem9vbSgibW91c2UiLGkoeSh0LnRoYXQuX196b29tLHQubW91c2VbMF09Tm4odC50aGF0KSx0Lm1vdXNlWzFdKSx0LmV4dGVudCxjKSl9ZnVuY3Rpb24gbCgpe3Iub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksQ2UoY2Uudmlldyx0Lm1vdmVkKSx4dygpLHQuZW5kKCl9fWZ1bmN0aW9uIGsoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dGhpcy5fX3pvb20sZT1Obih0aGlzKSxhPXQuaW52ZXJ0KGUpLG89dC5rKihjZS5zaGlmdEtleT8uNToyKSxzPWkoeShwKHQsbyksZSxhKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKTt4dygpLHU+MD9rZSh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24odSkuY2FsbCh2LHMsZSk6a2UodGhpcykuY2FsbChkLnRyYW5zZm9ybSxzKX19ZnVuY3Rpb24gdygpe2lmKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZSxyLGksYSxvPWNlLnRvdWNoZXMscz1vLmxlbmd0aCxjPW0odGhpcyxhcmd1bWVudHMsY2UuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09cyk7Zm9yKGJ3KCkscj0wO3I8czsrK3IpaT1vW3JdLGE9W2E9Qm4odGhpcyxvLGkuaWRlbnRpZmllciksdGhpcy5fX3pvb20uaW52ZXJ0KGEpLGkuaWRlbnRpZmllcl0sYy50b3VjaDA/Yy50b3VjaDF8fGMudG91Y2gwWzJdPT09YVsyXXx8KGMudG91Y2gxPWEsYy50YXBzPTApOihjLnRvdWNoMD1hLGU9ITAsYy50YXBzPTErISF0KTt0JiYodD1jbGVhclRpbWVvdXQodCkpLGUmJihjLnRhcHM8MiYmKHQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0PW51bGx9KSw1MDApKSxvcih0aGlzKSxjLnN0YXJ0KCkpfX1mdW5jdGlvbiBFKCl7aWYodGhpcy5fX3pvb21pbmcpe3ZhciBlLG4scixhLG89bSh0aGlzLGFyZ3VtZW50cykscz1jZS5jaGFuZ2VkVG91Y2hlcyx1PXMubGVuZ3RoO2Zvcih4dygpLHQmJih0PWNsZWFyVGltZW91dCh0KSksby50YXBzPTAsZT0wO2U8dTsrK2Upbj1zW2VdLHI9Qm4odGhpcyxzLG4uaWRlbnRpZmllciksby50b3VjaDAmJm8udG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP28udG91Y2gwWzBdPXI6by50b3VjaDEmJm8udG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiYoby50b3VjaDFbMF09cik7aWYobj1vLnRoYXQuX196b29tLG8udG91Y2gxKXt2YXIgbD1vLnRvdWNoMFswXSxoPW8udG91Y2gwWzFdLGY9by50b3VjaDFbMF0sZD1vLnRvdWNoMVsxXSxnPShnPWZbMF0tbFswXSkqZysoZz1mWzFdLWxbMV0pKmcsdj0odj1kWzBdLWhbMF0pKnYrKHY9ZFsxXS1oWzFdKSp2O249cChuLE1hdGguc3FydChnL3YpKSxyPVsobFswXStmWzBdKS8yLChsWzFdK2ZbMV0pLzJdLGE9WyhoWzBdK2RbMF0pLzIsKGhbMV0rZFsxXSkvMl19ZWxzZXtpZighby50b3VjaDApcmV0dXJuO3I9by50b3VjaDBbMF0sYT1vLnRvdWNoMFsxXX1vLnpvb20oInRvdWNoIixpKHkobixyLGEpLG8uZXh0ZW50LGMpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgdCxuLHI9bSh0aGlzLGFyZ3VtZW50cyksaT1jZS5jaGFuZ2VkVG91Y2hlcyxhPWkubGVuZ3RoO2ZvcihidygpLGUmJmNsZWFyVGltZW91dChlKSxlPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZT1udWxsfSksNTAwKSx0PTA7dDxhOysrdCluPWlbdF0sci50b3VjaDAmJnIudG91Y2gwWzJdPT09bi5pZGVudGlmaWVyP2RlbGV0ZSByLnRvdWNoMDpyLnRvdWNoMSYmci50b3VjaDFbMl09PT1uLmlkZW50aWZpZXImJmRlbGV0ZSByLnRvdWNoMTtpZihyLnRvdWNoMSYmIXIudG91Y2gwJiYoci50b3VjaDA9ci50b3VjaDEsZGVsZXRlIHIudG91Y2gxKSxyLnRvdWNoMClyLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoci50b3VjaDBbMF0pO2Vsc2UgaWYoci5lbmQoKSwyPT09ci50YXBzKXt2YXIgbz1rZSh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO28mJm8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIGQudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnNlbGVjdGlvbj90LnNlbGVjdGlvbigpOnQ7ci5wcm9wZXJ0eSgiX196b29tIix3dyksdCE9PXI/dih0LGUsbik6ci5pbnRlcnJ1cHQoKS5lYWNoKChmdW5jdGlvbigpe20odGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUpLmVuZCgpfSkpfSxkLnNjYWxlQnk9ZnVuY3Rpb24odCxlLG4pe2Quc2NhbGVUbyh0LChmdW5jdGlvbigpe3ZhciB0PXRoaXMuX196b29tLmssbj0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplO3JldHVybiB0Km59KSxuKX0sZC5zY2FsZVRvPWZ1bmN0aW9uKHQsZSxuKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGE9dGhpcy5fX3pvb20sbz1udWxsPT1uP2codCk6ImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6bixzPWEuaW52ZXJ0KG8pLHU9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gaSh5KHAoYSx1KSxvLHMpLHQsYyl9KSxuKX0sZC50cmFuc2xhdGVCeT1mdW5jdGlvbih0LGUsbil7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZSwiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxjKX0pKX0sZC50cmFuc2xhdGVUbz1mdW5jdGlvbih0LGUsbixhKXtkLnRyYW5zZm9ybSh0LChmdW5jdGlvbigpe3ZhciB0PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89dGhpcy5fX3pvb20scz1udWxsPT1hP2codCk6ImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YTtyZXR1cm4gaSh2dy50cmFuc2xhdGUoc1swXSxzWzFdKS5zY2FsZShvLmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgZT8tZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LWUsImZ1bmN0aW9uIj09dHlwZW9mIG4/LW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1uKSx0LGMpfSksYSl9LGIucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09dCYmKHRoaXMubW91c2VbMV09ZS5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gwWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0b3VjaCIhPT10JiYodGhpcy50b3VjaDFbMV09ZS5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPWUsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHQpe3BlKG5ldyB5dyhkLHQsdGhpcy50aGF0Ll9fem9vbSksaC5hcHBseSxoLFt0LHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGQud2hlZWxEZWx0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCt0KSxkKTphfSxkLmZpbHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnB3KCEhdCksZCk6bn0sZC50b3VjaGFibGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpwdyghIXQpLGQpOm99LGQuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cHcoW1srdFswXVswXSwrdFswXVsxXV0sWyt0WzFdWzBdLCt0WzFdWzFdXV0pLGQpOnJ9LGQuc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHNbMF09K3RbMF0sc1sxXT0rdFsxXSxkKTpbc1swXSxzWzFdXX0sZC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGNbMF1bMF09K3RbMF1bMF0sY1sxXVswXT0rdFsxXVswXSxjWzBdWzFdPSt0WzBdWzFdLGNbMV1bMV09K3RbMV1bMV0sZCk6W1tjWzBdWzBdLGNbMF1bMV1dLFtjWzFdWzBdLGNbMV1bMV1dXX0sZC5jb25zdHJhaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxkKTppfSxkLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGQpOnV9LGQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxkKTpsfSxkLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9aC5vbi5hcHBseShoLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1oP2Q6dH0sZC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSh0PSt0KSp0LGQpOk1hdGguc3FydChmKX0sZH07bi5kKGUsInZlcnNpb24iLChmdW5jdGlvbigpe3JldHVybiI1LjE1LjAifSkpLG4uZChlLCJiaXNlY3QiLChmdW5jdGlvbigpe3JldHVybiBjfSkpLG4uZChlLCJiaXNlY3RSaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG99KSksbi5kKGUsImJpc2VjdExlZnQiLChmdW5jdGlvbigpe3JldHVybiBzfSkpLG4uZChlLCJhc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiByfSkpLG4uZChlLCJiaXNlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKGUsImNyb3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaH0pKSxuLmQoZSwiZGVzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KSksbi5kKGUsImRldmlhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSksbi5kKGUsImV4dGVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSksbi5kKGUsImhpc3RvZ3JhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksbi5kKGUsInRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXMiLChmdW5jdGlvbigpe3JldHVybiBOfSkpLG4uZChlLCJ0aHJlc2hvbGRTY290dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIER9KSksbi5kKGUsInRocmVzaG9sZFN0dXJnZXMiLChmdW5jdGlvbigpe3JldHVybiBNfSkpLG4uZChlLCJtYXgiLChmdW5jdGlvbigpe3JldHVybiBMfSkpLG4uZChlLCJtZWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gSX0pKSxuLmQoZSwibWVkaWFuIiwoZnVuY3Rpb24oKXtyZXR1cm4gUn0pKSxuLmQoZSwibWVyZ2UiLChmdW5jdGlvbigpe3JldHVybiBGfSkpLG4uZChlLCJtaW4iLChmdW5jdGlvbigpe3JldHVybiBQfSkpLG4uZChlLCJwYWlycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKGUsInBlcm11dGUiLChmdW5jdGlvbigpe3JldHVybiBqfSkpLG4uZChlLCJxdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJ9KSksbi5kKGUsInJhbmdlIiwoZnVuY3Rpb24oKXtyZXR1cm4ga30pKSxuLmQoZSwic2NhbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSksbi5kKGUsInNodWZmbGUiLChmdW5jdGlvbigpe3JldHVybiB6fSkpLG4uZChlLCJzdW0iLChmdW5jdGlvbigpe3JldHVybiBVfSkpLG4uZChlLCJ0aWNrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN9KSksbi5kKGUsInRpY2tJbmNyZW1lbnQiLChmdW5jdGlvbigpe3JldHVybiBTfSkpLG4uZChlLCJ0aWNrU3RlcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksbi5kKGUsInRyYW5zcG9zZSIsKGZ1bmN0aW9uKCl7cmV0dXJuICR9KSksbi5kKGUsInZhcmlhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcH0pKSxuLmQoZSwiemlwIiwoZnVuY3Rpb24oKXtyZXR1cm4gV30pKSxuLmQoZSwiYXhpc1RvcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR0fSkpLG4uZChlLCJheGlzUmlnaHQiLChmdW5jdGlvbigpe3JldHVybiBldH0pKSxuLmQoZSwiYXhpc0JvdHRvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG50fSkpLG4uZChlLCJheGlzTGVmdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ0fSkpLG4uZChlLCJicnVzaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSkpLG4uZChlLCJicnVzaFgiLChmdW5jdGlvbigpe3JldHVybiB3aX0pKSxuLmQoZSwiYnJ1c2hZIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWl9KSksbi5kKGUsImJydXNoU2VsZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2l9KSksbi5kKGUsImNob3JkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGl9KSksbi5kKGUsInJpYmJvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdpfSkpLG4uZChlLCJuZXN0IiwoZnVuY3Rpb24oKXtyZXR1cm4gS2l9KSksbi5kKGUsInNldCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9hfSkpLG4uZChlLCJtYXAiLChmdW5jdGlvbigpe3JldHVybiBRaX0pKSxuLmQoZSwia2V5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNhfSkpLG4uZChlLCJ2YWx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBjYX0pKSxuLmQoZSwiZW50cmllcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVhfSkpLG4uZChlLCJjb2xvciIsKGZ1bmN0aW9uKCl7cmV0dXJuICRlfSkpLG4uZChlLCJyZ2IiLChmdW5jdGlvbigpe3JldHVybiBIZX0pKSxuLmQoZSwiaHNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gdG59KSksbi5kKGUsImxhYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBhfSkpLG4uZChlLCJoY2wiLChmdW5jdGlvbigpe3JldHVybiBrYX0pKSxuLmQoZSwibGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gX2F9KSksbi5kKGUsImdyYXkiLChmdW5jdGlvbigpe3JldHVybiBkYX0pKSxuLmQoZSwiY3ViZWhlbGl4IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2F9KSksbi5kKGUsImNvbnRvdXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWF9KSksbi5kKGUsImNvbnRvdXJEZW5zaXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVmF9KSksbi5kKGUsImRpc3BhdGNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHR9KSksbi5kKGUsImRyYWciLChmdW5jdGlvbigpe3JldHVybiBKYX0pKSxuLmQoZSwiZHJhZ0Rpc2FibGUiLChmdW5jdGlvbigpe3JldHVybiBUZX0pKSxuLmQoZSwiZHJhZ0VuYWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENlfSkpLG4uZChlLCJkc3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBvb30pKSxuLmQoZSwiY3N2UGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBjb30pKSxuLmQoZSwiY3N2UGFyc2VSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gdW99KSksbi5kKGUsImNzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxvfSkpLG4uZChlLCJjc3ZGb3JtYXRCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gaG99KSksbi5kKGUsImNzdkZvcm1hdFJvd3MiLChmdW5jdGlvbigpe3JldHVybiBmb30pKSxuLmQoZSwiY3N2Rm9ybWF0Um93IiwoZnVuY3Rpb24oKXtyZXR1cm4gcG99KSksbi5kKGUsImNzdkZvcm1hdFZhbHVlIiwoZnVuY3Rpb24oKXtyZXR1cm4geW99KSksbi5kKGUsInRzdlBhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdm99KSksbi5kKGUsInRzdlBhcnNlUm93cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1vfSkpLG4uZChlLCJ0c3ZGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBib30pKSxuLmQoZSwidHN2Rm9ybWF0Qm9keSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhvfSkpLG4uZChlLCJ0c3ZGb3JtYXRSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX299KSksbi5kKGUsInRzdkZvcm1hdFJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtvfSkpLG4uZChlLCJ0c3ZGb3JtYXRWYWx1ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdvfSkpLG4uZChlLCJhdXRvVHlwZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVvfSkpLG4uZChlLCJlYXNlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ299KSksbi5kKGUsImVhc2VRdWFkIiwoZnVuY3Rpb24oKXtyZXR1cm4gTW99KSksbi5kKGUsImVhc2VRdWFkSW4iLChmdW5jdGlvbigpe3JldHVybiBTb30pKSxuLmQoZSwiZWFzZVF1YWRPdXQiLChmdW5jdGlvbigpe3JldHVybiBBb30pKSxuLmQoZSwiZWFzZVF1YWRJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1vfSkpLG4uZChlLCJlYXNlQ3ViaWMiLChmdW5jdGlvbigpe3JldHVybiBWcn0pKSxuLmQoZSwiZWFzZUN1YmljSW4iLChmdW5jdGlvbigpe3JldHVybiBxcn0pKSxuLmQoZSwiZWFzZUN1YmljT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV3J9KSksbi5kKGUsImVhc2VDdWJpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVnJ9KSksbi5kKGUsImVhc2VQb2x5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTm99KSksbi5kKGUsImVhc2VQb2x5SW4iLChmdW5jdGlvbigpe3JldHVybiBPb30pKSxuLmQoZSwiZWFzZVBvbHlPdXQiLChmdW5jdGlvbigpe3JldHVybiBCb30pKSxuLmQoZSwiZWFzZVBvbHlJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5vfSkpLG4uZChlLCJlYXNlU2luIiwoZnVuY3Rpb24oKXtyZXR1cm4gRm99KSksbi5kKGUsImVhc2VTaW5JbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIElvfSkpLG4uZChlLCJlYXNlU2luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUm99KSksbi5kKGUsImVhc2VTaW5Jbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZvfSkpLG4uZChlLCJlYXNlRXhwIiwoZnVuY3Rpb24oKXtyZXR1cm4gWW99KSksbi5kKGUsImVhc2VFeHBJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBvfSkpLG4uZChlLCJlYXNlRXhwT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gam99KSksbi5kKGUsImVhc2VFeHBJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlvfSkpLG4uZChlLCJlYXNlQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gJG99KSksbi5kKGUsImVhc2VDaXJjbGVJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpvfSkpLG4uZChlLCJlYXNlQ2lyY2xlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW99KSksbi5kKGUsImVhc2VDaXJjbGVJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuICRvfSkpLG4uZChlLCJlYXNlQm91bmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gV299KSksbi5kKGUsImVhc2VCb3VuY2VJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFvfSkpLG4uZChlLCJlYXNlQm91bmNlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV299KSksbi5kKGUsImVhc2VCb3VuY2VJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZvfSkpLG4uZChlLCJlYXNlQmFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhvfSkpLG4uZChlLCJlYXNlQmFja0luIiwoZnVuY3Rpb24oKXtyZXR1cm4gSG99KSksbi5kKGUsImVhc2VCYWNrT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gR299KSksbi5kKGUsImVhc2VCYWNrSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBYb30pKSxuLmQoZSwiZWFzZUVsYXN0aWMiLChmdW5jdGlvbigpe3JldHVybiBLb30pKSxuLmQoZSwiZWFzZUVsYXN0aWNJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFvfSkpLG4uZChlLCJlYXNlRWxhc3RpY091dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtvfSkpLG4uZChlLCJlYXNlRWxhc3RpY0luT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gSm99KSksbi5kKGUsImJsb2IiLChmdW5jdGlvbigpe3JldHVybiBlc30pKSxuLmQoZSwiYnVmZmVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gcnN9KSksbi5kKGUsImRzdiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNzfSkpLG4uZChlLCJjc3YiLChmdW5jdGlvbigpe3JldHVybiBjc30pKSxuLmQoZSwidHN2IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXN9KSksbi5kKGUsImltYWdlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHN9KSksbi5kKGUsImpzb24iLChmdW5jdGlvbigpe3JldHVybiBmc30pKSxuLmQoZSwidGV4dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFzfSkpLG4uZChlLCJ4bWwiLChmdW5jdGlvbigpe3JldHVybiBwc30pKSxuLmQoZSwiaHRtbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlzfSkpLG4uZChlLCJzdmciLChmdW5jdGlvbigpe3JldHVybiBnc30pKSxuLmQoZSwiZm9yY2VDZW50ZXIiLChmdW5jdGlvbigpe3JldHVybiB2c30pKSxuLmQoZSwiZm9yY2VDb2xsaWRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3N9KSksbi5kKGUsImZvcmNlTGluayIsKGZ1bmN0aW9uKCl7cmV0dXJuIERzfSkpLG4uZChlLCJmb3JjZU1hbnlCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gUHN9KSksbi5kKGUsImZvcmNlUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4ganN9KSksbi5kKGUsImZvcmNlU2ltdWxhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZzfSkpLG4uZChlLCJmb3JjZVgiLChmdW5jdGlvbigpe3JldHVybiBZc30pKSxuLmQoZSwiZm9yY2VZIiwoZnVuY3Rpb24oKXtyZXR1cm4genN9KSksbi5kKGUsImZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiByY30pKSxuLmQoZSwiZm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gWHN9KSksbi5kKGUsImZvcm1hdFByZWZpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpzfSkpLG4uZChlLCJmb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBuY30pKSxuLmQoZSwiZm9ybWF0U3BlY2lmaWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gV3N9KSksbi5kKGUsIkZvcm1hdFNwZWNpZmllciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZzfSkpLG4uZChlLCJwcmVjaXNpb25GaXhlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGljfSkpLG4uZChlLCJwcmVjaXNpb25QcmVmaXgiLChmdW5jdGlvbigpe3JldHVybiBhY30pKSxuLmQoZSwicHJlY2lzaW9uUm91bmQiLChmdW5jdGlvbigpe3JldHVybiBvY30pKSxuLmQoZSwiZ2VvQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFjfSkpLG4uZChlLCJnZW9Cb3VuZHMiLChmdW5jdGlvbigpe3JldHVybiAkdX0pKSxuLmQoZSwiZ2VvQ2VudHJvaWQiLChmdW5jdGlvbigpe3JldHVybiBlbH0pKSxuLmQoZSwiZ2VvQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZmx9KSksbi5kKGUsImdlb0NsaXBBbnRpbWVyaWRpYW4iLChmdW5jdGlvbigpe3JldHVybiBFbH0pKSxuLmQoZSwiZ2VvQ2xpcENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRsfSkpLG4uZChlLCJnZW9DbGlwRXh0ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2x9KSksbi5kKGUsImdlb0NsaXBSZWN0YW5nbGUiLChmdW5jdGlvbigpe3JldHVybiBDbH0pKSxuLmQoZSwiZ2VvQ29udGFpbnMiLChmdW5jdGlvbigpe3JldHVybiBHbH0pKSxuLmQoZSwiZ2VvRGlzdGFuY2UiLChmdW5jdGlvbigpe3JldHVybiBqbH0pKSxuLmQoZSwiZ2VvR3JhdGljdWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWx9KSksbi5kKGUsImdlb0dyYXRpY3VsZTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gS2x9KSksbi5kKGUsImdlb0ludGVycG9sYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmh9KSksbi5kKGUsImdlb0xlbmd0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJsfSkpLG4uZChlLCJnZW9QYXRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWZ9KSksbi5kKGUsImdlb0FsYmVycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9mfSkpLG4uZChlLCJnZW9BbGJlcnNVc2EiLChmdW5jdGlvbigpe3JldHVybiBrZn0pKSxuLmQoZSwiZ2VvQXppbXV0aGFsRXF1YWxBcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExmfSkpLG4uZChlLCJnZW9Db25pY0NvbmZvcm1hbFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIERmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhmfSkpLG4uZChlLCJnZW9Db25pY0VxdWFsQXJlYVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJmfSkpLG4uZChlLCJnZW9Db25pY0VxdWlkaXN0YW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gUGZ9KSksbi5kKGUsImdlb0NvbmljRXF1aWRpc3RhbnRSYXciLChmdW5jdGlvbigpe3JldHVybiBGZn0pKSxuLmQoZSwiZ2VvRXF1YWxFYXJ0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdmfSkpLG4uZChlLCJnZW9FcXVhbEVhcnRoUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gcWZ9KSksbi5kKGUsImdlb0VxdWlyZWN0YW5ndWxhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJmfSkpLG4uZChlLCJnZW9FcXVpcmVjdGFuZ3VsYXJSYXciLChmdW5jdGlvbigpe3JldHVybiBJZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWMiLChmdW5jdGlvbigpe3JldHVybiBIZn0pKSxuLmQoZSwiZ2VvR25vbW9uaWNSYXciLChmdW5jdGlvbigpe3JldHVybiBWZn0pKSxuLmQoZSwiZ2VvSWRlbnRpdHkiLChmdW5jdGlvbigpe3JldHVybiBYZn0pKSxuLmQoZSwiZ2VvUHJvamVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdmfSkpLG4uZChlLCJnZW9Qcm9qZWN0aW9uTXV0YXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZmfSkpLG4uZChlLCJnZW9NZXJjYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9mfSkpLG4uZChlLCJnZW9NZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1mfSkpLG4uZChlLCJnZW9OYXR1cmFsRWFydGgxIiwoZnVuY3Rpb24oKXtyZXR1cm4gUWZ9KSksbi5kKGUsImdlb05hdHVyYWxFYXJ0aDFSYXciLChmdW5jdGlvbigpe3JldHVybiBaZn0pKSxuLmQoZSwiZ2VvT3J0aG9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmZ9KSksbi5kKGUsImdlb09ydGhvZ3JhcGhpY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtmfSkpLG4uZChlLCJnZW9TdGVyZW9ncmFwaGljIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWR9KSksbi5kKGUsImdlb1N0ZXJlb2dyYXBoaWNSYXciLChmdW5jdGlvbigpe3JldHVybiB0ZH0pKSxuLmQoZSwiZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmR9KSksbi5kKGUsImdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5kfSkpLG4uZChlLCJnZW9Sb3RhdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVsfSkpLG4uZChlLCJnZW9TdHJlYW0iLChmdW5jdGlvbigpe3JldHVybiAkY30pKSxuLmQoZSwiZ2VvVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbmZ9KSksbi5kKGUsImNsdXN0ZXIiLChmdW5jdGlvbigpe3JldHVybiBzZH0pKSxuLmQoZSwiaGllcmFyY2h5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdWR9KSksbi5kKGUsInBhY2siLChmdW5jdGlvbigpe3JldHVybiBMZH0pKSxuLmQoZSwicGFja1NpYmxpbmdzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQWR9KSksbi5kKGUsInBhY2tFbmNsb3NlIiwoZnVuY3Rpb24oKXtyZXR1cm4geWR9KSksbi5kKGUsInBhcnRpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlkfSkpLG4uZChlLCJzdHJhdGlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdkfSkpLG4uZChlLCJ0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gS2R9KSksbi5kKGUsInRyZWVtYXAiLChmdW5jdGlvbigpe3JldHVybiBycH0pKSxuLmQoZSwidHJlZW1hcEJpbmFyeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlwfSkpLG4uZChlLCJ0cmVlbWFwRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpkfSkpLG4uZChlLCJ0cmVlbWFwU2xpY2UiLChmdW5jdGlvbigpe3JldHVybiBKZH0pKSxuLmQoZSwidHJlZW1hcFNsaWNlRGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFwfSkpLG4uZChlLCJ0cmVlbWFwU3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBucH0pKSxuLmQoZSwidHJlZW1hcFJlc3F1YXJpZnkiLChmdW5jdGlvbigpe3JldHVybiBvcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGUiLChmdW5jdGlvbigpe3JldHVybiBBbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1ufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gYW59KSksbi5kKGUsImludGVycG9sYXRlQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBvbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVEYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4geG59KSksbi5kKGUsImludGVycG9sYXRlRGlzY3JldGUiLChmdW5jdGlvbigpe3JldHVybiBzcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIdWUiLChmdW5jdGlvbigpe3JldHVybiBjcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXIiLChmdW5jdGlvbigpe3JldHVybiBfbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVOdW1iZXJBcnJheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdufSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9iamVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJvdW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdXB9KSksbi5kKGUsImludGVycG9sYXRlU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gU259KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtQ3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHJ9KSksbi5kKGUsImludGVycG9sYXRlVHJhbnNmb3JtU3ZnIiwoZnVuY3Rpb24oKXtyZXR1cm4gZnJ9KSksbi5kKGUsImludGVycG9sYXRlWm9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZufSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJnYkJhc2lzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcG59KSksbi5kKGUsImludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiB5bn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2wiLChmdW5jdGlvbigpe3JldHVybiBwcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIc2xMb25nIiwoZnVuY3Rpb24oKXtyZXR1cm4geXB9KSksbi5kKGUsImludGVycG9sYXRlTGFiIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3B9KSksbi5kKGUsImludGVycG9sYXRlSGNsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXB9KSksbi5kKGUsImludGVycG9sYXRlSGNsTG9uZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9wfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLChmdW5jdGlvbigpe3JldHVybiBrcH0pKSxuLmQoZSwicGllY2V3aXNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gd3B9KSksbi5kKGUsInF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXB9KSksbi5kKGUsInBhdGgiLChmdW5jdGlvbigpe3JldHVybiBVaX0pKSxuLmQoZSwicG9seWdvbkFyZWEiLChmdW5jdGlvbigpe3JldHVybiBUcH0pKSxuLmQoZSwicG9seWdvbkNlbnRyb2lkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ3B9KSksbi5kKGUsInBvbHlnb25IdWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXB9KSksbi5kKGUsInBvbHlnb25Db250YWlucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9wfSkpLG4uZChlLCJwb2x5Z29uTGVuZ3RoIiwoZnVuY3Rpb24oKXtyZXR1cm4gQnB9KSksbi5kKGUsInF1YWR0cmVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRXN9KSksbi5kKGUsInJhbmRvbVVuaWZvcm0iLChmdW5jdGlvbigpe3JldHVybiBEcH0pKSxuLmQoZSwicmFuZG9tTm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHB9KSksbi5kKGUsInJhbmRvbUxvZ05vcm1hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElwfSkpLG4uZChlLCJyYW5kb21CYXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZwfSkpLG4uZChlLCJyYW5kb21JcndpbkhhbGwiLChmdW5jdGlvbigpe3JldHVybiBScH0pKSxuLmQoZSwicmFuZG9tRXhwb25lbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiBQcH0pKSxuLmQoZSwic2NhbGVCYW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnB9KSksbi5kKGUsInNjYWxlUG9pbnQiLChmdW5jdGlvbigpe3JldHVybiBHcH0pKSxuLmQoZSwic2NhbGVJZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN5fSkpLG4uZChlLCJzY2FsZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHN5fSkpLG4uZChlLCJzY2FsZUxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ5fSkpLG4uZChlLCJzY2FsZVN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIF95fSkpLG4uZChlLCJzY2FsZU9yZGluYWwiLChmdW5jdGlvbigpe3JldHVybiBXcH0pKSxuLmQoZSwic2NhbGVJbXBsaWNpdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFwfSkpLG4uZChlLCJzY2FsZVBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEN5fSkpLG4uZChlLCJzY2FsZVNxcnQiLChmdW5jdGlvbigpe3JldHVybiBTeX0pKSxuLmQoZSwic2NhbGVRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF5fSkpLG4uZChlLCJzY2FsZVF1YW50aXplIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXl9KSksbi5kKGUsInNjYWxlVGhyZXNob2xkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT3l9KSksbi5kKGUsInNjYWxlVGltZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNtfSkpLG4uZChlLCJzY2FsZVV0YyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWwiLChmdW5jdGlvbigpe3JldHVybiB4bX0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gX219KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFBvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdtfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxTcXJ0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRW19KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFN5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGttfSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxRdWFudGlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFNtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ0xvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFtfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1BvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9tfSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1NxcnQiLChmdW5jdGlvbigpe3JldHVybiBCbX0pKSxuLmQoZSwic2NhbGVEaXZlcmdpbmdTeW1sb2ciLChmdW5jdGlvbigpe3JldHVybiBNbX0pKSxuLmQoZSwidGlja0Zvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGF5fSkpLG4uZChlLCJzY2hlbWVDYXRlZ29yeTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gRG19KSksbi5kKGUsInNjaGVtZUFjY2VudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIExtfSkpLG4uZChlLCJzY2hlbWVEYXJrMiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEltfSkpLG4uZChlLCJzY2hlbWVQYWlyZWQiLChmdW5jdGlvbigpe3JldHVybiBSbX0pKSxuLmQoZSwic2NoZW1lUGFzdGVsMSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZtfSkpLG4uZChlLCJzY2hlbWVQYXN0ZWwyIiwoZnVuY3Rpb24oKXtyZXR1cm4gUG19KSksbi5kKGUsInNjaGVtZVNldDEiLChmdW5jdGlvbigpe3JldHVybiBqbX0pKSxuLmQoZSwic2NoZW1lU2V0MiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFltfSkpLG4uZChlLCJzY2hlbWVTZXQzIiwoZnVuY3Rpb24oKXtyZXR1cm4gem19KSksbi5kKGUsInNjaGVtZVRhYmxlYXUxMCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJyQkciLChmdW5jdGlvbigpe3JldHVybiBXbX0pKSxuLmQoZSwic2NoZW1lQnJCRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBSR24iLChmdW5jdGlvbigpe3JldHVybiBIbX0pKSxuLmQoZSwic2NoZW1lUFJHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBpWUciLChmdW5jdGlvbigpe3JldHVybiBYbX0pKSxuLmQoZSwic2NoZW1lUGlZRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdtfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1T3IiLChmdW5jdGlvbigpe3JldHVybiBRbX0pKSxuLmQoZSwic2NoZW1lUHVPciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFptfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkQnUiLChmdW5jdGlvbigpe3JldHVybiBKbX0pKSxuLmQoZSwic2NoZW1lUmRCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEttfSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkR3kiLChmdW5jdGlvbigpe3JldHVybiBlYn0pKSxuLmQoZSwic2NoZW1lUmRHeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkWWxCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJifSkpLG4uZChlLCJzY2hlbWVSZFlsQnUiLChmdW5jdGlvbigpe3JldHVybiBuYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZFlsR24iLChmdW5jdGlvbigpe3JldHVybiBhYn0pKSxuLmQoZSwic2NoZW1lUmRZbEduIiwoZnVuY3Rpb24oKXtyZXR1cm4gaWJ9KSksbi5kKGUsImludGVycG9sYXRlU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBzYn0pKSxuLmQoZSwic2NoZW1lU3BlY3RyYWwiLChmdW5jdGlvbigpe3JldHVybiBvYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWJ9KSksbi5kKGUsInNjaGVtZUJ1R24iLChmdW5jdGlvbigpe3JldHVybiBjYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCdVB1IiwoZnVuY3Rpb24oKXtyZXR1cm4gaGJ9KSksbi5kKGUsInNjaGVtZUJ1UHUiLChmdW5jdGlvbigpe3JldHVybiBsYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gZGJ9KSksbi5kKGUsInNjaGVtZUduQnUiLChmdW5jdGlvbigpe3JldHVybiBmYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4geWJ9KSksbi5kKGUsInNjaGVtZU9yUmQiLChmdW5jdGlvbigpe3JldHVybiBwYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdUJ1R24iLChmdW5jdGlvbigpe3JldHVybiB2Yn0pKSxuLmQoZSwic2NoZW1lUHVCdUduIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2J9KSksbi5kKGUsImludGVycG9sYXRlUHVCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJifSkpLG4uZChlLCJzY2hlbWVQdUJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gbWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSkpLG4uZChlLCJzY2hlbWVQdVJkIiwoZnVuY3Rpb24oKXtyZXR1cm4geGJ9KSksbi5kKGUsImludGVycG9sYXRlUmRQdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdifSkpLG4uZChlLCJzY2hlbWVSZFB1IiwoZnVuY3Rpb24oKXtyZXR1cm4ga2J9KSksbi5kKGUsImludGVycG9sYXRlWWxHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gVGJ9KSksbi5kKGUsInNjaGVtZVlsR25CdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsR24iLChmdW5jdGlvbigpe3JldHVybiBTYn0pKSxuLmQoZSwic2NoZW1lWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIENifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsT3JCciIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1ifSkpLG4uZChlLCJzY2hlbWVZbE9yQnIiLChmdW5jdGlvbigpe3JldHVybiBBYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVZbE9yUmQiLChmdW5jdGlvbigpe3JldHVybiBCYn0pKSxuLmQoZSwic2NoZW1lWWxPclJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2J9KSksbi5kKGUsImludGVycG9sYXRlQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBEYn0pKSxuLmQoZSwic2NoZW1lQmx1ZXMiLChmdW5jdGlvbigpe3JldHVybiBOYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHcmVlbnMiLChmdW5jdGlvbigpe3JldHVybiBJYn0pKSxuLmQoZSwic2NoZW1lR3JlZW5zIiwoZnVuY3Rpb24oKXtyZXR1cm4gTGJ9KSksbi5kKGUsImludGVycG9sYXRlR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBGYn0pKSxuLmQoZSwic2NoZW1lR3JleXMiLChmdW5jdGlvbigpe3JldHVybiBSYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdXJwbGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gamJ9KSksbi5kKGUsInNjaGVtZVB1cnBsZXMiLChmdW5jdGlvbigpe3JldHVybiBQYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZWRzIiwoZnVuY3Rpb24oKXtyZXR1cm4gemJ9KSksbi5kKGUsInNjaGVtZVJlZHMiLChmdW5jdGlvbigpe3JldHVybiBZYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVPcmFuZ2VzIiwoZnVuY3Rpb24oKXtyZXR1cm4gJGJ9KSksbi5kKGUsInNjaGVtZU9yYW5nZXMiLChmdW5jdGlvbigpe3JldHVybiBVYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDaXZpZGlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gcWJ9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4RGVmYXVsdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJhaW5ib3ciLChmdW5jdGlvbigpe3JldHVybiBYYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVXYXJtIiwoZnVuY3Rpb24oKXtyZXR1cm4gVmJ9KSksbi5kKGUsImludGVycG9sYXRlQ29vbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVNpbmVib3ciLChmdW5jdGlvbigpe3JldHVybiBKYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUdXJibyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHR4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVZpcmlkaXMiLChmdW5jdGlvbigpe3JldHVybiBueH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVNYWdtYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZUluZmVybm8iLChmdW5jdGlvbigpe3JldHVybiBpeH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQbGFzbWEiLChmdW5jdGlvbigpe3JldHVybiBheH0pKSxuLmQoZSwiY3JlYXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gb3h9KSksbi5kKGUsImNyZWF0b3IiLChmdW5jdGlvbigpe3JldHVybiBuZX0pKSxuLmQoZSwibG9jYWwiLChmdW5jdGlvbigpe3JldHVybiBjeH0pKSxuLmQoZSwibWF0Y2hlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl0fSkpLG4uZChlLCJtb3VzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5ufSkpLG4uZChlLCJuYW1lc3BhY2UiLChmdW5jdGlvbigpe3JldHVybiB3dH0pKSxuLmQoZSwibmFtZXNwYWNlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGt0fSkpLG4uZChlLCJjbGllbnRQb2ludCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9ufSkpLG4uZChlLCJzZWxlY3QiLChmdW5jdGlvbigpe3JldHVybiBrZX0pKSxuLmQoZSwic2VsZWN0QWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHh9KSksbi5kKGUsInNlbGVjdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9lfSkpLG4uZChlLCJzZWxlY3RvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ0fSkpLG4uZChlLCJzZWxlY3RvckFsbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHB0fSkpLG4uZChlLCJzdHlsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx0fSkpLG4uZChlLCJ0b3VjaCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJufSkpLG4uZChlLCJ0b3VjaGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaHh9KSksbi5kKGUsIndpbmRvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE90fSkpLG4uZChlLCJldmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNlfSkpLG4uZChlLCJjdXN0b21FdmVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBlfSkpLG4uZChlLCJhcmMiLChmdW5jdGlvbigpe3JldHVybiBOeH0pKSxuLmQoZSwiYXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFB4fSkpLG4uZChlLCJsaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gRnh9KSksbi5kKGUsInBpZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp4fSkpLG4uZChlLCJhcmVhUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gSHh9KSksbi5kKGUsInJhZGlhbEFyZWEiLChmdW5jdGlvbigpe3JldHVybiBIeH0pKSxuLmQoZSwibGluZVJhZGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZ4fSkpLG4uZChlLCJyYWRpYWxMaW5lIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnh9KSksbi5kKGUsInBvaW50UmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3h9KSksbi5kKGUsImxpbmtIb3Jpem9udGFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbl99KSksbi5kKGUsImxpbmtWZXJ0aWNhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJffSkpLG4uZChlLCJsaW5rUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gaV99KSksbi5kKGUsInN5bWJvbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtffSkpLG4uZChlLCJzeW1ib2xzIiwoZnVuY3Rpb24oKXtyZXR1cm4gX199KSksbi5kKGUsInN5bWJvbENpcmNsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFffSkpLG4uZChlLCJzeW1ib2xDcm9zcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9ffSkpLG4uZChlLCJzeW1ib2xEaWFtb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gdV99KSksbi5kKGUsInN5bWJvbFNxdWFyZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBffSkpLG4uZChlLCJzeW1ib2xTdGFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gZF99KSksbi5kKGUsInN5bWJvbFRyaWFuZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ199KSksbi5kKGUsInN5bWJvbFd5ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhffSkpLG4uZChlLCJjdXJ2ZUJhc2lzQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQV99KSksbi5kKGUsImN1cnZlQmFzaXNPcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gT199KSksbi5kKGUsImN1cnZlQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiBDX30pKSxuLmQoZSwiY3VydmVCdW5kbGUiLChmdW5jdGlvbigpe3JldHVybiBOX30pKSxuLmQoZSwiY3VydmVDYXJkaW5hbENsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsT3BlbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gSV99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbUNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFffSkpLG4uZChlLCJjdXJ2ZUNhdG11bGxSb21PcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gVl99KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVffSkpLG4uZChlLCJjdXJ2ZUxpbmVhckNsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdffSkpLG4uZChlLCJjdXJ2ZUxpbmVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx4fSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5rfSkpLG4uZChlLCJjdXJ2ZU1vbm90b25lWSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJrfSkpLG4uZChlLCJjdXJ2ZU5hdHVyYWwiLChmdW5jdGlvbigpe3JldHVybiBva30pKSxuLmQoZSwiY3VydmVTdGVwIiwoZnVuY3Rpb24oKXtyZXR1cm4gY2t9KSksbi5kKGUsImN1cnZlU3RlcEFmdGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGt9KSksbi5kKGUsImN1cnZlU3RlcEJlZm9yZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVrfSkpLG4uZChlLCJzdGFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBrfSkpLG4uZChlLCJzdGFja09mZnNldEV4cGFuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlrfSkpLG4uZChlLCJzdGFja09mZnNldERpdmVyZ2luZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdrfSkpLG4uZChlLCJzdGFja09mZnNldE5vbmUiLChmdW5jdGlvbigpe3JldHVybiBoa30pKSxuLmQoZSwic3RhY2tPZmZzZXRTaWxob3VldHRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmt9KSksbi5kKGUsInN0YWNrT2Zmc2V0V2lnZ2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gbWt9KSksbi5kKGUsInN0YWNrT3JkZXJBcHBlYXJhbmNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmt9KSksbi5kKGUsInN0YWNrT3JkZXJBc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiBfa30pKSxuLmQoZSwic3RhY2tPcmRlckRlc2NlbmRpbmciLChmdW5jdGlvbigpe3JldHVybiB3a30pKSxuLmQoZSwic3RhY2tPcmRlckluc2lkZU91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVrfSkpLG4uZChlLCJzdGFja09yZGVyTm9uZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZrfSkpLG4uZChlLCJzdGFja09yZGVyUmV2ZXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRrfSkpLG4uZChlLCJ0aW1lSW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBEeX0pKSxuLmQoZSwidGltZU1pbGxpc2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gcGd9KSksbi5kKGUsInRpbWVNaWxsaXNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiB5Z30pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBwZ30pKSxuLmQoZSwidXRjTWlsbGlzZWNvbmRzIiwoZnVuY3Rpb24oKXtyZXR1cm4geWd9KSksbi5kKGUsInRpbWVTZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBoZ30pKSxuLmQoZSwidGltZVNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmZ30pKSxuLmQoZSwidXRjU2Vjb25kIiwoZnVuY3Rpb24oKXtyZXR1cm4gaGd9KSksbi5kKGUsInV0Y1NlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBmZ30pKSxuLmQoZSwidGltZU1pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNnfSkpLG4uZChlLCJ0aW1lTWludXRlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVnfSkpLG4uZChlLCJ0aW1lSG91ciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFnfSkpLG4uZChlLCJ0aW1lSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBvZ30pKSxuLmQoZSwidGltZURheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5nfSkpLG4uZChlLCJ0aW1lRGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJnfSkpLG4uZChlLCJ0aW1lV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp5fSkpLG4uZChlLCJ0aW1lV2Vla3MiLChmdW5jdGlvbigpe3JldHVybiBHeX0pKSxuLmQoZSwidGltZVN1bmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHp5fSkpLG4uZChlLCJ0aW1lU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEd5fSkpLG4uZChlLCJ0aW1lTW9uZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVXl9KSksbi5kKGUsInRpbWVNb25kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWHl9KSksbi5kKGUsInRpbWVUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gJHl9KSksbi5kKGUsInRpbWVUdWVzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFp5fSkpLG4uZChlLCJ0aW1lV2VkbmVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gcXl9KSksbi5kKGUsInRpbWVXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUXl9KSksbi5kKGUsInRpbWVUaHVyc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFd5fSkpLG4uZChlLCJ0aW1lVGh1cnNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gS3l9KSksbi5kKGUsInRpbWVGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBWeX0pKSxuLmQoZSwidGltZUZyaWRheXMiLChmdW5jdGlvbigpe3JldHVybiBKeX0pKSxuLmQoZSwidGltZVNhdHVyZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSHl9KSksbi5kKGUsInRpbWVTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiB0Z30pKSxuLmQoZSwidGltZU1vbnRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gUHl9KSksbi5kKGUsInRpbWVNb250aHMiLChmdW5jdGlvbigpe3JldHVybiBqeX0pKSxuLmQoZSwidGltZVllYXIiLChmdW5jdGlvbigpe3JldHVybiBJeX0pKSxuLmQoZSwidGltZVllYXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUnl9KSksbi5kKGUsInV0Y01pbnV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHltfSkpLG4uZChlLCJ1dGNNaW51dGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ219KSksbi5kKGUsInV0Y0hvdXIiLChmdW5jdGlvbigpe3JldHVybiBmbX0pKSxuLmQoZSwidXRjSG91cnMiLChmdW5jdGlvbigpe3JldHVybiBkbX0pKSxuLmQoZSwidXRjRGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmd9KSksbi5kKGUsInV0Y0RheXMiLChmdW5jdGlvbigpe3JldHVybiBEZ30pKSxuLmQoZSwidXRjV2VlayIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZnfSkpLG4uZChlLCJ1dGNXZWVrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVnfSkpLG4uZChlLCJ1dGNTdW5kYXkiLChmdW5jdGlvbigpe3JldHVybiB2Z30pKSxuLmQoZSwidXRjU3VuZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEVnfSkpLG4uZChlLCJ1dGNNb25kYXkiLChmdW5jdGlvbigpe3JldHVybiBtZ30pKSxuLmQoZSwidXRjTW9uZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRnfSkpLG4uZChlLCJ1dGNUdWVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYmd9KSksbi5kKGUsInV0Y1R1ZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2d9KSksbi5kKGUsInV0Y1dlZG5lc2RheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhnfSkpLG4uZChlLCJ1dGNXZWRuZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2d9KSksbi5kKGUsInV0Y1RodXJzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX2d9KSksbi5kKGUsInV0Y1RodXJzZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFnfSkpLG4uZChlLCJ1dGNGcmlkYXkiLChmdW5jdGlvbigpe3JldHVybiBrZ30pKSxuLmQoZSwidXRjRnJpZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1nfSkpLG4uZChlLCJ1dGNTYXR1cmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdnfSkpLG4uZChlLCJ1dGNTYXR1cmRheXMiLChmdW5jdGlvbigpe3JldHVybiBPZ30pKSxuLmQoZSwidXRjTW9udGgiLChmdW5jdGlvbigpe3JldHVybiB1bX0pKSxuLmQoZSwidXRjTW9udGhzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbG19KSksbi5kKGUsInV0Y1llYXIiLChmdW5jdGlvbigpe3JldHVybiBJZ30pKSxuLmQoZSwidXRjWWVhcnMiLChmdW5jdGlvbigpe3JldHVybiBSZ30pKSxuLmQoZSwidGltZUZvcm1hdERlZmF1bHRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBybX0pKSxuLmQoZSwidGltZUZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVnfSkpLG4uZChlLCJ0aW1lUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiAkZ30pKSxuLmQoZSwidXRjRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gcWd9KSksbi5kKGUsInV0Y1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gV2d9KSksbi5kKGUsInRpbWVGb3JtYXRMb2NhbGUiLChmdW5jdGlvbigpe3JldHVybiBZZ30pKSxuLmQoZSwiaXNvRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2t9KSksbi5kKGUsImlzb1BhcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2t9KSksbi5kKGUsIm5vdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpufSkpLG4uZChlLCJ0aW1lciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFufSkpLG4uZChlLCJ0aW1lckZsdXNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gV259KSksbi5kKGUsInRpbWVvdXQiLChmdW5jdGlvbigpe3JldHVybiBYbn0pKSxuLmQoZSwiaW50ZXJ2YWwiLChmdW5jdGlvbigpe3JldHVybiBBa30pKSxuLmQoZSwidHJhbnNpdGlvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpyfSkpLG4uZChlLCJhY3RpdmUiLChmdW5jdGlvbigpe3JldHVybiBacn0pKSxuLmQoZSwiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtyZXR1cm4gb3J9KSksbi5kKGUsInZvcm9ub2kiLChmdW5jdGlvbigpe3JldHVybiBkd30pKSxuLmQoZSwiem9vbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFN3fSkpLG4uZChlLCJ6b29tVHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXd9KSksbi5kKGUsInpvb21JZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZ3fSkpfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxNzIpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMThdLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLHk9WzEsMjddLGc9WzEsMjhdLHY9WzEsMjldLG09WzEsMzJdLGI9WzEsMzNdLHg9WzEsMzZdLF89WzEsNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM3LDQ4LDU4XSxrPVsxLDQ0XSx3PVs0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjgsMjksMzAsMzEsMzMsMzcsNDgsNThdLEU9WzQsNSwxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNiwzNyw0OCw1OF0sVD1bNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM3LDQ4LDU4XSxDPVs0Niw0Nyw0OF0sUz1bMSw0LDUsNywxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNSwzNiwzNyw0OCw1OF0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsb3BlbkRpcmVjdGl2ZToxMSx0eXBlRGlyZWN0aXZlOjEyLGNsb3NlRGlyZWN0aXZlOjEzLCI6IjoxNCxhcmdEaXJlY3RpdmU6MTUscGFydGljaXBhbnQ6MTYsYWN0b3I6MTcsQVM6MTgscmVzdE9mTGluZToxOSxzaWduYWw6MjAsYXV0b251bWJlcjoyMSxhY3RpdmF0ZToyMixkZWFjdGl2YXRlOjIzLG5vdGVfc3RhdGVtZW50OjI0LHRpdGxlOjI1LHRleHQyOjI2LGxvb3A6MjcsZW5kOjI4LHJlY3Q6Mjksb3B0OjMwLGFsdDozMSxlbHNlX3NlY3Rpb25zOjMyLHBhcjozMyxwYXJfc2VjdGlvbnM6MzQsYW5kOjM1LGVsc2U6MzYsbm90ZTozNyxwbGFjZW1lbnQ6Mzgsb3ZlcjozOSxhY3Rvcl9wYWlyOjQwLHNwYWNlTGlzdDo0MSwiLCI6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxzaWduYWx0eXBlOjQ1LCIrIjo0NiwiLSI6NDcsQUNUT1I6NDgsU09MSURfT1BFTl9BUlJPVzo0OSxET1RURURfT1BFTl9BUlJPVzo1MCxTT0xJRF9BUlJPVzo1MSxET1RURURfQVJST1c6NTIsU09MSURfQ1JPU1M6NTMsRE9UVEVEX0NST1NTOjU0LFNPTElEX1BPSU5UOjU1LERPVFRFRF9QT0lOVDo1NixUWFQ6NTcsb3Blbl9kaXJlY3RpdmU6NTgsdHlwZV9kaXJlY3RpdmU6NTksYXJnX2RpcmVjdGl2ZTo2MCxjbG9zZV9kaXJlY3RpdmU6NjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw3OiJTRCIsMTQ6IjoiLDE2OiJwYXJ0aWNpcGFudCIsMTg6IkFTIiwxOToicmVzdE9mTGluZSIsMjE6ImF1dG9udW1iZXIiLDIyOiJhY3RpdmF0ZSIsMjM6ImRlYWN0aXZhdGUiLDI1OiJ0aXRsZSIsMjc6Imxvb3AiLDI4OiJlbmQiLDI5OiJyZWN0IiwzMDoib3B0IiwzMToiYWx0IiwzMzoicGFyIiwzNToiYW5kIiwzNjoiZWxzZSIsMzc6Im5vdGUiLDM5OiJvdmVyIiw0MjoiLCIsNDM6ImxlZnRfb2YiLDQ0OiJyaWdodF9vZiIsNDY6IisiLDQ3OiItIiw0ODoiQUNUT1IiLDQ5OiJTT0xJRF9PUEVOX0FSUk9XIiw1MDoiRE9UVEVEX09QRU5fQVJST1ciLDUxOiJTT0xJRF9BUlJPVyIsNTI6IkRPVFRFRF9BUlJPVyIsNTM6IlNPTElEX0NST1NTIiw1NDoiRE9UVEVEX0NST1NTIiw1NToiU09MSURfUE9JTlQiLDU2OiJET1RURURfUE9JTlQiLDU3OiJUWFQiLDU4OiJvcGVuX2RpcmVjdGl2ZSIsNTk6InR5cGVfZGlyZWN0aXZlIiw2MDoiYXJnX2RpcmVjdGl2ZSIsNjE6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbNiw0XSxbNiw2XSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFszNCwxXSxbMzQsNF0sWzMyLDFdLFszMiw0XSxbMjQsNF0sWzI0LDRdLFs0MSwyXSxbNDEsMV0sWzQwLDNdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFsyMCw1XSxbMjAsNV0sWzIwLDRdLFsxNywxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFsyNiwxXSxbMTEsMV0sWzEyLDFdLFsxNSwxXSxbMTMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLmFwcGx5KGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjphW3MtM10uZGVzY3JpcHRpb249ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSx0aGlzLiQ9YVtzLTNdO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDE1OnIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9e3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6YVtzLTFdfTticmVhaztjYXNlIDE5OnRoaXMuJD1be3R5cGU6InNldFRpdGxlIix0ZXh0OmFbcy0xXX1dO2JyZWFrO2Nhc2UgMjA6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuTE9PUF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDphW3MtMl0sc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDIxOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJyZWN0U3RhcnQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjI6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyMzphW3MtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjQ6YVtzLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0xXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9BTkR9LGFbc11dKTticmVhaztjYXNlIDI5OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiZWxzZSIsYWx0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRUxTRX0sYVtzXV0pO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDphW3MtMl0sYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzE6YVtzLTJdPVtdLmNvbmNhdChhW3MtMV0sYVtzLTFdKS5zbGljZSgwLDIpLGFbcy0yXVswXT1hW3MtMl1bMF0uYWN0b3IsYVtzLTJdWzFdPWFbcy0yXVsxXS5hY3Rvcix0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnIuUExBQ0VNRU5ULk9WRVIsYWN0b3I6YVtzLTJdLnNsaWNlKDAsMiksdGV4dDphW3NdfV07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9W2Fbcy0yXSxhW3NdXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXIuUExBQ0VNRU5ULkxFRlRPRjticmVhaztjYXNlIDM3OnRoaXMuJD1yLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3MtNF0sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy00XS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtM10sbXNnOmFbc119LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19XTticmVhaztjYXNlIDM5OnRoaXMuJD1bYVtzLTRdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtNF0uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTNdLG1zZzphW3NdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjphW3MtNF19XTticmVhaztjYXNlIDQwOnRoaXMuJD1bYVtzLTNdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtM10uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTJdLG1zZzphW3NdfV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9e3R5cGU6ImFkZEFjdG9yIixhY3RvcjphW3NdfTticmVhaztjYXNlIDQyOnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDQ0OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfQ1JPU1M7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDQ5OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDUwOnRoaXMuJD1yLnBhcnNlTWVzc2FnZShhW3NdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UgNTE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA1NDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzZXF1ZW5jZSIpfX0sdGFibGU6W3szOjEsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezE6WzNdfSx7Mzo4LDQ6ZSw1Om4sNjo0LDc6ciwxMTo2LDU4Oml9LHszOjksNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezM6MTAsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sdChbMSw0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjksMzAsMzEsMzMsMzcsNDgsNThdLGEsezg6MTF9KSx7MTI6MTIsNTk6WzEsMTNdfSx7NTk6WzIsNTFdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzc6bSw0ODpiLDU4Oml9LHsxMzozNCwxNDpbMSwzNV0sNjE6eH0sdChbMTQsNjFdLFsyLDUyXSksdChfLFsyLDZdKSx7NjozMCwxMDozNywxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzc6bSw0ODpiLDU4Oml9LHQoXyxbMiw4XSksdChfLFsyLDldKSx7MTc6MzgsNDg6Yn0sezU6WzEsMzldfSx0KF8sWzIsMTVdKSx7MTc6NDAsNDg6Yn0sezE3OjQxLDQ4OmJ9LHs1OlsxLDQyXX0sezI2OjQzLDU3Omt9LHsxOTpbMSw0NV19LHsxOTpbMSw0Nl19LHsxOTpbMSw0N119LHsxOTpbMSw0OF19LHsxOTpbMSw0OV19LHQoXyxbMiwyNV0pLHs0NTo1MCw0OTpbMSw1MV0sNTA6WzEsNTJdLDUxOlsxLDUzXSw1MjpbMSw1NF0sNTM6WzEsNTVdLDU0OlsxLDU2XSw1NTpbMSw1N10sNTY6WzEsNThdfSx7Mzg6NTksMzk6WzEsNjBdLDQzOlsxLDYxXSw0NDpbMSw2Ml19LHQoWzUsMTgsNDIsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTddLFsyLDQxXSksezU6WzEsNjNdfSx7MTU6NjQsNjA6WzEsNjVdfSx7NTpbMiw1NF19LHQoXyxbMiw3XSksezU6WzEsNjddLDE4OlsxLDY2XX0sdChfLFsyLDE0XSksezU6WzEsNjhdfSx7NTpbMSw2OV19LHQoXyxbMiwxOF0pLHs1OlsxLDcwXX0sezU6WzIsNTBdfSx0KHcsYSx7ODo3MX0pLHQodyxhLHs4OjcyfSksdCh3LGEsezg6NzN9KSx0KEUsYSx7MzI6NzQsODo3NX0pLHQoVCxhLHszNDo3Niw4Ojc3fSksezE3OjgwLDQ2OlsxLDc4XSw0NzpbMSw3OV0sNDg6Yn0sdChDLFsyLDQyXSksdChDLFsyLDQzXSksdChDLFsyLDQ0XSksdChDLFsyLDQ1XSksdChDLFsyLDQ2XSksdChDLFsyLDQ3XSksdChDLFsyLDQ4XSksdChDLFsyLDQ5XSksezE3OjgxLDQ4OmJ9LHsxNzo4Myw0MDo4Miw0ODpifSx7NDg6WzIsMzZdfSx7NDg6WzIsMzddfSx0KFMsWzIsMTBdKSx7MTM6ODQsNjE6eH0sezYxOlsyLDUzXX0sezE5OlsxLDg1XX0sdChfLFsyLDEzXSksdChfLFsyLDE2XSksdChfLFsyLDE3XSksdChfLFsyLDE5XSksezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzEsODZdLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzc6bSw0ODpiLDU4Oml9LHs0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI4OlsxLDg3XSwyOTpwLDMwOnksMzE6ZywzMzp2LDM3Om0sNDg6Yiw1ODppfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMSw4OF0sMjk6cCwzMDp5LDMxOmcsMzM6diwzNzptLDQ4OmIsNTg6aX0sezI4OlsxLDg5XX0sezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzIsMjhdLDI5OnAsMzA6eSwzMTpnLDMzOnYsMzY6WzEsOTBdLDM3Om0sNDg6Yiw1ODppfSx7Mjg6WzEsOTFdfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMiwyNl0sMjk6cCwzMDp5LDMxOmcsMzM6diwzNTpbMSw5Ml0sMzc6bSw0ODpiLDU4Oml9LHsxNzo5Myw0ODpifSx7MTc6OTQsNDg6Yn0sezI2Ojk1LDU3Omt9LHsyNjo5Niw1NzprfSx7MjY6OTcsNTc6a30sezQyOlsxLDk4XSw1NzpbMiwzNV19LHs1OlsxLDk5XX0sezU6WzEsMTAwXX0sdChfLFsyLDIwXSksdChfLFsyLDIxXSksdChfLFsyLDIyXSksdChfLFsyLDIzXSksezE5OlsxLDEwMV19LHQoXyxbMiwyNF0pLHsxOTpbMSwxMDJdfSx7MjY6MTAzLDU3Omt9LHsyNjoxMDQsNTc6a30sezU6WzIsNDBdfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezE3OjEwNSw0ODpifSx0KFMsWzIsMTFdKSx0KF8sWzIsMTJdKSx0KEUsYSx7ODo3NSwzMjoxMDZ9KSx0KFQsYSx7ODo3NywzNDoxMDd9KSx7NTpbMiwzOF19LHs1OlsyLDM5XX0sezU3OlsyLDM0XX0sezI4OlsyLDI5XX0sezI4OlsyLDI3XX1dLGRlZmF1bHRBY3Rpb25zOns3OlsyLDUxXSw4OlsyLDFdLDk6WzIsMl0sMTA6WzIsM10sMzY6WzIsNTRdLDQ0OlsyLDUwXSw2MTpbMiwzNl0sNjI6WzIsMzddLDY1OlsyLDUzXSw5NTpbMiw0MF0sOTY6WzIsMzBdLDk3OlsyLDMxXSwxMDM6WzIsMzhdLDEwNDpbMiwzOV0sMTA1OlsyLDM0XSwxMDY6WzIsMjldLDEwNzpbMiwyN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxNPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNTg7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDU5O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNjE7Y2FzZSA0OnJldHVybiA2MDtjYXNlIDU6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwxNjtjYXNlIDEyOnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw0ODtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSwxODtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDI3O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwyOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzA7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMxO2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNjtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzM7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM1O2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDIzOnJldHVybiAyODtjYXNlIDI0OnJldHVybiA0MztjYXNlIDI1OnJldHVybiA0NDtjYXNlIDI2OnJldHVybiAzOTtjYXNlIDI3OnJldHVybiAzNztjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIyO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gNztjYXNlIDMyOnJldHVybiAyMTtjYXNlIDMzOnJldHVybiA0MjtjYXNlIDM0OnJldHVybiA1O2Nhc2UgMzU6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw0ODtjYXNlIDM2OnJldHVybiA1MTtjYXNlIDM3OnJldHVybiA1MjtjYXNlIDM4OnJldHVybiA0OTtjYXNlIDM5OnJldHVybiA1MDtjYXNlIDQwOnJldHVybiA1MztjYXNlIDQxOnJldHVybiA1NDtjYXNlIDQyOnJldHVybiA1NTtjYXNlIDQzOnJldHVybiA1NjtjYXNlIDQ0OnJldHVybiA1NztjYXNlIDQ1OnJldHVybiA0NjtjYXNlIDQ2OnJldHVybiA0NztjYXNlIDQ3OnJldHVybiA1O2Nhc2UgNDg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzpbXlwtPjpcbiw7XSs/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzooPzpbOl0/KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86ZW5kXGIpL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMSw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzLDhdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNCw4XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbNyw4LDEyXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbNyw4LDEzLDE0XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOls3LDgsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDgsOSwxMCwxMSwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIE8oKXt0aGlzLnl5PXt9fXJldHVybiBBLmxleGVyPU0sTy5wcm90b3R5cGU9QSxBLlBhcnNlcj1PLG5ldyBPfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5OSk7dC5leHBvcnRzPXtHcmFwaDpyLkdyYXBoLGpzb246bigzMDIpLGFsZzpuKDMwMyksdmVyc2lvbjpyLnZlcnNpb259fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lRGVlcDpuKDMxNCksY29uc3RhbnQ6big4NyksZGVmYXVsdHM6bigxNTUpLGVhY2g6big4OCksZmlsdGVyOm4oMTI5KSxmaW5kOm4oMzE1KSxmbGF0dGVuOm4oMTU3KSxmb3JFYWNoOm4oMTI3KSxmb3JJbjpuKDMyMCksaGFzOm4oOTQpLGlzVW5kZWZpbmVkOm4oMTQwKSxsYXN0Om4oMzIxKSxtYXA6bigxNDEpLG1hcFZhbHVlczpuKDMyMiksbWF4Om4oMzIzKSxtZXJnZTpuKDMyNSksbWluOm4oMzMwKSxtaW5CeTpuKDMzMSksbm93Om4oMzMyKSxwaWNrOm4oMTYyKSxyYW5nZTpuKDE2MykscmVkdWNlOm4oMTQzKSxzb3J0Qnk6bigzMzkpLHVuaXF1ZUlkOm4oMTY0KSx2YWx1ZXM6bigxNDgpLHppcE9iamVjdDpuKDM0NCl9fWNhdGNoKHQpe31yfHwocj13aW5kb3cuXyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49QXJyYXkuaXNBcnJheTt0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUsbil7Ci8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBDaHJpcyBQZXR0aXR0CiAqCiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwogKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogKgogKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQogKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KICogVEhFIFNPRlRXQVJFLgogKi8KdC5leHBvcnRzPXtncmFwaGxpYjpuKDMxMiksZGFncmU6bigxNTQpLGludGVyc2VjdDpuKDM2OSkscmVuZGVyOm4oMzcxKSx1dGlsOm4oMTQpLHZlcnNpb246bigzODMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGg7ZnVuY3Rpb24gYSh0LGUsbixpKXt2YXIgYTtkb3thPXIudW5pcXVlSWQoaSl9d2hpbGUodC5oYXNOb2RlKGEpKTtyZXR1cm4gbi5kdW1teT1lLHQuc2V0Tm9kZShhLG4pLGF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5tYXgoci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSkucmFuaztpZighci5pc1VuZGVmaW5lZChuKSlyZXR1cm4gbn0pKSl9dC5leHBvcnRzPXthZGREdW1teU5vZGU6YSxzaW1wbGlmeTpmdW5jdGlvbih0KXt2YXIgZT0obmV3IGkpLnNldEdyYXBoKHQuZ3JhcGgoKSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe2Uuc2V0Tm9kZShuLHQubm9kZShuKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9ZS5lZGdlKG4udixuLncpfHx7d2VpZ2h0OjAsbWlubGVuOjF9LGk9dC5lZGdlKG4pO2Uuc2V0RWRnZShuLnYsbi53LHt3ZWlnaHQ6ci53ZWlnaHQraS53ZWlnaHQsbWlubGVuOk1hdGgubWF4KHIubWlubGVuLGkubWlubGVuKX0pfSkpLGV9LGFzTm9uQ29tcG91bmRHcmFwaDpmdW5jdGlvbih0KXt2YXIgZT1uZXcgaSh7bXVsdGlncmFwaDp0LmlzTXVsdGlncmFwaCgpfSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dC5jaGlsZHJlbihuKS5sZW5ndGh8fGUuc2V0Tm9kZShuLHQubm9kZShuKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7ZS5zZXRFZGdlKG4sdC5lZGdlKG4pKX0pKSxlfSxzdWNjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0Lm91dEVkZ2VzKGUpLChmdW5jdGlvbihlKXtuW2Uud109KG5bZS53XXx8MCkrdC5lZGdlKGUpLndlaWdodH0pKSxufSkpO3JldHVybiByLnppcE9iamVjdCh0Lm5vZGVzKCksZSl9LHByZWRlY2Vzc29yV2VpZ2h0czpmdW5jdGlvbih0KXt2YXIgZT1yLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXt9O3JldHVybiByLmZvckVhY2godC5pbkVkZ2VzKGUpLChmdW5jdGlvbihlKXtuW2Uudl09KG5bZS52XXx8MCkrdC5lZGdlKGUpLndlaWdodH0pKSxufSkpO3JldHVybiByLnppcE9iamVjdCh0Lm5vZGVzKCksZSl9LGludGVyc2VjdFJlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC54LGE9dC55LG89ZS54LWkscz1lLnktYSxjPXQud2lkdGgvMix1PXQuaGVpZ2h0LzI7aWYoIW8mJiFzKXRocm93IG5ldyBFcnJvcigiTm90IHBvc3NpYmxlIHRvIGZpbmQgaW50ZXJzZWN0aW9uIGluc2lkZSBvZiB0aGUgcmVjdGFuZ2xlIik7TWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPXUqby9zLHI9dSk6KG88MCYmKGM9LWMpLG49YyxyPWMqcy9vKTtyZXR1cm57eDppK24seTphK3J9fSxidWlsZExheWVyTWF0cml4OmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHIucmFuZ2Uobyh0KSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pLGE9aS5yYW5rO3IuaXNVbmRlZmluZWQoYSl8fChlW2FdW2kub3JkZXJdPW4pfSkpLGV9LG5vcm1hbGl6ZVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobik7ci5oYXMoaSwicmFuayIpJiYoaS5yYW5rLT1lKX0pKX0scmVtb3ZlRW1wdHlSYW5rczpmdW5jdGlvbih0KXt2YXIgZT1yLm1pbihyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksbj1bXTtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihyKXt2YXIgaT10Lm5vZGUocikucmFuay1lO25baV18fChuW2ldPVtdKSxuW2ldLnB1c2gocil9KSk7dmFyIGk9MCxhPXQuZ3JhcGgoKS5ub2RlUmFua0ZhY3RvcjtyLmZvckVhY2gobiwoZnVuY3Rpb24oZSxuKXtyLmlzVW5kZWZpbmVkKGUpJiZuJWEhPTA/LS1pOmkmJnIuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkucmFuays9aX0pKX0pKX0sYWRkQm9yZGVyTm9kZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17d2lkdGg6MCxoZWlnaHQ6MH07YXJndW1lbnRzLmxlbmd0aD49NCYmKGkucmFuaz1uLGkub3JkZXI9cik7cmV0dXJuIGEodCwiYm9yZGVyIixpLGUpfSxtYXhSYW5rOm8scGFydGl0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49e2xoczpbXSxyaHM6W119O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCl7ZSh0KT9uLmxocy5wdXNoKHQpOm4ucmhzLnB1c2godCl9KSksbn0sdGltZTpmdW5jdGlvbih0LGUpe3ZhciBuPXIubm93KCk7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtjb25zb2xlLmxvZyh0KyIgdGltZTogIisoci5ub3coKS1uKSsibXMiKX19LG5vdGltZTpmdW5jdGlvbih0LGUpe3JldHVybiBlKCl9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Z3JhcGhsaWI6bigyMCksbGF5b3V0Om4oMzEzKSxkZWJ1ZzpuKDM2NyksdXRpbDp7dGltZTpuKDgpLnRpbWUsbm90aW1lOm4oOCkubm90aW1lfSx2ZXJzaW9uOm4oMzY4KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTczKSxpPW4oMTc0KSxhPW4oMTc1KSxvPXtjaGFubmVsOnIuZGVmYXVsdCxsYW5nOmkuZGVmYXVsdCx1bml0OmEuZGVmYXVsdH07ZS5kZWZhdWx0PW99LGZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuZXhwb3J0cz17fTtmdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcyh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09YXx8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6YX1jYXRjaCh0KXtuPWF9dHJ5e3I9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6b31jYXRjaCh0KXtyPW99fSgpO3ZhciBjLHU9W10sbD0hMSxoPS0xO2Z1bmN0aW9uIGYoKXtsJiZjJiYobD0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFsKXt2YXIgdD1zKGYpO2w9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxsPSExLGZ1bmN0aW9uKHQpe2lmKHI9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigocj09PW98fCFyKSYmY2xlYXJUaW1lb3V0KXJldHVybiByPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e3IodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiByLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gci5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIHAodCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiB5KCl7fWkubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTt1LnB1c2gobmV3IHAodCxlKSksMSE9PXUubGVuZ3RofHxsfHxzKGQpfSxwLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxpLnRpdGxlPSJicm93c2VyIixpLmJyb3dzZXI9ITAsaS5lbnY9e30saS5hcmd2PVtdLGkudmVyc2lvbj0iIixpLnZlcnNpb25zPXt9LGkub249eSxpLmFkZExpc3RlbmVyPXksaS5vbmNlPXksaS5vZmY9eSxpLnJlbW92ZUxpc3RlbmVyPXksaS5yZW1vdmVBbGxMaXN0ZW5lcnM9eSxpLmVtaXQ9eSxpLnByZXBlbmRMaXN0ZW5lcj15LGkucHJlcGVuZE9uY2VMaXN0ZW5lcj15LGkubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxpLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxpLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0saS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxpLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lOm4oMjAwKSxjb25zdGFudDpuKDg3KSxlYWNoOm4oODgpLGZpbHRlcjpuKDEyOSksaGFzOm4oOTQpLGlzQXJyYXk6big1KSxpc0VtcHR5Om4oMjc3KSxpc0Z1bmN0aW9uOm4oMzgpLGlzVW5kZWZpbmVkOm4oMTQwKSxrZXlzOm4oMzApLG1hcDpuKDE0MSkscmVkdWNlOm4oMTQzKSxzaXplOm4oMjgwKSx0cmFuc2Zvcm06bigyODYpLHVuaW9uOm4oMjg3KSx2YWx1ZXM6bigxNDgpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbCE9dCYmKCJvYmplY3QiPT1lfHwiZnVuY3Rpb24iPT1lKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ0KTt0LmV4cG9ydHM9e2lzU3ViZ3JhcGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQuY2hpbGRyZW4oZSkubGVuZ3RofSxlZGdlVG9JZDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LnYpKyI6IithKHQudykrIjoiK2EodC5uYW1lKX0sYXBwbHlTdHlsZTpmdW5jdGlvbih0LGUpe2UmJnQuYXR0cigic3R5bGUiLGUpfSxhcHBseUNsYXNzOmZ1bmN0aW9uKHQsZSxuKXtlJiZ0LmF0dHIoImNsYXNzIixlKS5hdHRyKCJjbGFzcyIsbisiICIrdC5hdHRyKCJjbGFzcyIpKX0sYXBwbHlUcmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ncmFwaCgpO2lmKHIuaXNQbGFpbk9iamVjdChuKSl7dmFyIGk9bi50cmFuc2l0aW9uO2lmKHIuaXNGdW5jdGlvbihpKSlyZXR1cm4gaSh0KX1yZXR1cm4gdH19O3ZhciBpPS86L2c7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdD9TdHJpbmcodCkucmVwbGFjZShpLCJcXDoiKToiIn19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsN10sbj1bMSw2XSxyPVsxLDE0XSxpPVsxLDI1XSxhPVsxLDI4XSxvPVsxLDI2XSxzPVsxLDI3XSxjPVsxLDI5XSx1PVsxLDMwXSxsPVsxLDMxXSxoPVsxLDMyXSxmPVsxLDM1XSxkPVsxLDM2XSxwPVsxLDM3XSx5PVsxLDM4XSxnPVsxMCwxOV0sdj1bMSw1MF0sbT1bMSw1MV0sYj1bMSw1Ml0seD1bMSw1M10sXz1bMSw1NF0saz1bMSw1NV0sdz1bMTAsMTksMjYsMzMsMzQsNDIsNDUsNDYsNDcsNDgsNDksNTAsNTUsNTddLEU9WzEwLDE5LDI0LDI2LDMzLDM0LDM4LDQyLDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDU1LDU3LDcyLDczLDc0LDc1XSxUPVsxMCwxMywxNywxOV0sQz1bNDIsNzIsNzMsNzQsNzVdLFM9WzQyLDQ5LDUwLDcyLDczLDc0LDc1XSxBPVs0Miw0NSw0Niw0Nyw0OCw3Miw3Myw3NCw3NV0sTT1bMTAsMTksMjZdLE89WzEsODddLEI9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxncmFwaENvbmZpZzo2LG9wZW5EaXJlY3RpdmU6Nyx0eXBlRGlyZWN0aXZlOjgsY2xvc2VEaXJlY3RpdmU6OSxORVdMSU5FOjEwLCI6IjoxMSxhcmdEaXJlY3RpdmU6MTIsb3Blbl9kaXJlY3RpdmU6MTMsdHlwZV9kaXJlY3RpdmU6MTQsYXJnX2RpcmVjdGl2ZToxNSxjbG9zZV9kaXJlY3RpdmU6MTYsQ0xBU1NfRElBR1JBTToxNyxzdGF0ZW1lbnRzOjE4LEVPRjoxOSxzdGF0ZW1lbnQ6MjAsY2xhc3NOYW1lOjIxLGFscGhhTnVtVG9rZW46MjIsY2xhc3NMaXRlcmFsTmFtZToyMyxHRU5FUklDVFlQRToyNCxyZWxhdGlvblN0YXRlbWVudDoyNSxMQUJFTDoyNixjbGFzc1N0YXRlbWVudDoyNyxtZXRob2RTdGF0ZW1lbnQ6MjgsYW5ub3RhdGlvblN0YXRlbWVudDoyOSxjbGlja1N0YXRlbWVudDozMCxjc3NDbGFzc1N0YXRlbWVudDozMSxDTEFTUzozMixTVFlMRV9TRVBBUkFUT1I6MzMsU1RSVUNUX1NUQVJUOjM0LG1lbWJlcnM6MzUsU1RSVUNUX1NUT1A6MzYsQU5OT1RBVElPTl9TVEFSVDozNyxBTk5PVEFUSU9OX0VORDozOCxNRU1CRVI6MzksU0VQQVJBVE9SOjQwLHJlbGF0aW9uOjQxLFNUUjo0MixyZWxhdGlvblR5cGU6NDMsbGluZVR5cGU6NDQsQUdHUkVHQVRJT046NDUsRVhURU5TSU9OOjQ2LENPTVBPU0lUSU9OOjQ3LERFUEVOREVOQ1k6NDgsTElORTo0OSxET1RURURfTElORTo1MCxDQUxMQkFDSzo1MSxMSU5LOjUyLExJTktfVEFSR0VUOjUzLENMSUNLOjU0LENBTExCQUNLX05BTUU6NTUsQ0FMTEJBQ0tfQVJHUzo1NixIUkVGOjU3LENTU0NMQVNTOjU4LGNvbW1lbnRUb2tlbjo1OSx0ZXh0VG9rZW46NjAsZ3JhcGhDb2RlVG9rZW5zOjYxLHRleHROb1RhZ3NUb2tlbjo2MixUQUdTVEFSVDo2MyxUQUdFTkQ6NjQsIj09Ijo2NSwiLS0iOjY2LFBDVDo2NyxERUZBVUxUOjY4LFNQQUNFOjY5LE1JTlVTOjcwLGtleXdvcmRzOjcxLFVOSUNPREVfVEVYVDo3MixOVU06NzMsQUxQSEE6NzQsQlFVT1RFX1NUUjo3NSwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsMTA6Ik5FV0xJTkUiLDExOiI6IiwxMzoib3Blbl9kaXJlY3RpdmUiLDE0OiJ0eXBlX2RpcmVjdGl2ZSIsMTU6ImFyZ19kaXJlY3RpdmUiLDE2OiJjbG9zZV9kaXJlY3RpdmUiLDE3OiJDTEFTU19ESUFHUkFNIiwxOToiRU9GIiwyNDoiR0VORVJJQ1RZUEUiLDI2OiJMQUJFTCIsMzI6IkNMQVNTIiwzMzoiU1RZTEVfU0VQQVJBVE9SIiwzNDoiU1RSVUNUX1NUQVJUIiwzNjoiU1RSVUNUX1NUT1AiLDM3OiJBTk5PVEFUSU9OX1NUQVJUIiwzODoiQU5OT1RBVElPTl9FTkQiLDM5OiJNRU1CRVIiLDQwOiJTRVBBUkFUT1IiLDQyOiJTVFIiLDQ1OiJBR0dSRUdBVElPTiIsNDY6IkVYVEVOU0lPTiIsNDc6IkNPTVBPU0lUSU9OIiw0ODoiREVQRU5ERU5DWSIsNDk6IkxJTkUiLDUwOiJET1RURURfTElORSIsNTE6IkNBTExCQUNLIiw1MjoiTElOSyIsNTM6IkxJTktfVEFSR0VUIiw1NDoiQ0xJQ0siLDU1OiJDQUxMQkFDS19OQU1FIiw1NjoiQ0FMTEJBQ0tfQVJHUyIsNTc6IkhSRUYiLDU4OiJDU1NDTEFTUyIsNjE6ImdyYXBoQ29kZVRva2VucyIsNjM6IlRBR1NUQVJUIiw2NDoiVEFHRU5EIiw2NToiPT0iLDY2OiItLSIsNjc6IlBDVCIsNjg6IkRFRkFVTFQiLDY5OiJTUEFDRSIsNzA6Ik1JTlVTIiw3MToia2V5d29yZHMiLDcyOiJVTklDT0RFX1RFWFQiLDczOiJOVU0iLDc0OiJBTFBIQSIsNzU6IkJRVU9URV9TVFIifSxwcm9kdWN0aW9uc186WzAsWzMsMV0sWzMsMl0sWzQsMV0sWzUsNF0sWzUsNl0sWzcsMV0sWzgsMV0sWzEyLDFdLFs5LDFdLFs2LDRdLFsxOCwxXSxbMTgsMl0sWzE4LDNdLFsyMSwxXSxbMjEsMV0sWzIxLDJdLFsyMSwyXSxbMjEsMl0sWzIwLDFdLFsyMCwyXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjcsMl0sWzI3LDRdLFsyNyw1XSxbMjcsN10sWzI5LDRdLFszNSwxXSxbMzUsMl0sWzI4LDFdLFsyOCwyXSxbMjgsMV0sWzI4LDFdLFsyNSwzXSxbMjUsNF0sWzI1LDRdLFsyNSw1XSxbNDEsM10sWzQxLDJdLFs0MSwyXSxbNDEsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzQzLDFdLFs0NCwxXSxbNDQsMV0sWzMwLDNdLFszMCw0XSxbMzAsM10sWzMwLDRdLFszMCw0XSxbMzAsNV0sWzMwLDNdLFszMCw0XSxbMzAsNF0sWzMwLDVdLFszMCwzXSxbMzAsNF0sWzMwLDRdLFszMCw1XSxbMzEsM10sWzU5LDFdLFs1OSwxXSxbNjAsMV0sWzYwLDFdLFs2MCwxXSxbNjAsMV0sWzYwLDFdLFs2MCwxXSxbNjAsMV0sWzYyLDFdLFs2MiwxXSxbNjIsMV0sWzYyLDFdLFsyMiwxXSxbMjIsMV0sWzIyLDFdLFsyMywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDY6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDc6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgOTpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJjbGFzcyIpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE2OnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDE3OmNhc2UgMTg6dGhpcy4kPWFbcy0xXSsifiIrYVtzXTticmVhaztjYXNlIDE5OnIuYWRkUmVsYXRpb24oYVtzXSk7YnJlYWs7Y2FzZSAyMDphW3MtMV0udGl0bGU9ci5jbGVhbnVwTGFiZWwoYVtzXSksci5hZGRSZWxhdGlvbihhW3MtMV0pO2JyZWFrO2Nhc2UgMjc6ci5hZGRDbGFzcyhhW3NdKTticmVhaztjYXNlIDI4OnIuYWRkQ2xhc3MoYVtzLTJdKSxyLnNldENzc0NsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDI5OnIuYWRkQ2xhc3MoYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzMDpyLmFkZENsYXNzKGFbcy01XSksci5zZXRDc3NDbGFzcyhhW3MtNV0sYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTVdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzMTpyLmFkZEFubm90YXRpb24oYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMzI6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDMzOmFbc10ucHVzaChhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzQ6YnJlYWs7Y2FzZSAzNTpyLmFkZE1lbWJlcihhW3MtMV0sci5jbGVhbnVwTGFiZWwoYVtzXSkpO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzNzpicmVhaztjYXNlIDM4OnRoaXMuJD17aWQxOmFbcy0yXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSAzOTp0aGlzLiQ9e2lkMTphW3MtM10saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOmFbcy0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDA6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6YVtzLTFdfTticmVhaztjYXNlIDQxOnRoaXMuJD17aWQxOmFbcy00XSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6YVtzLTNdLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0Mjp0aGlzLiQ9e3R5cGUxOmFbcy0yXSx0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA0NDp0aGlzLiQ9e3R5cGUxOmFbcy0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA0Njp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9ci5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXIubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA1MjpjYXNlIDU4OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDUzOmNhc2UgNTk6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDU0OmNhc2UgNjI6dGhpcy4kPWFbcy0yXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDU2OmNhc2UgNjQ6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDU3OmNhc2UgNjU6dGhpcy4kPWFbcy00XSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSA2MDp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPWFbcy00XSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA2Mzp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjY6ci5zZXRDc3NDbGFzcyhhW3MtMV0sYVtzXSl9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OjUsMTM6ZSwxNzpufSx7MTpbM119LHsxOlsyLDFdfSx7Mzo4LDQ6Miw1OjMsNjo0LDc6NSwxMzplLDE3Om59LHsxOlsyLDNdfSx7ODo5LDE0OlsxLDEwXX0sezEwOlsxLDExXX0sezE0OlsyLDZdfSx7MTpbMiwyXX0sezk6MTIsMTE6WzEsMTNdLDE2OnJ9LHQoWzExLDE2XSxbMiw3XSksezU6MjMsNzo1LDEzOmUsMTg6MTUsMjA6MTYsMjE6MjQsMjI6MzMsMjM6MzQsMjU6MTcsMjc6MTgsMjg6MTksMjk6MjAsMzA6MjEsMzE6MjIsMzI6aSwzNzphLDM5Om8sNDA6cyw1MTpjLDUyOnUsNTQ6bCw1ODpoLDcyOmYsNzM6ZCw3NDpwLDc1Onl9LHsxMDpbMSwzOV19LHsxMjo0MCwxNTpbMSw0MV19LHsxMDpbMiw5XX0sezE5OlsxLDQyXX0sezEwOlsxLDQzXSwxOTpbMiwxMV19LHQoZyxbMiwxOV0sezI2OlsxLDQ0XX0pLHQoZyxbMiwyMV0pLHQoZyxbMiwyMl0pLHQoZyxbMiwyM10pLHQoZyxbMiwyNF0pLHQoZyxbMiwyNV0pLHQoZyxbMiwyNl0pLHQoZyxbMiwzNF0sezQxOjQ1LDQzOjQ4LDQ0OjQ5LDI2OlsxLDQ3XSw0MjpbMSw0Nl0sNDU6diw0NjptLDQ3OmIsNDg6eCw0OTpfLDUwOmt9KSx7MjE6NTYsMjI6MzMsMjM6MzQsNzI6Ziw3MzpkLDc0OnAsNzU6eX0sdChnLFsyLDM2XSksdChnLFsyLDM3XSksezIyOjU3LDcyOmYsNzM6ZCw3NDpwfSx7MjE6NTgsMjI6MzMsMjM6MzQsNzI6Ziw3MzpkLDc0OnAsNzU6eX0sezIxOjU5LDIyOjMzLDIzOjM0LDcyOmYsNzM6ZCw3NDpwLDc1Onl9LHsyMTo2MCwyMjozMywyMzozNCw3MjpmLDczOmQsNzQ6cCw3NTp5fSx7NDI6WzEsNjFdfSx0KHcsWzIsMTRdLHsyMjozMywyMzozNCwyMTo2MiwyNDpbMSw2M10sNzI6Ziw3MzpkLDc0OnAsNzU6eX0pLHQodyxbMiwxNV0sezI0OlsxLDY0XX0pLHQoRSxbMiw4MF0pLHQoRSxbMiw4MV0pLHQoRSxbMiw4Ml0pLHQoWzEwLDE5LDI0LDI2LDMzLDM0LDQyLDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDU1LDU3XSxbMiw4M10pLHQoVCxbMiw0XSksezk6NjUsMTY6cn0sezE2OlsyLDhdfSx7MTpbMiwxMF19LHs1OjIzLDc6NSwxMzplLDE4OjY2LDE5OlsyLDEyXSwyMDoxNiwyMToyNCwyMjozMywyMzozNCwyNToxNywyNzoxOCwyODoxOSwyOToyMCwzMDoyMSwzMToyMiwzMjppLDM3OmEsMzk6byw0MDpzLDUxOmMsNTI6dSw1NDpsLDU4OmgsNzI6Ziw3MzpkLDc0OnAsNzU6eX0sdChnLFsyLDIwXSksezIxOjY3LDIyOjMzLDIzOjM0LDQyOlsxLDY4XSw3MjpmLDczOmQsNzQ6cCw3NTp5fSx7NDE6NjksNDM6NDgsNDQ6NDksNDU6diw0NjptLDQ3OmIsNDg6eCw0OTpfLDUwOmt9LHQoZyxbMiwzNV0pLHs0NDo3MCw0OTpfLDUwOmt9LHQoQyxbMiw0NV0sezQzOjcxLDQ1OnYsNDY6bSw0NzpiLDQ4Onh9KSx0KFMsWzIsNDZdKSx0KFMsWzIsNDddKSx0KFMsWzIsNDhdKSx0KFMsWzIsNDldKSx0KEEsWzIsNTBdKSx0KEEsWzIsNTFdKSx0KGcsWzIsMjddLHszMzpbMSw3Ml0sMzQ6WzEsNzNdfSksezM4OlsxLDc0XX0sezQyOlsxLDc1XX0sezQyOlsxLDc2XX0sezU1OlsxLDc3XSw1NzpbMSw3OF19LHsyMjo3OSw3MjpmLDczOmQsNzQ6cH0sdCh3LFsyLDE2XSksdCh3LFsyLDE3XSksdCh3LFsyLDE4XSksezEwOlsxLDgwXX0sezE5OlsyLDEzXX0sdChNLFsyLDM4XSksezIxOjgxLDIyOjMzLDIzOjM0LDcyOmYsNzM6ZCw3NDpwLDc1Onl9LHsyMTo4MiwyMjozMywyMzozNCw0MjpbMSw4M10sNzI6Ziw3MzpkLDc0OnAsNzU6eX0sdChDLFsyLDQ0XSx7NDM6ODQsNDU6diw0NjptLDQ3OmIsNDg6eH0pLHQoQyxbMiw0M10pLHsyMjo4NSw3MjpmLDczOmQsNzQ6cH0sezM1Ojg2LDM5Ok99LHsyMTo4OCwyMjozMywyMzozNCw3MjpmLDczOmQsNzQ6cCw3NTp5fSx0KGcsWzIsNTJdLHs0MjpbMSw4OV19KSx0KGcsWzIsNTRdLHs0MjpbMSw5MV0sNTM6WzEsOTBdfSksdChnLFsyLDU4XSx7NDI6WzEsOTJdLDU2OlsxLDkzXX0pLHQoZyxbMiw2Ml0sezQyOlsxLDk1XSw1MzpbMSw5NF19KSx0KGcsWzIsNjZdKSx0KFQsWzIsNV0pLHQoTSxbMiw0MF0pLHQoTSxbMiwzOV0pLHsyMTo5NiwyMjozMywyMzozNCw3MjpmLDczOmQsNzQ6cCw3NTp5fSx0KEMsWzIsNDJdKSx0KGcsWzIsMjhdLHszNDpbMSw5N119KSx7MzY6WzEsOThdfSx7MzU6OTksMzY6WzIsMzJdLDM5Ok99LHQoZyxbMiwzMV0pLHQoZyxbMiw1M10pLHQoZyxbMiw1NV0pLHQoZyxbMiw1Nl0sezUzOlsxLDEwMF19KSx0KGcsWzIsNTldKSx0KGcsWzIsNjBdLHs0MjpbMSwxMDFdfSksdChnLFsyLDYzXSksdChnLFsyLDY0XSx7NTM6WzEsMTAyXX0pLHQoTSxbMiw0MV0pLHszNToxMDMsMzk6T30sdChnLFsyLDI5XSksezM2OlsyLDMzXX0sdChnLFsyLDU3XSksdChnLFsyLDYxXSksdChnLFsyLDY1XSksezM2OlsxLDEwNF19LHQoZyxbMiwzMF0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw0OlsyLDNdLDc6WzIsNl0sODpbMiwyXSwxNDpbMiw5XSw0MTpbMiw4XSw0MjpbMiwxMF0sNjY6WzIsMTNdLDk5OlsyLDMzXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE49e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxMztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMTQ7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDExO2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwxNjtjYXNlIDQ6cmV0dXJuIDE1O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMDtjYXNlIDg6YnJlYWs7Y2FzZSA5OmNhc2UgMTA6cmV0dXJuIDE3O2Nhc2UgMTE6cmV0dXJuIHRoaXMuYmVnaW4oInN0cnVjdCIpLDM0O2Nhc2UgMTI6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMTM6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMzY7Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiJNRU1CRVIiO2Nhc2UgMTc6cmV0dXJuIDMyO2Nhc2UgMTg6cmV0dXJuIDU4O2Nhc2UgMTk6cmV0dXJuIDUxO2Nhc2UgMjA6cmV0dXJuIDUyO2Nhc2UgMjE6cmV0dXJuIDU0O2Nhc2UgMjI6cmV0dXJuIDM3O2Nhc2UgMjM6cmV0dXJuIDM4O2Nhc2UgMjQ6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjY6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDI3OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMjg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjk6cmV0dXJuIlNUUiI7Y2FzZSAzMDp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgMzE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzI6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgMzM6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMzQ6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzU6cmV0dXJuIDU3O2Nhc2UgMzY6dGhpcy5iZWdpbigiY2FsbGJhY2tfbmFtZSIpO2JyZWFrO2Nhc2UgMzc6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzg6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrX2FyZ3MiKTticmVhaztjYXNlIDM5OnJldHVybiA1NTtjYXNlIDQwOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQxOnJldHVybiA1NjtjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OnJldHVybiA1MztjYXNlIDQ2OmNhc2UgNDc6cmV0dXJuIDQ2O2Nhc2UgNDg6Y2FzZSA0OTpyZXR1cm4gNDg7Y2FzZSA1MDpyZXR1cm4gNDc7Y2FzZSA1MTpyZXR1cm4gNDU7Y2FzZSA1MjpyZXR1cm4gNDk7Y2FzZSA1MzpyZXR1cm4gNTA7Y2FzZSA1NDpyZXR1cm4gMjY7Y2FzZSA1NTpyZXR1cm4gMzM7Y2FzZSA1NjpyZXR1cm4gNzA7Y2FzZSA1NzpyZXR1cm4iRE9UIjtjYXNlIDU4OnJldHVybiJQTFVTIjtjYXNlIDU5OnJldHVybiA2NztjYXNlIDYwOmNhc2UgNjE6cmV0dXJuIkVRVUFMUyI7Y2FzZSA2MjpyZXR1cm4gNzQ7Y2FzZSA2MzpyZXR1cm4iUFVOQ1RVQVRJT04iO2Nhc2UgNjQ6cmV0dXJuIDczO2Nhc2UgNjU6cmV0dXJuIDcyO2Nhc2UgNjY6cmV0dXJuIDY5O2Nhc2UgNjc6cmV0dXJuIDE5fX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpbe10pLywvXig/OiQpLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y2xhc3NcYikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/Olt+XSkvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbYF0pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOls0MCw0MV0saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbMzcsMzgsMzldLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzM0LDM1XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEyLDEzLDE0LDE1LDE2XSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyNSwyNl0saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzMxLDMyXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzI4LDI5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNywzMCwzMywzNiw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIEQoKXt0aGlzLnl5PXt9fXJldHVybiBCLmxleGVyPU4sRC5wcm90b3R5cGU9QixCLlBhcnNlcj1ELG5ldyBEfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNzYpLGk9big5OSksYT1uKDE3OSksbz1uKDE4MCkscz1uKDE4MSksYz17Zm9ybWF0OntrZXl3b3JkOmEuZGVmYXVsdCxoZXg6aS5kZWZhdWx0LHJnYjpvLmRlZmF1bHQscmdiYTpvLmRlZmF1bHQsaHNsOnMuZGVmYXVsdCxoc2xhOnMuZGVmYXVsdH0scGFyc2U6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPWkuZGVmYXVsdC5wYXJzZSh0KXx8by5kZWZhdWx0LnBhcnNlKHQpfHxzLmRlZmF1bHQucGFyc2UodCl8fGEuZGVmYXVsdC5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJyt0KyciJyl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKHIuVFlQRS5IU0wpfHx2b2lkIDA9PT10LmRhdGEucj9zLmRlZmF1bHQuc3RyaW5naWZ5KHQpOnQuYTwxfHwhTnVtYmVyLmlzSW50ZWdlcih0LnIpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmcpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmIpP28uZGVmYXVsdC5zdHJpbmdpZnkodCk6aS5kZWZhdWx0LnN0cmluZ2lmeSh0KX19O2UuZGVmYXVsdD1jfSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQsZSl7Zm9yKHZhciBuPTAscj10Lmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT10W3JdOyIuIj09PWk/dC5zcGxpY2UociwxKToiLi4iPT09aT8odC5zcGxpY2UociwxKSxuKyspOm4mJih0LnNwbGljZShyLDEpLG4tLSl9aWYoZSlmb3IoO24tLTtuKXQudW5zaGlmdCgiLi4iKTtyZXR1cm4gdH1mdW5jdGlvbiByKHQsZSl7aWYodC5maWx0ZXIpcmV0dXJuIHQuZmlsdGVyKGUpO2Zvcih2YXIgbj1bXSxyPTA7cjx0Lmxlbmd0aDtyKyspZSh0W3JdLHIsdCkmJm4ucHVzaCh0W3JdKTtyZXR1cm4gbn1lLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9IiIsaT0hMSxhPWFyZ3VtZW50cy5sZW5ndGgtMTthPj0tMSYmIWk7YS0tKXt2YXIgbz1hPj0wP2FyZ3VtZW50c1thXTp0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2Ygbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO28mJihlPW8rIi8iK2UsaT0iLyI9PT1vLmNoYXJBdCgwKSl9cmV0dXJuKGk/Ii8iOiIiKSsoZT1uKHIoZS5zcGxpdCgiLyIpLChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSksIWkpLmpvaW4oIi8iKSl8fCIuIn0sZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7dmFyIGE9ZS5pc0Fic29sdXRlKHQpLG89Ii8iPT09aSh0LC0xKTtyZXR1cm4odD1uKHIodC5zcGxpdCgiLyIpLChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSksIWEpLmpvaW4oIi8iKSl8fGF8fCh0PSIuIiksdCYmbyYmKHQrPSIvIiksKGE/Ii8iOiIiKSt0fSxlLmlzQWJzb2x1dGU9ZnVuY3Rpb24odCl7cmV0dXJuIi8iPT09dC5jaGFyQXQoMCl9LGUuam9pbj1mdW5jdGlvbigpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gZS5ub3JtYWxpemUocih0LChmdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO3JldHVybiB0fSkpLmpvaW4oIi8iKSl9LGUucmVsYXRpdmU9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgmJiIiPT09dFtlXTtlKyspO2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTAmJiIiPT09dFtuXTtuLS0pO3JldHVybiBlPm4/W106dC5zbGljZShlLG4tZSsxKX10PWUucmVzb2x2ZSh0KS5zdWJzdHIoMSksbj1lLnJlc29sdmUobikuc3Vic3RyKDEpO2Zvcih2YXIgaT1yKHQuc3BsaXQoIi8iKSksYT1yKG4uc3BsaXQoIi8iKSksbz1NYXRoLm1pbihpLmxlbmd0aCxhLmxlbmd0aCkscz1vLGM9MDtjPG87YysrKWlmKGlbY10hPT1hW2NdKXtzPWM7YnJlYWt9dmFyIHU9W107Zm9yKGM9cztjPGkubGVuZ3RoO2MrKyl1LnB1c2goIi4uIik7cmV0dXJuKHU9dS5jb25jYXQoYS5zbGljZShzKSkpLmpvaW4oIi8iKX0sZS5zZXA9Ii8iLGUuZGVsaW1pdGVyPSI6IixlLmRpcm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpLDA9PT10Lmxlbmd0aClyZXR1cm4iLiI7Zm9yKHZhciBlPXQuY2hhckNvZGVBdCgwKSxuPTQ3PT09ZSxyPS0xLGk9ITAsYT10Lmxlbmd0aC0xO2E+PTE7LS1hKWlmKDQ3PT09KGU9dC5jaGFyQ29kZUF0KGEpKSl7aWYoIWkpe3I9YTticmVha319ZWxzZSBpPSExO3JldHVybi0xPT09cj9uPyIvIjoiLiI6biYmMT09PXI/Ii8iOnQuc2xpY2UoMCxyKX0sZS5iYXNlbmFtZT1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmKHQrPSIiKTt2YXIgZSxuPTAscj0tMSxpPSEwO2ZvcihlPXQubGVuZ3RoLTE7ZT49MDstLWUpaWYoNDc9PT10LmNoYXJDb2RlQXQoZSkpe2lmKCFpKXtuPWUrMTticmVha319ZWxzZS0xPT09ciYmKGk9ITEscj1lKzEpO3JldHVybi0xPT09cj8iIjp0LnNsaWNlKG4scil9KHQpO3JldHVybiBlJiZuLnN1YnN0cigtMSplLmxlbmd0aCk9PT1lJiYobj1uLnN1YnN0cigwLG4ubGVuZ3RoLWUubGVuZ3RoKSksbn0sZS5leHRuYW1lPWZ1bmN0aW9uKHQpeyJzdHJpbmciIT10eXBlb2YgdCYmKHQrPSIiKTtmb3IodmFyIGU9LTEsbj0wLHI9LTEsaT0hMCxhPTAsbz10Lmxlbmd0aC0xO28+PTA7LS1vKXt2YXIgcz10LmNoYXJDb2RlQXQobyk7aWYoNDchPT1zKS0xPT09ciYmKGk9ITEscj1vKzEpLDQ2PT09cz8tMT09PWU/ZT1vOjEhPT1hJiYoYT0xKTotMSE9PWUmJihhPS0xKTtlbHNlIGlmKCFpKXtuPW8rMTticmVha319cmV0dXJuLTE9PT1lfHwtMT09PXJ8fDA9PT1hfHwxPT09YSYmZT09PXItMSYmZT09PW4rMT8iIjp0LnNsaWNlKGUscil9O3ZhciBpPSJiIj09PSJhYiIuc3Vic3RyKC0xKT9mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuc3Vic3RyKGUsbil9OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZTwwJiYoZT10Lmxlbmd0aCtlKSx0LnN1YnN0cihlLG4pfX0pLmNhbGwodGhpcyxuKDExKSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMCksaT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGE9cnx8aXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMyl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiYib2JqZWN0Ij09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsM10scj1bMSw1XSxpPVsxLDddLGE9WzIsNV0sbz1bMSwxNV0scz1bMSwxN10sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwzMF0sZD1bMSwyM10scD1bMSwyNF0seT1bMSwyNV0sZz1bMSwyNl0sdj1bMSwyN10sbT1bMSwzMl0sYj1bMSwzM10seD1bMSwzNF0sXz1bMSwzNV0saz1bMSwzMV0sdz1bMSwzOF0sRT1bMSw0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLFQ9WzEsNCw1LDEyLDEzLDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxDPVsxLDQsNSw3LDE0LDE1LDE3LDE5LDIwLDIyLDIzLDI0LDI1LDI2LDI3LDM2LDM3LDM4LDM5LDQyLDQ1XSxTPVs0LDUsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLEE9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLFNQQUNFOjQsTkw6NSxkaXJlY3RpdmU6NixTRDo3LGRvY3VtZW50OjgsbGluZTo5LHN0YXRlbWVudDoxMCxpZFN0YXRlbWVudDoxMSxERVNDUjoxMiwiLS1ceDNlIjoxMyxISURFX0VNUFRZOjE0LHNjYWxlOjE1LFdJRFRIOjE2LENPTVBPU0lUX1NUQVRFOjE3LFNUUlVDVF9TVEFSVDoxOCxTVFJVQ1RfU1RPUDoxOSxTVEFURV9ERVNDUjoyMCxBUzoyMSxJRDoyMixGT1JLOjIzLEpPSU46MjQsQ0hPSUNFOjI1LENPTkNVUlJFTlQ6MjYsbm90ZToyNyxub3RlUG9zaXRpb246MjgsTk9URV9URVhUOjI5LGRpcmVjdGlvbjozMCxvcGVuRGlyZWN0aXZlOjMxLHR5cGVEaXJlY3RpdmU6MzIsY2xvc2VEaXJlY3RpdmU6MzMsIjoiOjM0LGFyZ0RpcmVjdGl2ZTozNSxkaXJlY3Rpb25fdGI6MzYsZGlyZWN0aW9uX2J0OjM3LGRpcmVjdGlvbl9ybDozOCxkaXJlY3Rpb25fbHI6MzksZW9sOjQwLCI7Ijo0MSxFREdFX1NUQVRFOjQyLGxlZnRfb2Y6NDMscmlnaHRfb2Y6NDQsb3Blbl9kaXJlY3RpdmU6NDUsdHlwZV9kaXJlY3RpdmU6NDYsYXJnX2RpcmVjdGl2ZTo0NyxjbG9zZV9kaXJlY3RpdmU6NDgsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJOTCIsNzoiU0QiLDEyOiJERVNDUiIsMTM6Ii0tXHgzZSIsMTQ6IkhJREVfRU1QVFkiLDE1OiJzY2FsZSIsMTY6IldJRFRIIiwxNzoiQ09NUE9TSVRfU1RBVEUiLDE4OiJTVFJVQ1RfU1RBUlQiLDE5OiJTVFJVQ1RfU1RPUCIsMjA6IlNUQVRFX0RFU0NSIiwyMToiQVMiLDIyOiJJRCIsMjM6IkZPUksiLDI0OiJKT0lOIiwyNToiQ0hPSUNFIiwyNjoiQ09OQ1VSUkVOVCIsMjc6Im5vdGUiLDI5OiJOT1RFX1RFWFQiLDM0OiI6IiwzNjoiZGlyZWN0aW9uX3RiIiwzNzoiZGlyZWN0aW9uX2J0IiwzODoiZGlyZWN0aW9uX3JsIiwzOToiZGlyZWN0aW9uX2xyIiw0MToiOyIsNDI6IkVER0VfU1RBVEUiLDQzOiJsZWZ0X29mIiw0NDoicmlnaHRfb2YiLDQ1OiJvcGVuX2RpcmVjdGl2ZSIsNDY6InR5cGVfZGlyZWN0aXZlIiw0NzoiYXJnX2RpcmVjdGl2ZSIsNDg6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbMTAsMV0sWzEwLDJdLFsxMCwzXSxbMTAsNF0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzEwLDRdLFsxMCwzXSxbMTAsNl0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFsxMCwxXSxbNiwzXSxbNiw1XSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbMzAsMV0sWzQwLDFdLFs0MCwxXSxbMTEsMV0sWzExLDFdLFsyOCwxXSxbMjgsMV0sWzMxLDFdLFszMiwxXSxbMzUsMV0sWzMzLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyZXR1cm4gci5zZXRSb290RG9jKGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6Im5sIiE9YVtzXSYmKGFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV0pO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA5OnRoaXMuJD0ibmwiO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn07YnJlYWs7Y2FzZSAxMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtMV0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246ci50cmltQ29sb24oYVtzXSl9O2JyZWFrO2Nhc2UgMTI6dGhpcy4kPXtzdG10OiJyZWxhdGlvbiIsc3RhdGUxOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTJdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxzdGF0ZTI6e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifX07YnJlYWs7Y2FzZSAxMzp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sZGVzY3JpcHRpb246YVtzXS5zdWJzdHIoMSkudHJpbSgpfTticmVhaztjYXNlIDE3OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIixkb2M6YVtzLTFdfTticmVhaztjYXNlIDE4OnZhciBjPWFbc10sdT1hW3MtMl0udHJpbSgpO2lmKGFbc10ubWF0Y2goIjoiKSl7dmFyIGw9YVtzXS5zcGxpdCgiOiIpO2M9bFswXSx1PVt1LGxbMV1dfXRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmMsdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246dX07YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3MtM10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246YVtzLTVdLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMjA6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJmb3JrIn07YnJlYWs7Y2FzZSAyMTp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImpvaW4ifTticmVhaztjYXNlIDIyOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiY2hvaWNlIn07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDpyLmdldERpdmlkZXJJZCgpLHR5cGU6ImRpdmlkZXIifTticmVhaztjYXNlIDI0OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXS50cmltKCksbm90ZTp7cG9zaXRpb246YVtzLTJdLnRyaW0oKSx0ZXh0OmFbc10udHJpbSgpfX07YnJlYWs7Y2FzZSAzMDpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlRCIn07YnJlYWs7Y2FzZSAzMTpyLnNldERpcmVjdGlvbigiQlQiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkJUIn07YnJlYWs7Y2FzZSAzMjpyLnNldERpcmVjdGlvbigiUkwiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAzMzpyLnNldERpcmVjdGlvbigiTFIiKSx0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IkxSIn07YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNDA6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQxOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDQyOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA0MzpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzdGF0ZSIpfX0sdGFibGU6W3szOjEsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezE6WzNdfSx7Mzo4LDQ6ZSw1Om4sNjo0LDc6ciwzMTo2LDQ1Oml9LHszOjksNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezM6MTAsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sdChbMSw0LDUsMTQsMTUsMTcsMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLGEsezg6MTF9KSx7MzI6MTIsNDY6WzEsMTNdfSx7NDY6WzIsNDBdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzp2LDMwOjI5LDMxOjYsMzY6bSwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHszMzozNiwzNDpbMSwzN10sNDg6d30sdChbMzQsNDhdLFsyLDQxXSksdChFLFsyLDZdKSx7NjoyOCwxMDozOSwxMToxOCwxNDpjLDE1OnUsMTc6bCwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzp2LDMwOjI5LDMxOjYsMzY6bSwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHQoRSxbMiw4XSksdChFLFsyLDldKSx0KEUsWzIsMTBdLHsxMjpbMSw0MF0sMTM6WzEsNDFdfSksdChFLFsyLDE0XSksezE2OlsxLDQyXX0sdChFLFsyLDE2XSx7MTg6WzEsNDNdfSksezIxOlsxLDQ0XX0sdChFLFsyLDIwXSksdChFLFsyLDIxXSksdChFLFsyLDIyXSksdChFLFsyLDIzXSksezI4OjQ1LDI5OlsxLDQ2XSw0MzpbMSw0N10sNDQ6WzEsNDhdfSx0KEUsWzIsMjZdKSx0KEUsWzIsMjddKSx0KFQsWzIsMzZdKSx0KFQsWzIsMzddKSx0KEUsWzIsMzBdKSx0KEUsWzIsMzFdKSx0KEUsWzIsMzJdKSx0KEUsWzIsMzNdKSx0KEMsWzIsMjhdKSx7MzU6NDksNDc6WzEsNTBdfSx0KEMsWzIsNDNdKSx0KEUsWzIsN10pLHQoRSxbMiwxMV0pLHsxMTo1MSwyMjpmLDQyOmt9LHQoRSxbMiwxNV0pLHQoUyxhLHs4OjUyfSksezIyOlsxLDUzXX0sezIyOlsxLDU0XX0sezIxOlsxLDU1XX0sezIyOlsyLDM4XX0sezIyOlsyLDM5XX0sezMzOjU2LDQ4Ond9LHs0ODpbMiw0Ml19LHQoRSxbMiwxMl0sezEyOlsxLDU3XX0pLHs0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwxOTpbMSw1OF0sMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6diwzMDoyOSwzMTo2LDM2Om0sMzc6YiwzODp4LDM5Ol8sNDI6ayw0NTppfSx0KEUsWzIsMThdLHsxODpbMSw1OV19KSx7Mjk6WzEsNjBdfSx7MjI6WzEsNjFdfSx0KEMsWzIsMjldKSx0KEUsWzIsMTNdKSx0KEUsWzIsMTddKSx0KFMsYSx7ODo2Mn0pLHQoRSxbMiwyNF0pLHQoRSxbMiwyNV0pLHs0Om8sNTpzLDY6MjgsOToxNCwxMDoxNiwxMToxOCwxNDpjLDE1OnUsMTc6bCwxOTpbMSw2M10sMjA6aCwyMjpmLDIzOmQsMjQ6cCwyNTp5LDI2OmcsMjc6diwzMDoyOSwzMTo2LDM2Om0sMzc6YiwzODp4LDM5Ol8sNDI6ayw0NTppfSx0KEUsWzIsMTldKV0sZGVmYXVsdEFjdGlvbnM6ezc6WzIsNDBdLDg6WzIsMV0sOTpbMiwyXSwxMDpbMiwzXSw0NzpbMiwzOF0sNDg6WzIsMzldLDUwOlsyLDQyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LE09e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gMzY7Y2FzZSAxOnJldHVybiAzNztjYXNlIDI6cmV0dXJuIDM4O2Nhc2UgMzpyZXR1cm4gMzk7Y2FzZSA0OnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDQ1O2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSw0NjtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMzQ7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQ4O2Nhc2UgODpyZXR1cm4gNDc7Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gNTtjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTY6cmV0dXJuIHRoaXMucHVzaFN0YXRlKCJTQ0FMRSIpLDE1O2Nhc2UgMTc6cmV0dXJuIDE2O2Nhc2UgMTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTk6dGhpcy5wdXNoU3RhdGUoIlNUQVRFIik7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyMztjYXNlIDIxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI1O2Nhc2UgMjM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjM7Y2FzZSAyNDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyNDtjYXNlIDI1OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtMTApLnRyaW0oKSwyNTtjYXNlIDI2OnJldHVybiAzNjtjYXNlIDI3OnJldHVybiAzNztjYXNlIDI4OnJldHVybiAzODtjYXNlIDI5OnJldHVybiAzOTtjYXNlIDMwOnRoaXMuYmVnaW4oIlNUQVRFX1NUUklORyIpO2JyZWFrO2Nhc2UgMzE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiU1RBVEVfSUQiKSwiQVMiO2Nhc2UgMzI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgMzM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzQ6cmV0dXJuIlNUQVRFX0RFU0NSIjtjYXNlIDM1OnJldHVybiAxNztjYXNlIDM2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDM3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoInN0cnVjdCIpLDE4O2Nhc2UgMzg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDM5OmJyZWFrO2Nhc2UgNDA6cmV0dXJuIHRoaXMuYmVnaW4oIk5PVEUiKSwyNztjYXNlIDQxOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw0MztjYXNlIDQyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wdXNoU3RhdGUoIk5PVEVfSUQiKSw0NDtjYXNlIDQzOnRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URSIpO2JyZWFrO2Nhc2UgNDQ6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiRkxPQVRJTkdfTk9URV9JRCIpLCJBUyI7Y2FzZSA0NTpicmVhaztjYXNlIDQ2OnJldHVybiJOT1RFX1RFWFQiO2Nhc2UgNDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwiSUQiO2Nhc2UgNDg6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9URVhUIiksMjI7Y2FzZSA0OTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnN1YnN0cigyKS50cmltKCksMjk7Y2FzZSA1MDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyOTtjYXNlIDUxOmNhc2UgNTI6cmV0dXJuIDc7Y2FzZSA1MzpyZXR1cm4gMTQ7Y2FzZSA1NDpyZXR1cm4gNDI7Y2FzZSA1NTpyZXR1cm4gMjI7Y2FzZSA1NjpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLDEyO2Nhc2UgNTc6cmV0dXJuIDEzO2Nhc2UgNTg6cmV0dXJuIDI2O2Nhc2UgNTk6cmV0dXJuIDU7Y2FzZSA2MDpyZXR1cm4iSU5WQUxJRCJ9fSxydWxlczpbL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpbXHNdKykvaSwvXig/OigoPyFcbilccykrKS9pLC9eKD86I1teXG5dKikvaSwvXig/OiVbXlxuXSopL2ksL14oPzpzY2FsZVxzKykvaSwvXig/OlxkKykvaSwvXig/OlxzK3dpZHRoXGIpL2ksL14oPzpzdGF0ZVxzKykvaSwvXig/Oi4qPDxmb3JrPj4pL2ksL14oPzouKjw8am9pbj4+KS9pLC9eKD86Lio8PGNob2ljZT4+KS9pLC9eKD86LipcW1xbZm9ya1xdXF0pL2ksL14oPzouKlxbXFtqb2luXF1cXSkvaSwvXig/Oi4qXFtcW2Nob2ljZVxdXF0pL2ksL14oPzouKmRpcmVjdGlvblxzK1RCW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrUkxbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0xSW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86XHMqYXNccyspL2ksL14oPzpbXlxuXHtdKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cblxzXHtdKykvaSwvXig/OlxuKS9pLC9eKD86XHspL2ksL14oPzpcfSkvaSwvXig/Oltcbl0pL2ksL14oPzpub3RlXHMrKS9pLC9eKD86bGVmdCBvZlxiKS9pLC9eKD86cmlnaHQgb2ZcYikvaSwvXig/OiIpL2ksL14oPzpccyphc1xzKikvaSwvXig/OlsiXSkvaSwvXig/OlteIl0qKS9pLC9eKD86W15cbl0qKS9pLC9eKD86XHMqW146XG5cc1wtXSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzpbXHNcU10qP2VuZCBub3RlXGIpL2ksL14oPzpzdGF0ZURpYWdyYW1ccyspL2ksL14oPzpzdGF0ZURpYWdyYW0tdjJccyspL2ksL14oPzpoaWRlIGVtcHR5IGRlc2NyaXB0aW9uXGIpL2ksL14oPzpcW1wqXF0pL2ksL14oPzpbXjpcblxzXC1ce10rKS9pLC9eKD86XHMqOlteOlxuO10rKS9pLC9eKD86LS0+KS9pLC9eKD86LS0pL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7TElORTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGNsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDgsMTMsMTRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDcsMTMsMTRdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1LDEzLDE0XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzEzLDE0LDE5LDI2LDI3LDI4LDI5LDM4LDM5LDQwLDU0LDU1LDU2LDU3LDU4XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEVfSUQ6e3J1bGVzOls0N10saW5jbHVzaXZlOiExfSxGTE9BVElOR19OT1RFOntydWxlczpbNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sTk9URV9URVhUOntydWxlczpbNDksNTBdLGluY2x1c2l2ZTohMX0sTk9URV9JRDp7cnVsZXM6WzQ4XSxpbmNsdXNpdmU6ITF9LE5PVEU6e3J1bGVzOls0MSw0Miw0M10saW5jbHVzaXZlOiExfSxTQ0FMRTp7cnVsZXM6WzE3LDE4XSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFX0lEOntydWxlczpbMzJdLGluY2x1c2l2ZTohMX0sU1RBVEVfU1RSSU5HOntydWxlczpbMzMsMzRdLGluY2x1c2l2ZTohMX0sRk9SS19TVEFURTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxTVEFURTp7cnVsZXM6WzEzLDE0LDIwLDIxLDIyLDIzLDI0LDI1LDMwLDMxLDM1LDM2LDM3XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw5LDEwLDExLDEyLDE0LDE1LDE2LDE5LDM3LDQwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU5LDYwXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gTygpe3RoaXMueXk9e319cmV0dXJuIEEubGV4ZXI9TSxPLnByb3RvdHlwZT1BLEEuUGFyc2VyPU8sbmV3IE99KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDExKSxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGUscjtmdW5jdGlvbiBpKCl7cmV0dXJuIGUuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsIT10JiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBzKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIGModCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0fHwiW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiB1KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGF0ZXx8IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGwodCxlKXt2YXIgbixyPVtdO2ZvcihuPTA7bjx0Lmxlbmd0aDsrK24pci5wdXNoKGUodFtuXSxuKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX1mdW5jdGlvbiBmKHQsZSl7Zm9yKHZhciBuIGluIGUpaChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gaChlLCJ0b1N0cmluZyIpJiYodC50b1N0cmluZz1lLnRvU3RyaW5nKSxoKGUsInZhbHVlT2YiKSYmKHQudmFsdWVPZj1lLnZhbHVlT2YpLHR9ZnVuY3Rpb24gZCh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMCkudXRjKCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbnVsbD09dC5fcGYmJih0Ll9wZj17ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZE1vbnRoOm51bGwsaW52YWxpZEZvcm1hdDohMSx1c2VySW52YWxpZGF0ZWQ6ITEsaXNvOiExLHBhcnNlZERhdGVQYXJ0czpbXSxtZXJpZGllbTpudWxsLHJmYzI4MjI6ITEsd2Vla2RheU1pc21hdGNoOiExfSksdC5fcGZ9ZnVuY3Rpb24geSh0KXtpZihudWxsPT10Ll9pc1ZhbGlkKXt2YXIgZT1wKHQpLG49ci5jYWxsKGUucGFyc2VkRGF0ZVBhcnRzLChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH0pKSxpPSFpc05hTih0Ll9kLmdldFRpbWUoKSkmJmUub3ZlcmZsb3c8MCYmIWUuZW1wdHkmJiFlLmludmFsaWRNb250aCYmIWUuaW52YWxpZFdlZWtkYXkmJiFlLndlZWtkYXlNaXNtYXRjaCYmIWUubnVsbElucHV0JiYhZS5pbnZhbGlkRm9ybWF0JiYhZS51c2VySW52YWxpZGF0ZWQmJighZS5tZXJpZGllbXx8ZS5tZXJpZGllbSYmbik7aWYodC5fc3RyaWN0JiYoaT1pJiYwPT09ZS5jaGFyc0xlZnRPdmVyJiYwPT09ZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1lLmJpZ0hvdXIpLG51bGwhPU9iamVjdC5pc0Zyb3plbiYmT2JqZWN0LmlzRnJvemVuKHQpKXJldHVybiBpO3QuX2lzVmFsaWQ9aX1yZXR1cm4gdC5faXNWYWxpZH1mdW5jdGlvbiBnKHQpe3ZhciBlPWQoTmFOKTtyZXR1cm4gbnVsbCE9dD9mKHAoZSksdCk6cChlKS51c2VySW52YWxpZGF0ZWQ9ITAsZX1yPUFycmF5LnByb3RvdHlwZS5zb21lP0FycmF5LnByb3RvdHlwZS5zb21lOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3QodGhpcyksbj1lLmxlbmd0aD4+PjAscj0wO3I8bjtyKyspaWYociBpbiBlJiZ0LmNhbGwodGhpcyxlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9O3ZhciB2PWkubW9tZW50UHJvcGVydGllcz1bXTtmdW5jdGlvbiBtKHQsZSl7dmFyIG4scixpO2lmKHMoZS5faXNBTW9tZW50T2JqZWN0KXx8KHQuX2lzQU1vbWVudE9iamVjdD1lLl9pc0FNb21lbnRPYmplY3QpLHMoZS5faSl8fCh0Ll9pPWUuX2kpLHMoZS5fZil8fCh0Ll9mPWUuX2YpLHMoZS5fbCl8fCh0Ll9sPWUuX2wpLHMoZS5fc3RyaWN0KXx8KHQuX3N0cmljdD1lLl9zdHJpY3QpLHMoZS5fdHptKXx8KHQuX3R6bT1lLl90em0pLHMoZS5faXNVVEMpfHwodC5faXNVVEM9ZS5faXNVVEMpLHMoZS5fb2Zmc2V0KXx8KHQuX29mZnNldD1lLl9vZmZzZXQpLHMoZS5fcGYpfHwodC5fcGY9cChlKSkscyhlLl9sb2NhbGUpfHwodC5fbG9jYWxlPWUuX2xvY2FsZSksMDx2Lmxlbmd0aClmb3Iobj0wO248di5sZW5ndGg7bisrKXMoaT1lW3I9dltuXV0pfHwodFtyXT1pKTtyZXR1cm4gdH12YXIgYj0hMTtmdW5jdGlvbiB4KHQpe20odGhpcyx0KSx0aGlzLl9kPW5ldyBEYXRlKG51bGwhPXQuX2Q/dC5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1iJiYoYj0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzKSxiPSExKX1mdW5jdGlvbiBfKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeHx8bnVsbCE9dCYmbnVsbCE9dC5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIGsodCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX1mdW5jdGlvbiB3KHQpe3ZhciBlPSt0LG49MDtyZXR1cm4gMCE9PWUmJmlzRmluaXRlKGUpJiYobj1rKGUpKSxufWZ1bmN0aW9uIEUodCxlLG4pe3ZhciByLGk9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGE9TWF0aC5hYnModC5sZW5ndGgtZS5sZW5ndGgpLG89MDtmb3Iocj0wO3I8aTtyKyspKG4mJnRbcl0hPT1lW3JdfHwhbiYmdyh0W3JdKSE9PXcoZVtyXSkpJiZvKys7cmV0dXJuIG8rYX1mdW5jdGlvbiBUKHQpeyExPT09aS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MmJiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrdCl9ZnVuY3Rpb24gQyh0LGUpe3ZhciBuPSEwO3JldHVybiBmKChmdW5jdGlvbigpe2lmKG51bGwhPWkuZGVwcmVjYXRpb25IYW5kbGVyJiZpLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLHQpLG4pe2Zvcih2YXIgcixhPVtdLG89MDtvPGFyZ3VtZW50cy5sZW5ndGg7bysrKXtpZihyPSIiLCJvYmplY3QiPT10eXBlb2YgYXJndW1lbnRzW29dKXtmb3IodmFyIHMgaW4gcis9IlxuWyIrbysiXSAiLGFyZ3VtZW50c1swXSlyKz1zKyI6ICIrYXJndW1lbnRzWzBdW3NdKyIsICI7cj1yLnNsaWNlKDAsLTIpfWVsc2Ugcj1hcmd1bWVudHNbb107YS5wdXNoKHIpfVQodCsiXG5Bcmd1bWVudHM6ICIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSkuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjayksbj0hMX1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxlKX12YXIgUyxBPXt9O2Z1bmN0aW9uIE0odCxlKXtudWxsIT1pLmRlcHJlY2F0aW9uSGFuZGxlciYmaS5kZXByZWNhdGlvbkhhbmRsZXIodCxlKSxBW3RdfHwoVChlKSxBW3RdPSEwKX1mdW5jdGlvbiBPKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gQih0LGUpe3ZhciBuLHI9Zih7fSx0KTtmb3IobiBpbiBlKWgoZSxuKSYmKG8odFtuXSkmJm8oZVtuXSk/KHJbbl09e30sZihyW25dLHRbbl0pLGYocltuXSxlW25dKSk6bnVsbCE9ZVtuXT9yW25dPWVbbl06ZGVsZXRlIHJbbl0pO2ZvcihuIGluIHQpaCh0LG4pJiYhaChlLG4pJiZvKHRbbl0pJiYocltuXT1mKHt9LHJbbl0pKTtyZXR1cm4gcn1mdW5jdGlvbiBOKHQpe251bGwhPXQmJnRoaXMuc2V0KHQpfWkuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLGkuZGVwcmVjYXRpb25IYW5kbGVyPW51bGwsUz1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbih0KXt2YXIgZSxuPVtdO2ZvcihlIGluIHQpaCh0LGUpJiZuLnB1c2goZSk7cmV0dXJuIG59O3ZhciBEPXt9O2Z1bmN0aW9uIEwodCxlKXt2YXIgbj10LnRvTG93ZXJDYXNlKCk7RFtuXT1EW24rInMiXT1EW2VdPXR9ZnVuY3Rpb24gSSh0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/RFt0XXx8RFt0LnRvTG93ZXJDYXNlKCldOnZvaWQgMH1mdW5jdGlvbiBSKHQpe3ZhciBlLG4scj17fTtmb3IobiBpbiB0KWgodCxuKSYmKGU9SShuKSkmJihyW2VdPXRbbl0pO3JldHVybiByfXZhciBGPXt9O2Z1bmN0aW9uIFAodCxlKXtGW3RdPWV9ZnVuY3Rpb24gaih0LGUsbil7dmFyIHI9IiIrTWF0aC5hYnModCksaT1lLXIubGVuZ3RoO3JldHVybigwPD10P24/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxpKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrcn12YXIgWT0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xZWVlZWVl8WVlZWVl8WVlZWXxZWXxnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyx6PS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFU9e30sJD17fTtmdW5jdGlvbiBxKHQsZSxuLHIpe3ZhciBpPXI7InN0cmluZyI9PXR5cGVvZiByJiYoaT1mdW5jdGlvbigpe3JldHVybiB0aGlzW3JdKCl9KSx0JiYoJFt0XT1pKSxlJiYoJFtlWzBdXT1mdW5jdGlvbigpe3JldHVybiBqKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLGVbMV0sZVsyXSl9KSxuJiYoJFtuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQpfSl9ZnVuY3Rpb24gVyh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT8oZT1WKGUsdC5sb2NhbGVEYXRhKCkpLFVbZV09VVtlXXx8ZnVuY3Rpb24odCl7dmFyIGUsbixyLGk9dC5tYXRjaChZKTtmb3IoZT0wLG49aS5sZW5ndGg7ZTxuO2UrKykkW2lbZV1dP2lbZV09JFtpW2VdXTppW2VdPShyPWlbZV0pLm1hdGNoKC9cW1tcc1xTXS8pP3IucmVwbGFjZSgvXlxbfFxdJC9nLCIiKTpyLnJlcGxhY2UoL1xcL2csIiIpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgcixhPSIiO2ZvcihyPTA7cjxuO3IrKylhKz1PKGlbcl0pP2lbcl0uY2FsbChlLHQpOmlbcl07cmV0dXJuIGF9fShlKSxVW2VdKHQpKTp0LmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIFYodCxlKXt2YXIgbj01O2Z1bmN0aW9uIHIodCl7cmV0dXJuIGUubG9uZ0RhdGVGb3JtYXQodCl8fHR9Zm9yKHoubGFzdEluZGV4PTA7MDw9biYmei50ZXN0KHQpOyl0PXQucmVwbGFjZSh6LHIpLHoubGFzdEluZGV4PTAsbi09MTtyZXR1cm4gdH12YXIgSD0vXGQvLEc9L1xkXGQvLFg9L1xkezN9LyxaPS9cZHs0fS8sUT0vWystXT9cZHs2fS8sSz0vXGRcZD8vLEo9L1xkXGRcZFxkPy8sdHQ9L1xkXGRcZFxkXGRcZD8vLGV0PS9cZHsxLDN9LyxudD0vXGR7MSw0fS8scnQ9L1srLV0/XGR7MSw2fS8saXQ9L1xkKy8sYXQ9L1srLV0/XGQrLyxvdD0vWnxbKy1dXGRcZDo/XGRcZC9naSxzdD0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/L2dpLGN0PS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksdXQ9e307ZnVuY3Rpb24gbHQodCxlLG4pe3V0W3RdPU8oZSk/ZTpmdW5jdGlvbih0LHIpe3JldHVybiB0JiZuP246ZX19ZnVuY3Rpb24gaHQodCxlKXtyZXR1cm4gaCh1dCx0KT91dFt0XShlLl9zdHJpY3QsZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ0KHQucmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csKGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGV8fG58fHJ8fGl9KSkpKX1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfXZhciBkdD17fTtmdW5jdGlvbiBwdCh0LGUpe3ZhciBuLHI9ZTtmb3IoInN0cmluZyI9PXR5cGVvZiB0JiYodD1bdF0pLGMoZSkmJihyPWZ1bmN0aW9uKHQsbil7bltlXT13KHQpfSksbj0wO248dC5sZW5ndGg7bisrKWR0W3Rbbl1dPXJ9ZnVuY3Rpb24geXQodCxlKXtwdCh0LChmdW5jdGlvbih0LG4scixpKXtyLl93PXIuX3d8fHt9LGUodCxyLl93LHIsaSl9KSl9ZnVuY3Rpb24gZ3QodCl7cmV0dXJuIHZ0KHQpPzM2NjozNjV9ZnVuY3Rpb24gdnQodCl7cmV0dXJuIHQlND09MCYmdCUxMDAhPTB8fHQlNDAwPT0wfXEoIlkiLDAsMCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnllYXIoKTtyZXR1cm4gdDw9OTk5OT8iIit0OiIrIit0fSkpLHEoMCxbIllZIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLnllYXIoKSUxMDB9KSkscSgwLFsiWVlZWSIsNF0sMCwieWVhciIpLHEoMCxbIllZWVlZIiw1XSwwLCJ5ZWFyIikscSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIiksTCgieWVhciIsInkiKSxQKCJ5ZWFyIiwxKSxsdCgiWSIsYXQpLGx0KCJZWSIsSyxHKSxsdCgiWVlZWSIsbnQsWiksbHQoIllZWVlZIixydCxRKSxsdCgiWVlZWVlZIixydCxRKSxwdChbIllZWVlZIiwiWVlZWVlZIl0sMCkscHQoIllZWVkiLChmdW5jdGlvbih0LGUpe2VbMF09Mj09PXQubGVuZ3RoP2kucGFyc2VUd29EaWdpdFllYXIodCk6dyh0KX0pKSxwdCgiWVkiLChmdW5jdGlvbih0LGUpe2VbMF09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxwdCgiWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1wYXJzZUludCh0LDEwKX0pKSxpLnBhcnNlVHdvRGlnaXRZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiB3KHQpKyg2ODx3KHQpPzE5MDA6MmUzKX07dmFyIG10LGJ0PXh0KCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIHh0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uPyhrdCh0aGlzLHQsbiksaS51cGRhdGVPZmZzZXQodGhpcyxlKSx0aGlzKTpfdCh0aGlzLHQpfX1mdW5jdGlvbiBfdCh0LGUpe3JldHVybiB0LmlzVmFsaWQoKT90Ll9kWyJnZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrZV0oKTpOYU59ZnVuY3Rpb24ga3QodCxlLG4pe3QuaXNWYWxpZCgpJiYhaXNOYU4obikmJigiRnVsbFllYXIiPT09ZSYmdnQodC55ZWFyKCkpJiYxPT09dC5tb250aCgpJiYyOT09PXQuZGF0ZSgpP3QuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuLHQubW9udGgoKSx3dChuLHQubW9udGgoKSkpOnQuX2RbInNldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXShuKSl9ZnVuY3Rpb24gd3QodCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpcmV0dXJuIE5hTjt2YXIgbj0oZSUxMisxMiklMTI7cmV0dXJuIHQrPShlLW4pLzEyLDE9PT1uP3Z0KHQpPzI5OjI4OjMxLW4lNyUyfW10PUFycmF5LnByb3RvdHlwZS5pbmRleE9mP0FycmF5LnByb3RvdHlwZS5pbmRleE9mOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDsrK2UpaWYodGhpc1tlXT09PXQpcmV0dXJuIGU7cmV0dXJuLTF9LHEoIk0iLFsiTU0iLDJdLCJNbyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSkpLHEoIk1NTSIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyx0KX0pKSxxKCJNTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyx0KX0pKSxMKCJtb250aCIsIk0iKSxQKCJtb250aCIsOCksbHQoIk0iLEspLGx0KCJNTSIsSyxHKSxsdCgiTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJNTU1NIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tb250aHNSZWdleCh0KX0pKSxwdChbIk0iLCJNTSJdLChmdW5jdGlvbih0LGUpe2VbMV09dyh0KS0xfSkpLHB0KFsiTU1NIiwiTU1NTSJdLChmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLl9sb2NhbGUubW9udGhzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lWzFdPWk6cChuKS5pbnZhbGlkTW9udGg9dH0pKTt2YXIgRXQ9L0Rbb0RdPyhcW1teXFtcXV0qXF18XHMpK01NTU0/LyxUdD0iSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxDdD0iSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIik7ZnVuY3Rpb24gU3QodCxlKXt2YXIgbjtpZighdC5pc1ZhbGlkKCkpcmV0dXJuIHQ7aWYoInN0cmluZyI9PXR5cGVvZiBlKWlmKC9eXGQrJC8udGVzdChlKSllPXcoZSk7ZWxzZSBpZighYyhlPXQubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKGUpKSlyZXR1cm4gdDtyZXR1cm4gbj1NYXRoLm1pbih0LmRhdGUoKSx3dCh0LnllYXIoKSxlKSksdC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpKyJNb250aCJdKGUsbiksdH1mdW5jdGlvbiBBdCh0KXtyZXR1cm4gbnVsbCE9dD8oU3QodGhpcyx0KSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpfdCh0aGlzLCJNb250aCIpfXZhciBNdD1jdCxPdD1jdDtmdW5jdGlvbiBCdCgpe2Z1bmN0aW9uIHQodCxlKXtyZXR1cm4gZS5sZW5ndGgtdC5sZW5ndGh9dmFyIGUsbixyPVtdLGk9W10sYT1bXTtmb3IoZT0wO2U8MTI7ZSsrKW49ZChbMmUzLGVdKSxyLnB1c2godGhpcy5tb250aHNTaG9ydChuLCIiKSksaS5wdXNoKHRoaXMubW9udGhzKG4sIiIpKSxhLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKTtmb3Ioci5zb3J0KHQpLGkuc29ydCh0KSxhLnNvcnQodCksZT0wO2U8MTI7ZSsrKXJbZV09ZnQocltlXSksaVtlXT1mdChpW2VdKTtmb3IoZT0wO2U8MjQ7ZSsrKWFbZV09ZnQoYVtlXSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Euam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXgsdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2kuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Iuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIE50KHQpe3ZhciBlO2lmKHQ8MTAwJiYwPD10KXt2YXIgbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO25bMF09dCs0MDAsZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLG4pKSxpc0Zpbml0ZShlLmdldFVUQ0Z1bGxZZWFyKCkpJiZlLnNldFVUQ0Z1bGxZZWFyKHQpfWVsc2UgZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiBlfWZ1bmN0aW9uIER0KHQsZSxuKXt2YXIgcj03K2UtbjtyZXR1cm4tKDcrTnQodCwwLHIpLmdldFVUQ0RheSgpLWUpJTcrci0xfWZ1bmN0aW9uIEx0KHQsZSxuLHIsaSl7dmFyIGEsbyxzPTErNyooZS0xKSsoNytuLXIpJTcrRHQodCxyLGkpO3JldHVybiBvPXM8PTA/Z3QoYT10LTEpK3M6cz5ndCh0KT8oYT10KzEscy1ndCh0KSk6KGE9dCxzKSx7eWVhcjphLGRheU9mWWVhcjpvfX1mdW5jdGlvbiBJdCh0LGUsbil7dmFyIHIsaSxhPUR0KHQueWVhcigpLGUsbiksbz1NYXRoLmZsb29yKCh0LmRheU9mWWVhcigpLWEtMSkvNykrMTtyZXR1cm4gbzwxP3I9bytSdChpPXQueWVhcigpLTEsZSxuKTpvPlJ0KHQueWVhcigpLGUsbik/KHI9by1SdCh0LnllYXIoKSxlLG4pLGk9dC55ZWFyKCkrMSk6KGk9dC55ZWFyKCkscj1vKSx7d2VlazpyLHllYXI6aX19ZnVuY3Rpb24gUnQodCxlLG4pe3ZhciByPUR0KHQsZSxuKSxpPUR0KHQrMSxlLG4pO3JldHVybihndCh0KS1yK2kpLzd9ZnVuY3Rpb24gRnQodCxlKXtyZXR1cm4gdC5zbGljZShlLDcpLmNvbmNhdCh0LnNsaWNlKDAsZSkpfXEoInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxxKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksTCgid2VlayIsInciKSxMKCJpc29XZWVrIiwiVyIpLFAoIndlZWsiLDUpLFAoImlzb1dlZWsiLDUpLGx0KCJ3IixLKSxsdCgid3ciLEssRyksbHQoIlciLEspLGx0KCJXVyIsSyxHKSx5dChbInciLCJ3dyIsIlciLCJXVyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMSldPXcodCl9KSkscSgiZCIsMCwiZG8iLCJkYXkiKSxxKCJkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyx0KX0pKSxxKCJkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyx0KX0pKSxxKCJkZGRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLHQpfSkpLHEoImUiLDAsMCwid2Vla2RheSIpLHEoIkUiLDAsMCwiaXNvV2Vla2RheSIpLEwoImRheSIsImQiKSxMKCJ3ZWVrZGF5IiwiZSIpLEwoImlzb1dlZWtkYXkiLCJFIiksUCgiZGF5IiwxMSksUCgid2Vla2RheSIsMTEpLFAoImlzb1dlZWtkYXkiLDExKSxsdCgiZCIsSyksbHQoImUiLEspLGx0KCJFIixLKSxsdCgiZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzTWluUmVnZXgodCl9KSksbHQoImRkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNTaG9ydFJlZ2V4KHQpfSkpLGx0KCJkZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1JlZ2V4KHQpfSkpLHl0KFsiZGQiLCJkZGQiLCJkZGRkIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS53ZWVrZGF5c1BhcnNlKHQscixuLl9zdHJpY3QpO251bGwhPWk/ZS5kPWk6cChuKS5pbnZhbGlkV2Vla2RheT10fSkpLHl0KFsiZCIsImUiLCJFIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09dyh0KX0pKTt2YXIgUHQ9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLGp0PSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksWXQ9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHp0PWN0LFV0PWN0LCR0PWN0O2Z1bmN0aW9uIHF0KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHIsaSxhLG89W10scz1bXSxjPVtdLHU9W107Zm9yKGU9MDtlPDc7ZSsrKW49ZChbMmUzLDFdKS5kYXkoZSkscj10aGlzLndlZWtkYXlzTWluKG4sIiIpLGk9dGhpcy53ZWVrZGF5c1Nob3J0KG4sIiIpLGE9dGhpcy53ZWVrZGF5cyhuLCIiKSxvLnB1c2gocikscy5wdXNoKGkpLGMucHVzaChhKSx1LnB1c2gociksdS5wdXNoKGkpLHUucHVzaChhKTtmb3Ioby5zb3J0KHQpLHMuc29ydCh0KSxjLnNvcnQodCksdS5zb3J0KHQpLGU9MDtlPDc7ZSsrKXNbZV09ZnQoc1tlXSksY1tlXT1mdChjW2VdKSx1W2VdPWZ0KHVbZV0pO3RoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIitjLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK28uam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFd0KCl7cmV0dXJuIHRoaXMuaG91cnMoKSUxMnx8MTJ9ZnVuY3Rpb24gVnQodCxlKXtxKHQsMCwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksZSl9KSl9ZnVuY3Rpb24gSHQodCxlKXtyZXR1cm4gZS5fbWVyaWRpZW1QYXJzZX1xKCJIIixbIkhIIiwyXSwwLCJob3VyIikscSgiaCIsWyJoaCIsMl0sMCxXdCkscSgiayIsWyJrayIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ob3VycygpfHwyNH0pKSxxKCJobW0iLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIitXdC5hcHBseSh0aGlzKStqKHRoaXMubWludXRlcygpLDIpfSkpLHEoImhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrV3QuYXBwbHkodGhpcykraih0aGlzLm1pbnV0ZXMoKSwyKStqKHRoaXMuc2Vjb25kcygpLDIpfSkpLHEoIkhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStqKHRoaXMubWludXRlcygpLDIpfSkpLHEoIkhtbXNzIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK2oodGhpcy5taW51dGVzKCksMikraih0aGlzLnNlY29uZHMoKSwyKX0pKSxWdCgiYSIsITApLFZ0KCJBIiwhMSksTCgiaG91ciIsImgiKSxQKCJob3VyIiwxMyksbHQoImEiLEh0KSxsdCgiQSIsSHQpLGx0KCJIIixLKSxsdCgiaCIsSyksbHQoImsiLEspLGx0KCJISCIsSyxHKSxsdCgiaGgiLEssRyksbHQoImtrIixLLEcpLGx0KCJobW0iLEopLGx0KCJobW1zcyIsdHQpLGx0KCJIbW0iLEopLGx0KCJIbW1zcyIsdHQpLHB0KFsiSCIsIkhIIl0sMykscHQoWyJrIiwia2siXSwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXcodCk7ZVszXT0yND09PXI/MDpyfSkpLHB0KFsiYSIsIkEiXSwoZnVuY3Rpb24odCxlLG4pe24uX2lzUG09bi5fbG9jYWxlLmlzUE0odCksbi5fbWVyaWRpZW09dH0pKSxwdChbImgiLCJoaCJdLChmdW5jdGlvbih0LGUsbil7ZVszXT13KHQpLHAobikuYmlnSG91cj0hMH0pKSxwdCgiaG1tIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJobW1zcyIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC00LGk9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIsMikpLGVbNV09dyh0LnN1YnN0cihpKSkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJIbW0iLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIpKX0pKSxwdCgiSG1tc3MiLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtNCxpPXQubGVuZ3RoLTI7ZVszXT13KHQuc3Vic3RyKDAscikpLGVbNF09dyh0LnN1YnN0cihyLDIpKSxlWzVdPXcodC5zdWJzdHIoaSkpfSkpO3ZhciBHdCxYdD14dCgiSG91cnMiLCEwKSxadD17Y2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0ZUZvcm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6IiVkIixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sbW9udGhzOlR0LG1vbnRoc1Nob3J0OkN0LHdlZWs6e2RvdzowLGRveTo2fSx3ZWVrZGF5czpQdCx3ZWVrZGF5c01pbjpZdCx3ZWVrZGF5c1Nob3J0Omp0LG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxRdD17fSxLdD17fTtmdW5jdGlvbiBKdCh0KXtyZXR1cm4gdD90LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKTp0fWZ1bmN0aW9uIHRlKGUpe3ZhciByPW51bGw7aWYoIVF0W2VdJiZ2b2lkIDAhPT10JiZ0JiZ0LmV4cG9ydHMpdHJ5e3I9R3QuX2FiYnIsbigxOTgpKCIuLyIrZSksZWUocil9Y2F0Y2goZSl7fXJldHVybiBRdFtlXX1mdW5jdGlvbiBlZSh0LGUpe3ZhciBuO3JldHVybiB0JiYoKG49cyhlKT9yZSh0KTpuZSh0LGUpKT9HdD1uOiJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oIkxvY2FsZSAiK3QrIiBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/IikpLEd0Ll9hYmJyfWZ1bmN0aW9uIG5lKHQsZSl7aWYobnVsbD09PWUpcmV0dXJuIGRlbGV0ZSBRdFt0XSxudWxsO3ZhciBuLHI9WnQ7aWYoZS5hYmJyPXQsbnVsbCE9UXRbdF0pTSgiZGVmaW5lTG9jYWxlT3ZlcnJpZGUiLCJ1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSBhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4iKSxyPVF0W3RdLl9jb25maWc7ZWxzZSBpZihudWxsIT1lLnBhcmVudExvY2FsZSlpZihudWxsIT1RdFtlLnBhcmVudExvY2FsZV0pcj1RdFtlLnBhcmVudExvY2FsZV0uX2NvbmZpZztlbHNle2lmKG51bGw9PShuPXRlKGUucGFyZW50TG9jYWxlKSkpcmV0dXJuIEt0W2UucGFyZW50TG9jYWxlXXx8KEt0W2UucGFyZW50TG9jYWxlXT1bXSksS3RbZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6dCxjb25maWc6ZX0pLG51bGw7cj1uLl9jb25maWd9cmV0dXJuIFF0W3RdPW5ldyBOKEIocixlKSksS3RbdF0mJkt0W3RdLmZvckVhY2goKGZ1bmN0aW9uKHQpe25lKHQubmFtZSx0LmNvbmZpZyl9KSksZWUodCksUXRbdF19ZnVuY3Rpb24gcmUodCl7dmFyIGU7aWYodCYmdC5fbG9jYWxlJiZ0Ll9sb2NhbGUuX2FiYnImJih0PXQuX2xvY2FsZS5fYWJiciksIXQpcmV0dXJuIEd0O2lmKCFhKHQpKXtpZihlPXRlKHQpKXJldHVybiBlO3Q9W3RdfXJldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGksYT0wO2E8dC5sZW5ndGg7KXtmb3IoZT0oaT1KdCh0W2FdKS5zcGxpdCgiLSIpKS5sZW5ndGgsbj0obj1KdCh0W2ErMV0pKT9uLnNwbGl0KCItIik6bnVsbDswPGU7KXtpZihyPXRlKGkuc2xpY2UoMCxlKS5qb2luKCItIikpKXJldHVybiByO2lmKG4mJm4ubGVuZ3RoPj1lJiZFKGksbiwhMCk+PWUtMSlicmVhaztlLS19YSsrfXJldHVybiBHdH0odCl9ZnVuY3Rpb24gaWUodCl7dmFyIGUsbj10Ll9hO3JldHVybiBuJiYtMj09PXAodCkub3ZlcmZsb3cmJihlPW5bMV08MHx8MTE8blsxXT8xOm5bMl08MXx8blsyXT53dChuWzBdLG5bMV0pPzI6blszXTwwfHwyNDxuWzNdfHwyND09PW5bM10mJigwIT09bls0XXx8MCE9PW5bNV18fDAhPT1uWzZdKT8zOm5bNF08MHx8NTk8bls0XT80Om5bNV08MHx8NTk8bls1XT81Om5bNl08MHx8OTk5PG5bNl0/NjotMSxwKHQpLl9vdmVyZmxvd0RheU9mWWVhciYmKGU8MHx8MjxlKSYmKGU9MikscCh0KS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT1lJiYoZT03KSxwKHQpLl9vdmVyZmxvd1dlZWtkYXkmJi0xPT09ZSYmKGU9OCkscCh0KS5vdmVyZmxvdz1lKSx0fWZ1bmN0aW9uIGFlKHQsZSxuKXtyZXR1cm4gbnVsbCE9dD90Om51bGwhPWU/ZTpufWZ1bmN0aW9uIG9lKHQpe3ZhciBlLG4scixhLG8scz1bXTtpZighdC5fZCl7dmFyIGMsdTtmb3IoYz10LHU9bmV3IERhdGUoaS5ub3coKSkscj1jLl91c2VVVEM/W3UuZ2V0VVRDRnVsbFllYXIoKSx1LmdldFVUQ01vbnRoKCksdS5nZXRVVENEYXRlKCldOlt1LmdldEZ1bGxZZWFyKCksdS5nZXRNb250aCgpLHUuZ2V0RGF0ZSgpXSx0Ll93JiZudWxsPT10Ll9hWzJdJiZudWxsPT10Ll9hWzFdJiZmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scyxjO2lmKG51bGwhPShlPXQuX3cpLkdHfHxudWxsIT1lLld8fG51bGwhPWUuRSlhPTEsbz00LG49YWUoZS5HRyx0Ll9hWzBdLEl0KHhlKCksMSw0KS55ZWFyKSxyPWFlKGUuVywxKSwoKGk9YWUoZS5FLDEpKTwxfHw3PGkpJiYoYz0hMCk7ZWxzZXthPXQuX2xvY2FsZS5fd2Vlay5kb3csbz10Ll9sb2NhbGUuX3dlZWsuZG95O3ZhciB1PUl0KHhlKCksYSxvKTtuPWFlKGUuZ2csdC5fYVswXSx1LnllYXIpLHI9YWUoZS53LHUud2VlayksbnVsbCE9ZS5kPygoaT1lLmQpPDB8fDY8aSkmJihjPSEwKTpudWxsIT1lLmU/KGk9ZS5lK2EsKGUuZTwwfHw2PGUuZSkmJihjPSEwKSk6aT1hfXI8MXx8cj5SdChuLGEsbyk/cCh0KS5fb3ZlcmZsb3dXZWVrcz0hMDpudWxsIT1jP3AodCkuX292ZXJmbG93V2Vla2RheT0hMDoocz1MdChuLHIsaSxhLG8pLHQuX2FbMF09cy55ZWFyLHQuX2RheU9mWWVhcj1zLmRheU9mWWVhcil9KHQpLG51bGwhPXQuX2RheU9mWWVhciYmKG89YWUodC5fYVswXSxyWzBdKSwodC5fZGF5T2ZZZWFyPmd0KG8pfHwwPT09dC5fZGF5T2ZZZWFyKSYmKHAodCkuX292ZXJmbG93RGF5T2ZZZWFyPSEwKSxuPU50KG8sMCx0Ll9kYXlPZlllYXIpLHQuX2FbMV09bi5nZXRVVENNb250aCgpLHQuX2FbMl09bi5nZXRVVENEYXRlKCkpLGU9MDtlPDMmJm51bGw9PXQuX2FbZV07KytlKXQuX2FbZV09c1tlXT1yW2VdO2Zvcig7ZTw3O2UrKyl0Ll9hW2VdPXNbZV09bnVsbD09dC5fYVtlXT8yPT09ZT8xOjA6dC5fYVtlXTsyND09PXQuX2FbM10mJjA9PT10Ll9hWzRdJiYwPT09dC5fYVs1XSYmMD09PXQuX2FbNl0mJih0Ll9uZXh0RGF5PSEwLHQuX2FbM109MCksdC5fZD0odC5fdXNlVVRDP050OmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzO3JldHVybiB0PDEwMCYmMDw9dD8ocz1uZXcgRGF0ZSh0KzQwMCxlLG4scixpLGEsbyksaXNGaW5pdGUocy5nZXRGdWxsWWVhcigpKSYmcy5zZXRGdWxsWWVhcih0KSk6cz1uZXcgRGF0ZSh0LGUsbixyLGksYSxvKSxzfSkuYXBwbHkobnVsbCxzKSxhPXQuX3VzZVVUQz90Ll9kLmdldFVUQ0RheSgpOnQuX2QuZ2V0RGF5KCksbnVsbCE9dC5fdHptJiZ0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSx0Ll9uZXh0RGF5JiYodC5fYVszXT0yNCksdC5fdyYmdm9pZCAwIT09dC5fdy5kJiZ0Ll93LmQhPT1hJiYocCh0KS53ZWVrZGF5TWlzbWF0Y2g9ITApfX12YXIgc2U9L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8pPykoW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sY2U9L15ccyooKD86WystXVxkezZ9fFxkezR9KSg/OlxkXGRcZFxkfFdcZFxkXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzpcZFxkKD86XGRcZCg/OlsuLF1cZCspPyk/KT8pKFtcK1wtXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLHVlPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLGxlPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L11dLGhlPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLGZlPS9eXC8/RGF0ZVwoKFwtP1xkKykvaTtmdW5jdGlvbiBkZSh0KXt2YXIgZSxuLHIsaSxhLG8scz10Ll9pLGM9c2UuZXhlYyhzKXx8Y2UuZXhlYyhzKTtpZihjKXtmb3IocCh0KS5pc289ITAsZT0wLG49bGUubGVuZ3RoO2U8bjtlKyspaWYobGVbZV1bMV0uZXhlYyhjWzFdKSl7aT1sZVtlXVswXSxyPSExIT09bGVbZV1bMl07YnJlYWt9aWYobnVsbD09aSlyZXR1cm4gdm9pZCh0Ll9pc1ZhbGlkPSExKTtpZihjWzNdKXtmb3IoZT0wLG49aGUubGVuZ3RoO2U8bjtlKyspaWYoaGVbZV1bMV0uZXhlYyhjWzNdKSl7YT0oY1syXXx8IiAiKStoZVtlXVswXTticmVha31pZihudWxsPT1hKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpfWlmKCFyJiZudWxsIT1hKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO2lmKGNbNF0pe2lmKCF1ZS5leGVjKGNbNF0pKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO289IloifXQuX2Y9aSsoYXx8IiIpKyhvfHwiIiksdmUodCl9ZWxzZSB0Ll9pc1ZhbGlkPSExfXZhciBwZT0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9ccyk/KFxkezEsMn0pXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXHMoXGR7Miw0fSlccyhcZFxkKTooXGRcZCkoPzo6KFxkXGQpKT9ccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxkezR9KSkkLyx5ZT17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6LTQ4MH07ZnVuY3Rpb24gZ2UodCl7dmFyIGUsbixyLGk9cGUuZXhlYyh0Ll9pLnJlcGxhY2UoL1woW14pXSpcKXxbXG5cdF0vZywiICIpLnJlcGxhY2UoLyhcc1xzKykvZywiICIpLnJlcGxhY2UoL15cc1xzKi8sIiIpLnJlcGxhY2UoL1xzXHMqJC8sIiIpKTtpZihpKXt2YXIgYT1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89W2Z1bmN0aW9uKHQpe3ZhciBlPXBhcnNlSW50KHQsMTApO3JldHVybiBlPD00OT8yZTMrZTplPD05OTk/MTkwMCtlOmV9KHQpLEN0LmluZGV4T2YoZSkscGFyc2VJbnQobiwxMCkscGFyc2VJbnQociwxMCkscGFyc2VJbnQoaSwxMCldO3JldHVybiBhJiZvLnB1c2gocGFyc2VJbnQoYSwxMCkpLG99KGlbNF0saVszXSxpWzJdLGlbNV0saVs2XSxpWzddKTtpZihuPWEscj10LChlPWlbMV0pJiZqdC5pbmRleE9mKGUpIT09bmV3IERhdGUoblswXSxuWzFdLG5bMl0pLmdldERheSgpJiYocChyKS53ZWVrZGF5TWlzbWF0Y2g9ITAsIShyLl9pc1ZhbGlkPSExKSkpcmV0dXJuO3QuX2E9YSx0Ll90em09ZnVuY3Rpb24odCxlLG4pe2lmKHQpcmV0dXJuIHllW3RdO2lmKGUpcmV0dXJuIDA7dmFyIHI9cGFyc2VJbnQobiwxMCksaT1yJTEwMDtyZXR1cm4oci1pKS8xMDAqNjAraX0oaVs4XSxpWzldLGlbMTBdKSx0Ll9kPU50LmFwcGx5KG51bGwsdC5fYSksdC5fZC5zZXRVVENNaW51dGVzKHQuX2QuZ2V0VVRDTWludXRlcygpLXQuX3R6bSkscCh0KS5yZmMyODIyPSEwfWVsc2UgdC5faXNWYWxpZD0hMX1mdW5jdGlvbiB2ZSh0KXtpZih0Ll9mIT09aS5JU09fODYwMSlpZih0Ll9mIT09aS5SRkNfMjgyMil7dC5fYT1bXSxwKHQpLmVtcHR5PSEwO3ZhciBlLG4scixhLG8scyxjLHUsbD0iIit0Ll9pLGY9bC5sZW5ndGgsZD0wO2ZvcihyPVYodC5fZix0Ll9sb2NhbGUpLm1hdGNoKFkpfHxbXSxlPTA7ZTxyLmxlbmd0aDtlKyspYT1yW2VdLChuPShsLm1hdGNoKGh0KGEsdCkpfHxbXSlbMF0pJiYoMDwobz1sLnN1YnN0cigwLGwuaW5kZXhPZihuKSkpLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKG8pLGw9bC5zbGljZShsLmluZGV4T2Yobikrbi5sZW5ndGgpLGQrPW4ubGVuZ3RoKSwkW2FdPyhuP3AodCkuZW1wdHk9ITE6cCh0KS51bnVzZWRUb2tlbnMucHVzaChhKSxzPWEsdT10LG51bGwhPShjPW4pJiZoKGR0LHMpJiZkdFtzXShjLHUuX2EsdSxzKSk6dC5fc3RyaWN0JiYhbiYmcCh0KS51bnVzZWRUb2tlbnMucHVzaChhKTtwKHQpLmNoYXJzTGVmdE92ZXI9Zi1kLDA8bC5sZW5ndGgmJnAodCkudW51c2VkSW5wdXQucHVzaChsKSx0Ll9hWzNdPD0xMiYmITA9PT1wKHQpLmJpZ0hvdXImJjA8dC5fYVszXSYmKHAodCkuYmlnSG91cj12b2lkIDApLHAodCkucGFyc2VkRGF0ZVBhcnRzPXQuX2Euc2xpY2UoMCkscCh0KS5tZXJpZGllbT10Ll9tZXJpZGllbSx0Ll9hWzNdPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtyZXR1cm4gbnVsbD09bj9lOm51bGwhPXQubWVyaWRpZW1Ib3VyP3QubWVyaWRpZW1Ib3VyKGUsbik6KG51bGwhPXQuaXNQTSYmKChyPXQuaXNQTShuKSkmJmU8MTImJihlKz0xMikscnx8MTIhPT1lfHwoZT0wKSksZSl9KHQuX2xvY2FsZSx0Ll9hWzNdLHQuX21lcmlkaWVtKSxvZSh0KSxpZSh0KX1lbHNlIGdlKHQpO2Vsc2UgZGUodCl9ZnVuY3Rpb24gbWUodCl7dmFyIGUsbixyLGgsZD10Ll9pLHY9dC5fZjtyZXR1cm4gdC5fbG9jYWxlPXQuX2xvY2FsZXx8cmUodC5fbCksbnVsbD09PWR8fHZvaWQgMD09PXYmJiIiPT09ZD9nKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiBkJiYodC5faT1kPXQuX2xvY2FsZS5wcmVwYXJzZShkKSksXyhkKT9uZXcgeChpZShkKSk6KHUoZCk/dC5fZD1kOmEodik/ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksYTtpZigwPT09dC5fZi5sZW5ndGgpcmV0dXJuIHAodCkuaW52YWxpZEZvcm1hdD0hMCx0Ll9kPW5ldyBEYXRlKE5hTik7Zm9yKGk9MDtpPHQuX2YubGVuZ3RoO2krKylhPTAsZT1tKHt9LHQpLG51bGwhPXQuX3VzZVVUQyYmKGUuX3VzZVVUQz10Ll91c2VVVEMpLGUuX2Y9dC5fZltpXSx2ZShlKSx5KGUpJiYoYSs9cChlKS5jaGFyc0xlZnRPdmVyLGErPTEwKnAoZSkudW51c2VkVG9rZW5zLmxlbmd0aCxwKGUpLnNjb3JlPWEsKG51bGw9PXJ8fGE8cikmJihyPWEsbj1lKSk7Zih0LG58fGUpfSh0KTp2P3ZlKHQpOnMobj0oZT10KS5faSk/ZS5fZD1uZXcgRGF0ZShpLm5vdygpKTp1KG4pP2UuX2Q9bmV3IERhdGUobi52YWx1ZU9mKCkpOiJzdHJpbmciPT10eXBlb2Ygbj8ocj1lLG51bGw9PT0oaD1mZS5leGVjKHIuX2kpKT8oZGUociksITE9PT1yLl9pc1ZhbGlkJiYoZGVsZXRlIHIuX2lzVmFsaWQsZ2UociksITE9PT1yLl9pc1ZhbGlkJiYoZGVsZXRlIHIuX2lzVmFsaWQsaS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhyKSkpKTpyLl9kPW5ldyBEYXRlKCtoWzFdKSk6YShuKT8oZS5fYT1sKG4uc2xpY2UoMCksKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0LDEwKX0pKSxvZShlKSk6byhuKT9mdW5jdGlvbih0KXtpZighdC5fZCl7dmFyIGU9Uih0Ll9pKTt0Ll9hPWwoW2UueWVhcixlLm1vbnRoLGUuZGF5fHxlLmRhdGUsZS5ob3VyLGUubWludXRlLGUuc2Vjb25kLGUubWlsbGlzZWNvbmRdLChmdW5jdGlvbih0KXtyZXR1cm4gdCYmcGFyc2VJbnQodCwxMCl9KSksb2UodCl9fShlKTpjKG4pP2UuX2Q9bmV3IERhdGUobik6aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhlKSx5KHQpfHwodC5fZD1udWxsKSx0KSl9ZnVuY3Rpb24gYmUodCxlLG4scixpKXt2YXIgcyxjPXt9O3JldHVybiEwIT09biYmITEhPT1ufHwocj1uLG49dm9pZCAwKSwobyh0KSYmZnVuY3Rpb24odCl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5sZW5ndGg7dmFyIGU7Zm9yKGUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KGUpKXJldHVybiExO3JldHVybiEwfSh0KXx8YSh0KSYmMD09PXQubGVuZ3RoKSYmKHQ9dm9pZCAwKSxjLl9pc0FNb21lbnRPYmplY3Q9ITAsYy5fdXNlVVRDPWMuX2lzVVRDPWksYy5fbD1uLGMuX2k9dCxjLl9mPWUsYy5fc3RyaWN0PXIsKHM9bmV3IHgoaWUobWUoYykpKSkuX25leHREYXkmJihzLmFkZCgxLCJkIikscy5fbmV4dERheT12b2lkIDApLHN9ZnVuY3Rpb24geGUodCxlLG4scil7cmV0dXJuIGJlKHQsZSxuLHIsITEpfWkuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2s9QygidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhbiB1cGNvbWluZyBtYWpvciByZWxlYXNlLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLiIsKGZ1bmN0aW9uKHQpe3QuX2Q9bmV3IERhdGUodC5faSsodC5fdXNlVVRDPyIgVVRDIjoiIikpfSkpLGkuSVNPXzg2MDE9ZnVuY3Rpb24oKXt9LGkuUkZDXzI4MjI9ZnVuY3Rpb24oKXt9O3ZhciBfZT1DKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9eGUuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dDx0aGlzP3RoaXM6dDpnKCl9KSksa2U9QygibW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLChmdW5jdGlvbigpe3ZhciB0PXhlLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJnQuaXNWYWxpZCgpP3RoaXM8dD90aGlzOnQ6ZygpfSkpO2Z1bmN0aW9uIHdlKHQsZSl7dmFyIG4scjtpZigxPT09ZS5sZW5ndGgmJmEoZVswXSkmJihlPWVbMF0pLCFlLmxlbmd0aClyZXR1cm4geGUoKTtmb3Iobj1lWzBdLHI9MTtyPGUubGVuZ3RoOysrcillW3JdLmlzVmFsaWQoKSYmIWVbcl1bdF0obil8fChuPWVbcl0pO3JldHVybiBufXZhciBFZT1bInllYXIiLCJxdWFydGVyIiwibW9udGgiLCJ3ZWVrIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIl07ZnVuY3Rpb24gVGUodCl7dmFyIGU9Uih0KSxuPWUueWVhcnx8MCxyPWUucXVhcnRlcnx8MCxpPWUubW9udGh8fDAsYT1lLndlZWt8fGUuaXNvV2Vla3x8MCxvPWUuZGF5fHwwLHM9ZS5ob3VyfHwwLGM9ZS5taW51dGV8fDAsdT1lLnNlY29uZHx8MCxsPWUubWlsbGlzZWNvbmR8fDA7dGhpcy5faXNWYWxpZD1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdClpZigtMT09PW10LmNhbGwoRWUsZSl8fG51bGwhPXRbZV0mJmlzTmFOKHRbZV0pKXJldHVybiExO2Zvcih2YXIgbj0hMSxyPTA7cjxFZS5sZW5ndGg7KytyKWlmKHRbRWVbcl1dKXtpZihuKXJldHVybiExO3BhcnNlRmxvYXQodFtFZVtyXV0pIT09dyh0W0VlW3JdXSkmJihuPSEwKX1yZXR1cm4hMH0oZSksdGhpcy5fbWlsbGlzZWNvbmRzPStsKzFlMyp1KzZlNCpjKzFlMypzKjYwKjYwLHRoaXMuX2RheXM9K28rNyphLHRoaXMuX21vbnRocz0raSszKnIrMTIqbix0aGlzLl9kYXRhPXt9LHRoaXMuX2xvY2FsZT1yZSgpLHRoaXMuX2J1YmJsZSgpfWZ1bmN0aW9uIENlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgVGV9ZnVuY3Rpb24gU2UodCl7cmV0dXJuIHQ8MD8tMSpNYXRoLnJvdW5kKC0xKnQpOk1hdGgucm91bmQodCl9ZnVuY3Rpb24gQWUodCxlKXtxKHQsMCwwLChmdW5jdGlvbigpe3ZhciB0PXRoaXMudXRjT2Zmc2V0KCksbj0iKyI7cmV0dXJuIHQ8MCYmKHQ9LXQsbj0iLSIpLG4raih+fih0LzYwKSwyKStlK2oofn50JTYwLDIpfSkpfUFlKCJaIiwiOiIpLEFlKCJaWiIsIiIpLGx0KCJaIixzdCksbHQoIlpaIixzdCkscHQoWyJaIiwiWloiXSwoZnVuY3Rpb24odCxlLG4pe24uX3VzZVVUQz0hMCxuLl90em09T2Uoc3QsdCl9KSk7dmFyIE1lPS8oW1wrXC1dfFxkXGQpL2dpO2Z1bmN0aW9uIE9lKHQsZSl7dmFyIG49KGV8fCIiKS5tYXRjaCh0KTtpZihudWxsPT09bilyZXR1cm4gbnVsbDt2YXIgcj0oKG5bbi5sZW5ndGgtMV18fFtdKSsiIikubWF0Y2goTWUpfHxbIi0iLDAsMF0saT02MCpyWzFdK3coclsyXSk7cmV0dXJuIDA9PT1pPzA6IisiPT09clswXT9pOi1pfWZ1bmN0aW9uIEJlKHQsZSl7dmFyIG4scjtyZXR1cm4gZS5faXNVVEM/KG49ZS5jbG9uZSgpLHI9KF8odCl8fHUodCk/dC52YWx1ZU9mKCk6eGUodCkudmFsdWVPZigpKS1uLnZhbHVlT2YoKSxuLl9kLnNldFRpbWUobi5fZC52YWx1ZU9mKCkrciksaS51cGRhdGVPZmZzZXQobiwhMSksbik6eGUodCkubG9jYWwoKX1mdW5jdGlvbiBOZSh0KXtyZXR1cm4gMTUqLU1hdGgucm91bmQodC5fZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX1mdW5jdGlvbiBEZSgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fWkudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgTGU9L14oXC18XCspPyg/OihcZCopWy4gXSk/KFxkKylcOihcZCspKD86XDooXGQrKShcLlxkKik/KT8kLyxJZT0vXigtfFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87ZnVuY3Rpb24gUmUodCxlKXt2YXIgbixyLGksYT10LG89bnVsbDtyZXR1cm4gQ2UodCk/YT17bXM6dC5fbWlsbGlzZWNvbmRzLGQ6dC5fZGF5cyxNOnQuX21vbnRoc306Yyh0KT8oYT17fSxlP2FbZV09dDphLm1pbGxpc2Vjb25kcz10KToobz1MZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTowLGQ6dyhvWzJdKSpuLGg6dyhvWzNdKSpuLG06dyhvWzRdKSpuLHM6dyhvWzVdKSpuLG1zOncoU2UoMWUzKm9bNl0pKSpufSk6KG89SWUuZXhlYyh0KSk/KG49Ii0iPT09b1sxXT8tMToxLGE9e3k6RmUob1syXSxuKSxNOkZlKG9bM10sbiksdzpGZShvWzRdLG4pLGQ6RmUob1s1XSxuKSxoOkZlKG9bNl0sbiksbTpGZShvWzddLG4pLHM6RmUob1s4XSxuKX0pOm51bGw9PWE/YT17fToib2JqZWN0Ij09dHlwZW9mIGEmJigiZnJvbSJpbiBhfHwidG8iaW4gYSkmJihpPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHQuaXNWYWxpZCgpJiZlLmlzVmFsaWQoKT8oZT1CZShlLHQpLHQuaXNCZWZvcmUoZSk/bj1QZSh0LGUpOigobj1QZShlLHQpKS5taWxsaXNlY29uZHM9LW4ubWlsbGlzZWNvbmRzLG4ubW9udGhzPS1uLm1vbnRocyksbik6e21pbGxpc2Vjb25kczowLG1vbnRoczowfX0oeGUoYS5mcm9tKSx4ZShhLnRvKSksKGE9e30pLm1zPWkubWlsbGlzZWNvbmRzLGEuTT1pLm1vbnRocykscj1uZXcgVGUoYSksQ2UodCkmJmgodCwiX2xvY2FsZSIpJiYoci5fbG9jYWxlPXQuX2xvY2FsZSkscn1mdW5jdGlvbiBGZSh0LGUpe3ZhciBuPXQmJnBhcnNlRmxvYXQodC5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4obik/MDpuKSplfWZ1bmN0aW9uIFBlKHQsZSl7dmFyIG49e307cmV0dXJuIG4ubW9udGhzPWUubW9udGgoKS10Lm1vbnRoKCkrMTIqKGUueWVhcigpLXQueWVhcigpKSx0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIikuaXNBZnRlcihlKSYmLS1uLm1vbnRocyxuLm1pbGxpc2Vjb25kcz0rZS0rdC5jbG9uZSgpLmFkZChuLm1vbnRocywiTSIpLG59ZnVuY3Rpb24gamUodCxlKXtyZXR1cm4gZnVuY3Rpb24obixyKXt2YXIgaTtyZXR1cm4gbnVsbD09PXJ8fGlzTmFOKCtyKXx8KE0oZSwibW9tZW50KCkuIitlKyIocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuIitlKyIobnVtYmVyLCBwZXJpb2QpLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uIiksaT1uLG49cixyPWkpLFllKHRoaXMsUmUobj0ic3RyaW5nIj09dHlwZW9mIG4/K246bixyKSx0KSx0aGlzfX1mdW5jdGlvbiBZZSh0LGUsbixyKXt2YXIgYT1lLl9taWxsaXNlY29uZHMsbz1TZShlLl9kYXlzKSxzPVNlKGUuX21vbnRocyk7dC5pc1ZhbGlkKCkmJihyPW51bGw9PXJ8fHIscyYmU3QodCxfdCh0LCJNb250aCIpK3MqbiksbyYma3QodCwiRGF0ZSIsX3QodCwiRGF0ZSIpK28qbiksYSYmdC5fZC5zZXRUaW1lKHQuX2QudmFsdWVPZigpK2EqbiksciYmaS51cGRhdGVPZmZzZXQodCxvfHxzKSl9UmUuZm49VGUucHJvdG90eXBlLFJlLmludmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gUmUoTmFOKX07dmFyIHplPWplKDEsImFkZCIpLFVlPWplKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uICRlKHQsZSl7dmFyIG49MTIqKGUueWVhcigpLXQueWVhcigpKSsoZS5tb250aCgpLXQubW9udGgoKSkscj10LmNsb25lKCkuYWRkKG4sIm1vbnRocyIpO3JldHVybi0obisoZS1yPDA/KGUtcikvKHItdC5jbG9uZSgpLmFkZChuLTEsIm1vbnRocyIpKTooZS1yKS8odC5jbG9uZSgpLmFkZChuKzEsIm1vbnRocyIpLXIpKSl8fDB9ZnVuY3Rpb24gcWUodCl7dmFyIGU7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0oZT1yZSh0KSkmJih0aGlzLl9sb2NhbGU9ZSksdGhpcyl9aS5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIsaS5kZWZhdWx0Rm9ybWF0VXRjPSJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgV2U9QygibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4iLChmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmxvY2FsZURhdGEoKTp0aGlzLmxvY2FsZSh0KX0pKTtmdW5jdGlvbiBWZSgpe3JldHVybiB0aGlzLl9sb2NhbGV9dmFyIEhlPTEyNjIyNzgwOGU1O2Z1bmN0aW9uIEdlKHQsZSl7cmV0dXJuKHQlZStlKSVlfWZ1bmN0aW9uIFhlKHQsZSxuKXtyZXR1cm4gdDwxMDAmJjA8PXQ/bmV3IERhdGUodCs0MDAsZSxuKS1IZTpuZXcgRGF0ZSh0LGUsbikudmFsdWVPZigpfWZ1bmN0aW9uIFplKHQsZSxuKXtyZXR1cm4gdDwxMDAmJjA8PXQ/RGF0ZS5VVEModCs0MDAsZSxuKS1IZTpEYXRlLlVUQyh0LGUsbil9ZnVuY3Rpb24gUWUodCxlKXtxKDAsW3QsdC5sZW5ndGhdLDAsZSl9ZnVuY3Rpb24gS2UodCxlLG4scixpKXt2YXIgYTtyZXR1cm4gbnVsbD09dD9JdCh0aGlzLHIsaSkueWVhcjooKGE9UnQodCxyLGkpKTxlJiYoZT1hKSxmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhPUx0KHQsZSxuLHIsaSksbz1OdChhLnllYXIsMCxhLmRheU9mWWVhcik7cmV0dXJuIHRoaXMueWVhcihvLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoby5nZXRVVENNb250aCgpKSx0aGlzLmRhdGUoby5nZXRVVENEYXRlKCkpLHRoaXN9LmNhbGwodGhpcyx0LGUsbixyLGkpKX1xKDAsWyJnZyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0pKSxxKDAsWyJHRyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpJTEwMH0pKSxRZSgiZ2dnZyIsIndlZWtZZWFyIiksUWUoImdnZ2dnIiwid2Vla1llYXIiKSxRZSgiR0dHRyIsImlzb1dlZWtZZWFyIiksUWUoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxMKCJ3ZWVrWWVhciIsImdnIiksTCgiaXNvV2Vla1llYXIiLCJHRyIpLFAoIndlZWtZZWFyIiwxKSxQKCJpc29XZWVrWWVhciIsMSksbHQoIkciLGF0KSxsdCgiZyIsYXQpLGx0KCJHRyIsSyxHKSxsdCgiZ2ciLEssRyksbHQoIkdHR0ciLG50LFopLGx0KCJnZ2dnIixudCxaKSxsdCgiR0dHR0ciLHJ0LFEpLGx0KCJnZ2dnZyIscnQsUSkseXQoWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyLnN1YnN0cigwLDIpXT13KHQpfSkpLHl0KFsiZ2ciLCJHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3JdPWkucGFyc2VUd29EaWdpdFllYXIodCl9KSkscSgiUSIsMCwiUW8iLCJxdWFydGVyIiksTCgicXVhcnRlciIsIlEiKSxQKCJxdWFydGVyIiw3KSxsdCgiUSIsSCkscHQoIlEiLChmdW5jdGlvbih0LGUpe2VbMV09Myoodyh0KS0xKX0pKSxxKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksTCgiZGF0ZSIsIkQiKSxQKCJkYXRlIiw5KSxsdCgiRCIsSyksbHQoIkREIixLLEcpLGx0KCJEbyIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8ZS5fb3JkaW5hbFBhcnNlOmUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSkpLHB0KFsiRCIsIkREIl0sMikscHQoIkRvIiwoZnVuY3Rpb24odCxlKXtlWzJdPXcodC5tYXRjaChLKVswXSl9KSk7dmFyIEplPXh0KCJEYXRlIiwhMCk7cSgiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksTCgiZGF5T2ZZZWFyIiwiREREIiksUCgiZGF5T2ZZZWFyIiw0KSxsdCgiREREIixldCksbHQoIkREREQiLFgpLHB0KFsiREREIiwiRERERCJdLChmdW5jdGlvbih0LGUsbil7bi5fZGF5T2ZZZWFyPXcodCl9KSkscSgibSIsWyJtbSIsMl0sMCwibWludXRlIiksTCgibWludXRlIiwibSIpLFAoIm1pbnV0ZSIsMTQpLGx0KCJtIixLKSxsdCgibW0iLEssRykscHQoWyJtIiwibW0iXSw0KTt2YXIgdG49eHQoIk1pbnV0ZXMiLCExKTtxKCJzIixbInNzIiwyXSwwLCJzZWNvbmQiKSxMKCJzZWNvbmQiLCJzIiksUCgic2Vjb25kIiwxNSksbHQoInMiLEspLGx0KCJzcyIsSyxHKSxwdChbInMiLCJzcyJdLDUpO3ZhciBlbixubj14dCgiU2Vjb25kcyIsITEpO2ZvcihxKCJTIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSkscSgwLFsiU1MiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pKSxxKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIikscSgwLFsiU1NTUyIsNF0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMTAqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTIiw1XSwwLChmdW5jdGlvbigpe3JldHVybiAxMDAqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTUyIsNl0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pKSxxKDAsWyJTU1NTU1NTIiw3XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTQqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTU1NTIiw4XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTUqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTU1NTUyIsOV0sMCwoZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pKSxMKCJtaWxsaXNlY29uZCIsIm1zIiksUCgibWlsbGlzZWNvbmQiLDE2KSxsdCgiUyIsZXQsSCksbHQoIlNTIixldCxHKSxsdCgiU1NTIixldCxYKSxlbj0iU1NTUyI7ZW4ubGVuZ3RoPD05O2VuKz0iUyIpbHQoZW4saXQpO2Z1bmN0aW9uIHJuKHQsZSl7ZVs2XT13KDFlMyooIjAuIit0KSl9Zm9yKGVuPSJTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilwdChlbixybik7dmFyIGFuPXh0KCJNaWxsaXNlY29uZHMiLCExKTtxKCJ6IiwwLDAsInpvbmVBYmJyIikscSgienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgb249eC5wcm90b3R5cGU7ZnVuY3Rpb24gc24odCl7cmV0dXJuIHR9b24uYWRkPXplLG9uLmNhbGVuZGFyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dHx8eGUoKSxyPUJlKG4sdGhpcykuc3RhcnRPZigiZGF5IiksYT1pLmNhbGVuZGFyRm9ybWF0KHRoaXMscil8fCJzYW1lRWxzZSIsbz1lJiYoTyhlW2FdKT9lW2FdLmNhbGwodGhpcyxuKTplW2FdKTtyZXR1cm4gdGhpcy5mb3JtYXQob3x8dGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoYSx0aGlzLHhlKG4pKSl9LG9uLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4KHRoaXMpfSxvbi5kaWZmPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aWYoIShyPUJlKHQsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChpPTZlNCooci51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSxlPUkoZSkpe2Nhc2UieWVhciI6YT0kZSh0aGlzLHIpLzEyO2JyZWFrO2Nhc2UibW9udGgiOmE9JGUodGhpcyxyKTticmVhaztjYXNlInF1YXJ0ZXIiOmE9JGUodGhpcyxyKS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjphPSh0aGlzLXIpLzFlMzticmVhaztjYXNlIm1pbnV0ZSI6YT0odGhpcy1yKS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjphPSh0aGlzLXIpLzM2ZTU7YnJlYWs7Y2FzZSJkYXkiOmE9KHRoaXMtci1pKS84NjRlNTticmVhaztjYXNlIndlZWsiOmE9KHRoaXMtci1pKS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDphPXRoaXMtcn1yZXR1cm4gbj9hOmsoYSl9LG9uLmVuZE9mPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHZvaWQgMD09PSh0PUkodCkpfHwibWlsbGlzZWNvbmQiPT09dHx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3ZhciBuPXRoaXMuX2lzVVRDP1plOlhlO3N3aXRjaCh0KXtjYXNlInllYXIiOmU9bih0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMrMywxKS0xO2JyZWFrO2Nhc2UibW9udGgiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkrNyktMTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTM2ZTUtR2UoZSsodGhpcy5faXNVVEM/MDo2ZTQqdGhpcy51dGNPZmZzZXQoKSksMzZlNSktMTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz02ZTQtR2UoZSw2ZTQpLTE7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MWUzLUdlKGUsMWUzKS0xfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uZm9ybWF0PWZ1bmN0aW9uKHQpe3R8fCh0PXRoaXMuaXNVdGMoKT9pLmRlZmF1bHRGb3JtYXRVdGM6aS5kZWZhdWx0Rm9ybWF0KTt2YXIgZT1XKHRoaXMsdCk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoZSl9LG9uLmZyb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfKHQpJiZ0LmlzVmFsaWQoKXx8eGUodCkuaXNWYWxpZCgpKT9SZSh7dG86dGhpcyxmcm9tOnR9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIWUpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LG9uLmZyb21Ob3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZnJvbSh4ZSgpLHQpfSxvbi50bz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF8odCkmJnQuaXNWYWxpZCgpfHx4ZSh0KS5pc1ZhbGlkKCkpP1JlKHtmcm9tOnRoaXMsdG86dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24udG9Ob3c9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudG8oeGUoKSx0KX0sb24uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBPKHRoaXNbdD1JKHQpXSk/dGhpc1t0XSgpOnRoaXN9LG9uLmludmFsaWRBdD1mdW5jdGlvbigpe3JldHVybiBwKHRoaXMpLm92ZXJmbG93fSxvbi5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49Xyh0KT90OnhlKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbi5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPm4udmFsdWVPZigpOm4udmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKGUpLnZhbHVlT2YoKSl9LG9uLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7dmFyIG49Xyh0KT90OnhlKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbi5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPG4udmFsdWVPZigpOnRoaXMuY2xvbmUoKS5lbmRPZihlKS52YWx1ZU9mKCk8bi52YWx1ZU9mKCkpfSxvbi5pc0JldHdlZW49ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9Xyh0KT90OnhlKHQpLGE9XyhlKT9lOnhlKGUpO3JldHVybiEhKHRoaXMuaXNWYWxpZCgpJiZpLmlzVmFsaWQoKSYmYS5pc1ZhbGlkKCkpJiYoIigiPT09KHI9cnx8IigpIilbMF0/dGhpcy5pc0FmdGVyKGksbik6IXRoaXMuaXNCZWZvcmUoaSxuKSkmJigiKSI9PT1yWzFdP3RoaXMuaXNCZWZvcmUoYSxuKTohdGhpcy5pc0FmdGVyKGEsbikpfSxvbi5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbixyPV8odCk/dDp4ZSh0KTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IXIuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oZT1JKGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PXIudmFsdWVPZigpOihuPXIudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKGUpLnZhbHVlT2YoKTw9biYmbjw9dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKSkpfSxvbi5pc1NhbWVPckFmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNBZnRlcih0LGUpfSxvbi5pc1NhbWVPckJlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzU2FtZSh0LGUpfHx0aGlzLmlzQmVmb3JlKHQsZSl9LG9uLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4geSh0aGlzKX0sb24ubGFuZz1XZSxvbi5sb2NhbGU9cWUsb24ubG9jYWxlRGF0YT1WZSxvbi5tYXg9a2Usb24ubWluPV9lLG9uLnBhcnNpbmdGbGFncz1mdW5jdGlvbigpe3JldHVybiBmKHt9LHAodGhpcykpfSxvbi5zZXQ9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0Ij09dHlwZW9mIHQpZm9yKHZhciBuPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaCh7dW5pdDpuLHByaW9yaXR5OkZbbl19KTtyZXR1cm4gZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnByaW9yaXR5LWUucHJpb3JpdHl9KSksZX0odD1SKHQpKSxyPTA7cjxuLmxlbmd0aDtyKyspdGhpc1tuW3JdLnVuaXRdKHRbbltyXS51bml0XSk7ZWxzZSBpZihPKHRoaXNbdD1JKHQpXSkpcmV0dXJuIHRoaXNbdF0oZSk7cmV0dXJuIHRoaXN9LG9uLnN0YXJ0T2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzLDEpO2JyZWFrO2Nhc2UibW9udGgiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksMSk7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKTticmVhaztjYXNlImRheSI6Y2FzZSJkYXRlIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpKTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSsodGhpcy5faXNVVEM/MDo2ZTQqdGhpcy51dGNPZmZzZXQoKSksMzZlNSk7YnJlYWs7Y2FzZSJtaW51dGUiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSw2ZTQpO2JyZWFrO2Nhc2Uic2Vjb25kIjplPXRoaXMuX2QudmFsdWVPZigpLGUtPUdlKGUsMWUzKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKGUpLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LG9uLnN1YnRyYWN0PVVlLG9uLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVyblt0LnllYXIoKSx0Lm1vbnRoKCksdC5kYXRlKCksdC5ob3VyKCksdC5taW51dGUoKSx0LnNlY29uZCgpLHQubWlsbGlzZWNvbmQoKV19LG9uLnRvT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm57eWVhcnM6dC55ZWFyKCksbW9udGhzOnQubW9udGgoKSxkYXRlOnQuZGF0ZSgpLGhvdXJzOnQuaG91cnMoKSxtaW51dGVzOnQubWludXRlcygpLHNlY29uZHM6dC5zZWNvbmRzKCksbWlsbGlzZWNvbmRzOnQubWlsbGlzZWNvbmRzKCl9fSxvbi50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxvbi50b0lTT1N0cmluZz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIGU9ITAhPT10LG49ZT90aGlzLmNsb25lKCkudXRjKCk6dGhpcztyZXR1cm4gbi55ZWFyKCk8MHx8OTk5OTxuLnllYXIoKT9XKG4sZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOk8oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP2U/dGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpOm5ldyBEYXRlKHRoaXMudmFsdWVPZigpKzYwKnRoaXMudXRjT2Zmc2V0KCkqMWUzKS50b0lTT1N0cmluZygpLnJlcGxhY2UoIloiLFcobiwiWiIpKTpXKG4sZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LG9uLmluc3BlY3Q9ZnVuY3Rpb24oKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIHQ9Im1vbWVudCIsZT0iIjt0aGlzLmlzTG9jYWwoKXx8KHQ9MD09PXRoaXMudXRjT2Zmc2V0KCk/Im1vbWVudC51dGMiOiJtb21lbnQucGFyc2Vab25lIixlPSJaIik7dmFyIG49IlsiK3QrJygiXScscj0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiLGk9ZSsnWyIpXSc7cmV0dXJuIHRoaXMuZm9ybWF0KG4rcisiLU1NLUREW1RdSEg6bW06c3MuU1NTIitpKX0sb24udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxvbi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0sb24udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG9uLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSxvbi5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSxvbi55ZWFyPWJ0LG9uLmlzTGVhcFllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdnQodGhpcy55ZWFyKCkpfSxvbi53ZWVrWWVhcj1mdW5jdGlvbih0KXtyZXR1cm4gS2UuY2FsbCh0aGlzLHQsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCksdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveSl9LG9uLmlzb1dlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBLZS5jYWxsKHRoaXMsdCx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfSxvbi5xdWFydGVyPW9uLnF1YXJ0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgoMyoodC0xKSt0aGlzLm1vbnRoKCklMyl9LG9uLm1vbnRoPUF0LG9uLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHd0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSl9LG9uLndlZWs9b24ud2Vla3M9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sb24uaXNvV2Vlaz1vbi5pc29XZWVrcz1mdW5jdGlvbih0KXt2YXIgZT1JdCh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKDcqKHQtZSksImQiKX0sb24ud2Vla3NJblllYXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gUnQodGhpcy55ZWFyKCksdC5kb3csdC5kb3kpfSxvbi5pc29XZWVrc0luWWVhcj1mdW5jdGlvbigpe3JldHVybiBSdCh0aGlzLnllYXIoKSwxLDQpfSxvbi5kYXRlPUplLG9uLmRheT1vbi5kYXlzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZSxuLHI9dGhpcy5faXNVVEM/dGhpcy5fZC5nZXRVVENEYXkoKTp0aGlzLl9kLmdldERheSgpO3JldHVybiBudWxsIT10PyhlPXQsbj10aGlzLmxvY2FsZURhdGEoKSx0PSJzdHJpbmciIT10eXBlb2YgZT9lOmlzTmFOKGUpPyJudW1iZXIiPT10eXBlb2YoZT1uLndlZWtkYXlzUGFyc2UoZSkpP2U6bnVsbDpwYXJzZUludChlLDEwKSx0aGlzLmFkZCh0LXIsImQiKSk6cn0sb24ud2Vla2RheT1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47dmFyIGU9KHRoaXMuZGF5KCkrNy10aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpJTc7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaXNvV2Vla2RheT1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5kYXkoKXx8Nzt2YXIgZSxuLHI9KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLCJzdHJpbmciPT10eXBlb2YgZT9uLndlZWtkYXlzUGFyc2UoZSklN3x8Nzppc05hTihlKT9udWxsOmUpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/cjpyLTcpfSxvbi5kYXlPZlllYXI9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQodC1lLCJkIil9LG9uLmhvdXI9b24uaG91cnM9WHQsb24ubWludXRlPW9uLm1pbnV0ZXM9dG4sb24uc2Vjb25kPW9uLnNlY29uZHM9bm4sb24ubWlsbGlzZWNvbmQ9b24ubWlsbGlzZWNvbmRzPWFuLG9uLnV0Y09mZnNldD1mdW5jdGlvbih0LGUsbil7dmFyIHIsYT10aGlzLl9vZmZzZXR8fDA7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO2lmKG51bGw9PXQpcmV0dXJuIHRoaXMuX2lzVVRDP2E6TmUodGhpcyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihudWxsPT09KHQ9T2Uoc3QsdCkpKXJldHVybiB0aGlzfWVsc2UgTWF0aC5hYnModCk8MTYmJiFuJiYodCo9NjApO3JldHVybiF0aGlzLl9pc1VUQyYmZSYmKHI9TmUodGhpcykpLHRoaXMuX29mZnNldD10LHRoaXMuX2lzVVRDPSEwLG51bGwhPXImJnRoaXMuYWRkKHIsIm0iKSxhIT09dCYmKCFlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP1llKHRoaXMsUmUodC1hLCJtIiksMSwhMSk6dGhpcy5fY2hhbmdlSW5Qcm9ncmVzc3x8KHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M9ITAsaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsKSksdGhpc30sb24udXRjPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLHQpfSxvbi5sb2NhbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09mZnNldCgwLHQpLHRoaXMuX2lzVVRDPSExLHQmJnRoaXMuc3VidHJhY3QoTmUodGhpcyksIm0iKSksdGhpc30sb24ucGFyc2Vab25lPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5fdHptKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwhMSwhMCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX2kpe3ZhciB0PU9lKG90LHRoaXMuX2kpO251bGwhPXQ/dGhpcy51dGNPZmZzZXQodCk6dGhpcy51dGNPZmZzZXQoMCwhMCl9cmV0dXJuIHRoaXN9LG9uLmhhc0FsaWduZWRIb3VyT2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJih0PXQ/eGUodCkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS10KSU2MD09MCl9LG9uLmlzRFNUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKX0sb24uaXNMb2NhbD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJiF0aGlzLl9pc1VUQ30sb24uaXNVdGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiZ0aGlzLl9pc1VUQ30sb24uaXNVdGM9RGUsb24uaXNVVEM9RGUsb24uem9uZUFiYnI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IlVUQyI6IiJ9LG9uLnpvbmVOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSI6IiJ9LG9uLmRhdGVzPUMoImRhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuIixKZSksb24ubW9udGhzPUMoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsQXQpLG9uLnllYXJzPUMoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLGJ0KSxvbi56b25lPUMoIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dD8oInN0cmluZyIhPXR5cGVvZiB0JiYodD0tdCksdGhpcy51dGNPZmZzZXQodCxlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pKSxvbi5pc0RTVFNoaWZ0ZWQ9QygiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsKGZ1bmN0aW9uKCl7aWYoIXModGhpcy5faXNEU1RTaGlmdGVkKSlyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO3ZhciB0PXt9O2lmKG0odCx0aGlzKSwodD1tZSh0KSkuX2Epe3ZhciBlPXQuX2lzVVRDP2QodC5fYSk6eGUodC5fYSk7dGhpcy5faXNEU1RTaGlmdGVkPXRoaXMuaXNWYWxpZCgpJiYwPEUodC5fYSxlLnRvQXJyYXkoKSl9ZWxzZSB0aGlzLl9pc0RTVFNoaWZ0ZWQ9ITE7cmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZH0pKTt2YXIgY249Ti5wcm90b3R5cGU7ZnVuY3Rpb24gdW4odCxlLG4scil7dmFyIGk9cmUoKSxhPWQoKS5zZXQocixlKTtyZXR1cm4gaVtuXShhLHQpfWZ1bmN0aW9uIGxuKHQsZSxuKXtpZihjKHQpJiYoZT10LHQ9dm9pZCAwKSx0PXR8fCIiLG51bGwhPWUpcmV0dXJuIHVuKHQsZSxuLCJtb250aCIpO3ZhciByLGk9W107Zm9yKHI9MDtyPDEyO3IrKylpW3JdPXVuKHQscixuLCJtb250aCIpO3JldHVybiBpfWZ1bmN0aW9uIGhuKHQsZSxuLHIpeyJib29sZWFuIj09dHlwZW9mIHQ/YyhlKSYmKG49ZSxlPXZvaWQgMCk6KGU9dCx0PSExLGMobj1lKSYmKG49ZSxlPXZvaWQgMCkpLGU9ZXx8IiI7dmFyIGksYT1yZSgpLG89dD9hLl93ZWVrLmRvdzowO2lmKG51bGwhPW4pcmV0dXJuIHVuKGUsKG4rbyklNyxyLCJkYXkiKTt2YXIgcz1bXTtmb3IoaT0wO2k8NztpKyspc1tpXT11bihlLChpK28pJTcsciwiZGF5Iik7cmV0dXJuIHN9Y24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMuX2NhbGVuZGFyW3RdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gTyhyKT9yLmNhbGwoZSxuKTpyfSxjbi5sb25nRGF0ZUZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9sb25nRGF0ZUZvcm1hdFt0XSxuPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3QudG9VcHBlckNhc2UoKV07cmV0dXJuIGV8fCFuP2U6KHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdPW4ucmVwbGFjZSgvTU1NTXxNTXxERHxkZGRkL2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKDEpfSkpLHRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdKX0sY24uaW52YWxpZERhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9LGNuLm9yZGluYWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgiJWQiLHQpfSxjbi5wcmVwYXJzZT1zbixjbi5wb3N0Zm9ybWF0PXNuLGNuLnJlbGF0aXZlVGltZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10aGlzLl9yZWxhdGl2ZVRpbWVbbl07cmV0dXJuIE8oaSk/aSh0LGUsbixyKTppLnJlcGxhY2UoLyVkL2ksdCl9LGNuLnBhc3RGdXR1cmU9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9yZWxhdGl2ZVRpbWVbMDx0PyJmdXR1cmUiOiJwYXN0Il07cmV0dXJuIE8obik/bihlKTpuLnJlcGxhY2UoLyVzL2ksZSl9LGNuLnNldD1mdW5jdGlvbih0KXt2YXIgZSxuO2ZvcihuIGluIHQpTyhlPXRbbl0pP3RoaXNbbl09ZTp0aGlzWyJfIituXT1lO3RoaXMuX2NvbmZpZz10LHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9LGNuLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiB0P2EodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbdC5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdHx8RXQpLnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzLnN0YW5kYWxvbmV9LGNuLm1vbnRoc1Nob3J0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHNTaG9ydCk/dGhpcy5fbW9udGhzU2hvcnRbdC5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFtFdC50ZXN0KGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bdC5tb250aCgpXTphKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydDp0aGlzLl9tb250aHNTaG9ydC5zdGFuZGFsb25lfSxjbi5tb250aHNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpcmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGEsbz10LnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX21vbnRoc1BhcnNlKWZvcih0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSxyPTA7cjwxMjsrK3IpYT1kKFsyZTMscl0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl09dGhpcy5tb250aHNTaG9ydChhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT10aGlzLm1vbnRocyhhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBuPyJNTU0iPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSk/aTpudWxsOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDoiTU1NIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihpPWQoWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChhPSJeIit0aGlzLm1vbnRocyhpLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoaSwiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxCdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9T3QpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sY24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8QnQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sY24ud2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gSXQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sY24uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGNuLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxjbi53ZWVrZGF5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW3QmJiEwIT09dCYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09dD9GdChuLHRoaXMuX3dlZWsuZG93KTp0P25bdC5kYXkoKV06bn0sY24ud2Vla2RheXNNaW49ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0Z0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxjbi53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9GdCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sY24ud2Vla2RheXNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxyPTA7cjw3OysrcilhPWQoWzJlMywxXSkuZGF5KHIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iZGRkZCI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9bXQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPW10LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGRkIj09PWU/LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTotMSE9PShpPW10LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGQiPT09ZT8tMSE9PShpPW10LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOi0xIT09KGk9bXQuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpP2k6LTEhPT0oaT1tdC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscj0wO3I8NztyKyspe2lmKGk9ZChbMmUzLDFdKS5kYXkociksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtyXXx8KGE9Il4iK3RoaXMud2Vla2RheXMoaSwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ud2Vla2RheXNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXp0KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGNuLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9VXQpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sY24ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PSR0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGNuLmlzUE09ZnVuY3Rpb24odCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxjbi5tZXJpZGllbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDExPHQ/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9LGVlKCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPXQlMTA7cmV0dXJuIHQrKDE9PT13KHQlMTAwLzEwKT8idGgiOjE9PT1lPyJzdCI6Mj09PWU/Im5kIjozPT09ZT8icmQiOiJ0aCIpfX0pLGkubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZWUpLGkubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmUpO3ZhciBmbj1NYXRoLmFicztmdW5jdGlvbiBkbih0LGUsbixyKXt2YXIgaT1SZShlLG4pO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPXIqaS5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPXIqaS5fZGF5cyx0Ll9tb250aHMrPXIqaS5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24geW4odCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gdm4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXModCl9fXZhciBtbj12bigibXMiKSxibj12bigicyIpLHhuPXZuKCJtIiksX249dm4oImgiKSxrbj12bigiZCIpLHduPXZuKCJ3IiksRW49dm4oIk0iKSxUbj12bigiUSIpLENuPXZuKCJ5Iik7ZnVuY3Rpb24gU24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbdF06TmFOfX12YXIgQW49U24oIm1pbGxpc2Vjb25kcyIpLE1uPVNuKCJzZWNvbmRzIiksT249U24oIm1pbnV0ZXMiKSxCbj1TbigiaG91cnMiKSxObj1TbigiZGF5cyIpLERuPVNuKCJtb250aHMiKSxMbj1TbigieWVhcnMiKSxJbj1NYXRoLnJvdW5kLFJuPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEZuPU1hdGguYWJzO2Z1bmN0aW9uIFBuKHQpe3JldHVybigwPHQpLSh0PDApfHwrdH1mdW5jdGlvbiBqbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdCxlLG49Rm4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscj1Gbih0aGlzLl9kYXlzKSxpPUZuKHRoaXMuX21vbnRocyk7ZT1rKCh0PWsobi82MCkpLzYwKSxuJT02MCx0JT02MDt2YXIgYT1rKGkvMTIpLG89aSU9MTIscz1yLGM9ZSx1PXQsbD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixoPXRoaXMuYXNTZWNvbmRzKCk7aWYoIWgpcmV0dXJuIlAwRCI7dmFyIGY9aDwwPyItIjoiIixkPVBuKHRoaXMuX21vbnRocykhPT1QbihoKT8iLSI6IiIscD1Qbih0aGlzLl9kYXlzKSE9PVBuKGgpPyItIjoiIix5PVBuKHRoaXMuX21pbGxpc2Vjb25kcykhPT1QbihoKT8iLSI6IiI7cmV0dXJuIGYrIlAiKyhhP2QrYSsiWSI6IiIpKyhvP2QrbysiTSI6IiIpKyhzP3ArcysiRCI6IiIpKyhjfHx1fHxsPyJUIjoiIikrKGM/eStjKyJIIjoiIikrKHU/eSt1KyJNIjoiIikrKGw/eStsKyJTIjoiIil9dmFyIFluPVRlLnByb3RvdHlwZTtyZXR1cm4gWW4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxZbi5hYnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Zm4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWZuKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1mbih0aGlzLl9tb250aHMpLHQubWlsbGlzZWNvbmRzPWZuKHQubWlsbGlzZWNvbmRzKSx0LnNlY29uZHM9Zm4odC5zZWNvbmRzKSx0Lm1pbnV0ZXM9Zm4odC5taW51dGVzKSx0LmhvdXJzPWZuKHQuaG91cnMpLHQubW9udGhzPWZuKHQubW9udGhzKSx0LnllYXJzPWZuKHQueWVhcnMpLHRoaXN9LFluLmFkZD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwxKX0sWW4uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsLTEpfSxZbi5hcz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZSxuLHI9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0odD1JKHQpKXx8InF1YXJ0ZXIiPT09dHx8InllYXIiPT09dClzd2l0Y2goZT10aGlzLl9kYXlzK3IvODY0ZTUsbj10aGlzLl9tb250aHMreW4oZSksdCl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9ZWxzZSBzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoZ24odGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K3IvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStyLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrci8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK3IvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStyLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19LFluLmFzTWlsbGlzZWNvbmRzPW1uLFluLmFzU2Vjb25kcz1ibixZbi5hc01pbnV0ZXM9eG4sWW4uYXNIb3Vycz1fbixZbi5hc0RheXM9a24sWW4uYXNXZWVrcz13bixZbi5hc01vbnRocz1FbixZbi5hc1F1YXJ0ZXJzPVRuLFluLmFzWWVhcnM9Q24sWW4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqdyh0aGlzLl9tb250aHMvMTIpOk5hTn0sWW4uX2J1YmJsZT1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYT10aGlzLl9taWxsaXNlY29uZHMsbz10aGlzLl9kYXlzLHM9dGhpcy5fbW9udGhzLGM9dGhpcy5fZGF0YTtyZXR1cm4gMDw9YSYmMDw9byYmMDw9c3x8YTw9MCYmbzw9MCYmczw9MHx8KGErPTg2NGU1KnBuKGduKHMpK28pLHM9bz0wKSxjLm1pbGxpc2Vjb25kcz1hJTFlMyx0PWsoYS8xZTMpLGMuc2Vjb25kcz10JTYwLGU9ayh0LzYwKSxjLm1pbnV0ZXM9ZSU2MCxuPWsoZS82MCksYy5ob3Vycz1uJTI0LHMrPWk9ayh5bihvKz1rKG4vMjQpKSksby09cG4oZ24oaSkpLHI9ayhzLzEyKSxzJT0xMixjLmRheXM9byxjLm1vbnRocz1zLGMueWVhcnM9cix0aGlzfSxZbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzKX0sWW4uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PUkodCksdGhpcy5pc1ZhbGlkKCk/dGhpc1t0KyJzIl0oKTpOYU59LFluLm1pbGxpc2Vjb25kcz1BbixZbi5zZWNvbmRzPU1uLFluLm1pbnV0ZXM9T24sWW4uaG91cnM9Qm4sWW4uZGF5cz1ObixZbi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiBrKHRoaXMuZGF5cygpLzcpfSxZbi5tb250aHM9RG4sWW4ueWVhcnM9TG4sWW4uaHVtYW5pemU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9dGhpcy5sb2NhbGVEYXRhKCksZj0oZT0hdCxuPWgscj1SZSh0aGlzKS5hYnMoKSxpPUluKHIuYXMoInMiKSksYT1JbihyLmFzKCJtIikpLG89SW4oci5hcygiaCIpKSxzPUluKHIuYXMoImQiKSksYz1JbihyLmFzKCJNIikpLHU9SW4oci5hcygieSIpKSwobD1pPD1Sbi5zcyYmWyJzIixpXXx8aTxSbi5zJiZbInNzIixpXXx8YTw9MSYmWyJtIl18fGE8Um4ubSYmWyJtbSIsYV18fG88PTEmJlsiaCJdfHxvPFJuLmgmJlsiaGgiLG9dfHxzPD0xJiZbImQiXXx8czxSbi5kJiZbImRkIixzXXx8Yzw9MSYmWyJNIl18fGM8Um4uTSYmWyJNTSIsY118fHU8PTEmJlsieSJdfHxbInl5Iix1XSlbMl09ZSxsWzNdPTA8K3RoaXMsbFs0XT1uLGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkucmVsYXRpdmVUaW1lKGV8fDEsISFuLHQscil9LmFwcGx5KG51bGwsbCkpO3JldHVybiB0JiYoZj1oLnBhc3RGdXR1cmUoK3RoaXMsZikpLGgucG9zdGZvcm1hdChmKX0sWW4udG9JU09TdHJpbmc9am4sWW4udG9TdHJpbmc9am4sWW4udG9KU09OPWpuLFluLmxvY2FsZT1xZSxZbi5sb2NhbGVEYXRhPVZlLFluLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixqbiksWW4ubGFuZz1XZSxxKCJYIiwwLDAsInVuaXgiKSxxKCJ4IiwwLDAsInZhbHVlT2YiKSxsdCgieCIsYXQpLGx0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxwdCgiWCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KHQsMTApKX0pKSxwdCgieCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKHcodCkpfSkpLGkudmVyc2lvbj0iMi4yNC4wIixlPXhlLGkuZm49b24saS5taW49ZnVuY3Rpb24oKXtyZXR1cm4gd2UoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIHdlKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxpLnV0Yz1kLGkudW5peD1mdW5jdGlvbih0KXtyZXR1cm4geGUoMWUzKnQpfSxpLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRocyIpfSxpLmlzRGF0ZT11LGkubG9jYWxlPWVlLGkuaW52YWxpZD1nLGkuZHVyYXRpb249UmUsaS5pc01vbWVudD1fLGkud2Vla2RheXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXMiKX0saS5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4geGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxpLmxvY2FsZURhdGE9cmUsaS5pc0R1cmF0aW9uPUNlLGkubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHNTaG9ydCIpfSxpLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzTWluIil9LGkuZGVmaW5lTG9jYWxlPW5lLGkudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9ZSl7dmFyIG4scixpPVp0O251bGwhPShyPXRlKHQpKSYmKGk9ci5fY29uZmlnKSwobj1uZXcgTihlPUIoaSxlKSkpLnBhcmVudExvY2FsZT1RdFt0XSxRdFt0XT1uLGVlKHQpfWVsc2UgbnVsbCE9UXRbdF0mJihudWxsIT1RdFt0XS5wYXJlbnRMb2NhbGU/UXRbdF09UXRbdF0ucGFyZW50TG9jYWxlOm51bGwhPVF0W3RdJiZkZWxldGUgUXRbdF0pO3JldHVybiBRdFt0XX0saS5sb2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoUXQpfSxpLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXNTaG9ydCIpfSxpLm5vcm1hbGl6ZVVuaXRzPUksaS5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9JbjoiZnVuY3Rpb24iPT10eXBlb2YgdCYmKEluPXQsITApfSxpLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1Sblt0XSYmKHZvaWQgMD09PWU/Um5bdF06KFJuW3RdPWUsInMiPT09dCYmKFJuLnNzPWUtMSksITApKX0saS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZGlmZihlLCJkYXlzIiwhMCk7cmV0dXJuIG48LTY/InNhbWVFbHNlIjpuPC0xPyJsYXN0V2VlayI6bjwwPyJsYXN0RGF5IjpuPDE/InNhbWVEYXkiOm48Mj8ibmV4dERheSI6bjw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0saS5wcm90b3R5cGU9b24saS5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0saX0oKX0pLmNhbGwodGhpcyxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwzXSxuPVsxLDVdLHI9WzcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMSwyOCwzM10saT1bMSwxNV0sYT1bMSwxNl0sbz1bMSwxN10scz1bMSwxOF0sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwyNF0sZD1bMSwyNl0scD1bMSwyOV0seT1bNSw3LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjEsMjgsMzNdLGc9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LGdhbnR0OjUsZG9jdW1lbnQ6NixFT0Y6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkw6MTEsZGF0ZUZvcm1hdDoxMixpbmNsdXNpdmVFbmREYXRlczoxMyx0b3BBeGlzOjE0LGF4aXNGb3JtYXQ6MTUsZXhjbHVkZXM6MTYsdG9kYXlNYXJrZXI6MTcsdGl0bGU6MTgsc2VjdGlvbjoxOSxjbGlja1N0YXRlbWVudDoyMCx0YXNrVHh0OjIxLHRhc2tEYXRhOjIyLG9wZW5EaXJlY3RpdmU6MjMsdHlwZURpcmVjdGl2ZToyNCxjbG9zZURpcmVjdGl2ZToyNSwiOiI6MjYsYXJnRGlyZWN0aXZlOjI3LGNsaWNrOjI4LGNhbGxiYWNrbmFtZToyOSxjYWxsYmFja2FyZ3M6MzAsaHJlZjozMSxjbGlja1N0YXRlbWVudERlYnVnOjMyLG9wZW5fZGlyZWN0aXZlOjMzLHR5cGVfZGlyZWN0aXZlOjM0LGFyZ19kaXJlY3RpdmU6MzUsY2xvc2VfZGlyZWN0aXZlOjM2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJnYW50dCIsNzoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5MIiwxMjoiZGF0ZUZvcm1hdCIsMTM6ImluY2x1c2l2ZUVuZERhdGVzIiwxNDoidG9wQXhpcyIsMTU6ImF4aXNGb3JtYXQiLDE2OiJleGNsdWRlcyIsMTc6InRvZGF5TWFya2VyIiwxODoidGl0bGUiLDE5OiJzZWN0aW9uIiwyMToidGFza1R4dCIsMjI6InRhc2tEYXRhIiwyNjoiOiIsMjg6ImNsaWNrIiwyOToiY2FsbGJhY2tuYW1lIiwzMDoiY2FsbGJhY2thcmdzIiwzMToiaHJlZiIsMzM6Im9wZW5fZGlyZWN0aXZlIiwzNDoidHlwZV9kaXJlY3RpdmUiLDM1OiJhcmdfZGlyZWN0aXZlIiwzNjoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzQsNF0sWzQsNl0sWzIwLDJdLFsyMCwzXSxbMjAsM10sWzIwLDRdLFsyMCwzXSxbMjAsNF0sWzIwLDJdLFszMiwyXSxbMzIsM10sWzMyLDNdLFszMiw0XSxbMzIsM10sWzMyLDRdLFszMiwyXSxbMjMsMV0sWzI0LDFdLFsyNywxXSxbMjUsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAyOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgOTpyLnNldERhdGVGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTA6ci5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpLHRoaXMuJD1hW3NdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxMTpyLlRvcEF4aXMoKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMjpyLnNldEF4aXNGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTM6ci5zZXRFeGNsdWRlcyhhW3NdLnN1YnN0cig5KSksdGhpcy4kPWFbc10uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMTQ6ci5zZXRUb2RheU1hcmtlcihhW3NdLnN1YnN0cigxMikpLHRoaXMuJD1hW3NdLnN1YnN0cigxMik7YnJlYWs7Y2FzZSAxNTpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxNjpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDE4OnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDIyOnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdLG51bGwpO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDI1OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0sYVtzLTFdKSxyLnNldExpbmsoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbc10sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0xXSxhW3NdKSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSk7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9YVtzLTFdLHIuc2V0TGluayhhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyOTpjYXNlIDM1OnRoaXMuJD1hW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzMDpjYXNlIDMxOmNhc2UgMzM6dGhpcy4kPWFbcy0yXSsiICIrYVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzNDp0aGlzLiQ9YVtzLTNdKyIgIithW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDM2OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzk6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZ2FudHQiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OmUsMjM6NCwzMzpufSx7MTpbM119LHszOjYsNDoyLDU6ZSwyMzo0LDMzOm59LHQocixbMiwzXSx7Njo3fSksezI0OjgsMzQ6WzEsOV19LHszNDpbMiwzNl19LHsxOlsyLDFdfSx7NDoyNSw3OlsxLDEwXSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjppLDEzOmEsMTQ6bywxNTpzLDE2OmMsMTc6dSwxODpsLDE5OmgsMjA6MjMsMjE6ZiwyMzo0LDI4OmQsMzM6bn0sezI1OjI3LDI2OlsxLDI4XSwzNjpwfSx0KFsyNiwzNl0sWzIsMzddKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI1LDEwOjMwLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6aCwyMDoyMywyMTpmLDIzOjQsMjg6ZCwzMzpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDldKSx0KHIsWzIsMTBdKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMTNdKSx0KHIsWzIsMTRdKSx0KHIsWzIsMTVdKSx0KHIsWzIsMTZdKSx0KHIsWzIsMTddKSx7MjI6WzEsMzFdfSx0KHIsWzIsMTldKSx7Mjk6WzEsMzJdLDMxOlsxLDMzXX0sezExOlsxLDM0XX0sezI3OjM1LDM1OlsxLDM2XX0sezExOlsyLDM5XX0sdChyLFsyLDVdKSx0KHIsWzIsMThdKSx0KHIsWzIsMjJdLHszMDpbMSwzN10sMzE6WzEsMzhdfSksdChyLFsyLDI4XSx7Mjk6WzEsMzldfSksdCh5LFsyLDIwXSksezI1OjQwLDM2OnB9LHszNjpbMiwzOF19LHQocixbMiwyM10sezMxOlsxLDQxXX0pLHQocixbMiwyNF0pLHQocixbMiwyNl0sezMwOlsxLDQyXX0pLHsxMTpbMSw0M119LHQocixbMiwyNV0pLHQocixbMiwyN10pLHQoeSxbMiwyMV0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwzNl0sNjpbMiwxXSwyOTpbMiwzOV0sMzY6WzIsMzhdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sdj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDMzO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzNDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjY7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM2O2Nhc2UgNDpyZXR1cm4gMzU7Y2FzZSA1OmNhc2UgNjpjYXNlIDc6YnJlYWs7Y2FzZSA4OnJldHVybiAxMTtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmJyZWFrO2Nhc2UgMTI6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDMxO2Nhc2UgMTU6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMjk7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gMzA7Y2FzZSAyMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI4O2Nhc2UgMjQ6cmV0dXJuIDU7Y2FzZSAyNTpyZXR1cm4gMTI7Y2FzZSAyNjpyZXR1cm4gMTM7Y2FzZSAyNzpyZXR1cm4gMTQ7Y2FzZSAyODpyZXR1cm4gMTU7Y2FzZSAyOTpyZXR1cm4gMTY7Y2FzZSAzMDpyZXR1cm4gMTc7Y2FzZSAzMTpyZXR1cm4iZGF0ZSI7Y2FzZSAzMjpyZXR1cm4gMTg7Y2FzZSAzMzpyZXR1cm4gMTk7Y2FzZSAzNDpyZXR1cm4gMjE7Y2FzZSAzNTpyZXR1cm4gMjI7Y2FzZSAzNjpyZXR1cm4gMjY7Y2FzZSAzNzpyZXR1cm4gNztjYXNlIDM4OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxOSwyMF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNiwxNywxOF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTUsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzhdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBtKCl7dGhpcy55eT17fX1yZXR1cm4gZy5sZXhlcj12LG0ucHJvdG90eXBlPWcsZy5QYXJzZXI9bSxuZXcgbX0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOCksaT1uKDgxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJmkodC5sZW5ndGgpJiYhcih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1NyksaT1uKDI2NyksYT1uKDM1KSxvPW4oNSkscz1uKDI3NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbD09dD9hOiJvYmplY3QiPT10eXBlb2YgdD9vKHQpP2kodFswXSx0WzFdKTpyKHQpOnModCl9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDldLG49WzEsN10scj1bMSw2XSxpPVsxLDhdLGE9WzEsMjAsMjEsMjIsMjMsMzgsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbz1bMiwxMF0scz1bMSwyMF0sYz1bMSwyMV0sdT1bMSwyMl0sbD1bMSwyM10saD1bMSwzMF0sZj1bMSw1OV0sZD1bMSwzM10scD1bMSwzNF0seT1bMSwzNV0sZz1bMSwzNl0sdj1bMSwzN10sbT1bMSw1M10sYj1bMSw0OF0seD1bMSw1MF0sXz1bMSw0NV0saz1bMSw0OV0sdz1bMSw1Ml0sRT1bMSw1Nl0sVD1bMSw1N10sQz1bMSwzOF0sUz1bMSwzOV0sQT1bMSw0MF0sTT1bMSw0MV0sTz1bMSw1OF0sQj1bMSw0N10sTj1bMSw1MV0sRD1bMSw1NF0sTD1bMSw1NV0sST1bMSw0Nl0sUj1bMSw2Ml0sRj1bMSw2N10sUD1bMSwyMCwyMSwyMiwyMywzOCw0Miw0Nyw3Niw3Nyw3OCw3OSw4MCw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxqPVsxLDcxXSxZPVsxLDcwXSx6PVsxLDcyXSxVPVsyMCwyMSwyMyw3MCw3MV0sJD1bMSw5M10scT1bMSw5OF0sVz1bMSw5NV0sVj1bMSwxMDBdLEg9WzEsMTAzXSxHPVsxLDEwMV0sWD1bMSwxMDJdLFo9WzEsOTZdLFE9WzEsMTA4XSxLPVsxLDEwN10sSj1bMSw5N10sdHQ9WzEsOTldLGV0PVsxLDEwNF0sbnQ9WzEsMTA1XSxydD1bMSwxMDZdLGl0PVsxLDEwOV0sYXQ9WzIwLDIxLDIyLDIzLDcwLDcxXSxvdD1bMjAsMjEsMjIsMjMsNDgsNzAsNzFdLHN0PVsyMCwyMSwyMiwyMyw0MCw0Nyw0OCw1MCw1Miw1NCw1Niw1OCw2MCw2Miw2Myw2NSw3MCw3MSw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLGN0PVsyMCwyMSwyM10sdXQ9WzIwLDIxLDIzLDQ3LDcwLDcxLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbHQ9WzEsMTIsMjAsMjEsMjIsMjMsMjQsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0saHQ9WzQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sZnQ9WzEsMTQxXSxkdD1bMSwxNDldLHB0PVsxLDE1MF0seXQ9WzEsMTUxXSxndD1bMSwxNTJdLHZ0PVsxLDEzNl0sbXQ9WzEsMTM3XSxidD1bMSwxMzNdLHh0PVsxLDE0NF0sX3Q9WzEsMTQ1XSxrdD1bMSwxNDZdLHd0PVsxLDE0N10sRXQ9WzEsMTQ4XSxUdD1bMSwxNTNdLEN0PVsxLDE1NF0sU3Q9WzEsMTM5XSxBdD1bMSwxNDJdLE10PVsxLDEzOF0sT3Q9WzEsMTM1XSxCdD1bMjAsMjEsMjIsMjMsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sTnQ9WzEsMTU3XSxEdD1bMjAsMjEsMjIsMjMsMjYsNDcsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxMdD1bMjAsMjEsMjIsMjMsMjQsMjYsMzgsNDAsNDEsNDIsNDcsNTEsNTMsNTUsNTcsNTksNjEsNjIsNjQsNjYsNzAsNzEsNzIsNzYsNzcsNzgsNzksODAsODEsODIsODUsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDEwNSwxMDYsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLEl0PVsxMiwyMSwyMiwyNF0sUnQ9WzIyLDk2XSxGdD1bMSwyMzhdLFB0PVsxLDI0Ml0sanQ9WzEsMjM5XSxZdD1bMSwyMzZdLHp0PVsxLDIzM10sVXQ9WzEsMjM0XSwkdD1bMSwyMzVdLHF0PVsxLDIzN10sV3Q9WzEsMjQwXSxWdD1bMSwyNDFdLEh0PVsxLDI0M10sR3Q9WzEsMjYwXSxYdD1bMjAsMjEsMjMsOTZdLFp0PVsyMCwyMSwyMiwyMyw3Niw5Miw5NSw5Niw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNV0sUXQ9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHQ6MzksU1FTOjQwLFNRRTo0MSxlbmQ6NDIsZGlyZWN0aW9uOjQzLGxpbms6NDQsbm9kZTo0NSx2ZXJ0ZXg6NDYsQU1QOjQ3LFNUWUxFX1NFUEFSQVRPUjo0OCxpZFN0cmluZzo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsQ1lMSU5ERVJTVEFSVDo1OCxDWUxJTkRFUkVORDo1OSxESUFNT05EX1NUQVJUOjYwLERJQU1PTkRfU1RPUDo2MSxUQUdFTkQ6NjIsVFJBUFNUQVJUOjYzLFRSQVBFTkQ6NjQsSU5WVFJBUFNUQVJUOjY1LElOVlRSQVBFTkQ6NjYsbGlua1N0YXRlbWVudDo2NyxhcnJvd1RleHQ6NjgsVEVTVFNUUjo2OSxTVEFSVF9MSU5LOjcwLExJTks6NzEsUElQRTo3Mix0ZXh0VG9rZW46NzMsU1RSOjc0LGtleXdvcmRzOjc1LFNUWUxFOjc2LExJTktTVFlMRTo3NyxDTEFTU0RFRjo3OCxDTEFTUzo3OSxDTElDSzo4MCxET1dOOjgxLFVQOjgyLHRleHROb1RhZ3M6ODMsdGV4dE5vVGFnc1Rva2VuOjg0LERFRkFVTFQ6ODUsc3R5bGVzT3B0Ojg2LGFscGhhTnVtOjg3LENBTExCQUNLTkFNRTo4OCxDQUxMQkFDS0FSR1M6ODksSFJFRjo5MCxMSU5LX1RBUkdFVDo5MSxIRVg6OTIsbnVtTGlzdDo5MyxJTlRFUlBPTEFURTo5NCxOVU06OTUsQ09NTUE6OTYsc3R5bGU6OTcsc3R5bGVDb21wb25lbnQ6OTgsQUxQSEE6OTksQ09MT046MTAwLE1JTlVTOjEwMSxVTklUOjEwMixCUktUOjEwMyxET1Q6MTA0LFBDVDoxMDUsVEFHU1RBUlQ6MTA2LGFscGhhTnVtVG9rZW46MTA3LGlkU3RyaW5nVG9rZW46MTA4LGFscGhhTnVtU3RhdGVtZW50OjEwOSxkaXJlY3Rpb25fdGI6MTEwLGRpcmVjdGlvbl9idDoxMTEsZGlyZWN0aW9uX3JsOjExMixkaXJlY3Rpb25fbHI6MTEzLFBVTkNUVUFUSU9OOjExNCxVTklDT0RFX1RFWFQ6MTE1LFBMVVM6MTE2LEVRVUFMUzoxMTcsTVVMVDoxMTgsVU5ERVJTQ09SRToxMTksZ3JhcGhDb2RlVG9rZW5zOjEyMCxBUlJPV19DUk9TUzoxMjEsQVJST1dfUE9JTlQ6MTIyLEFSUk9XX0NJUkNMRToxMjMsQVJST1dfT1BFTjoxMjQsUVVPVEU6MTI1LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiwxMDoiOiIsMTI6Im9wZW5fZGlyZWN0aXZlIiwxMzoidHlwZV9kaXJlY3RpdmUiLDE0OiJhcmdfZGlyZWN0aXZlIiwxNToiY2xvc2VfZGlyZWN0aXZlIiwyMDoiU0VNSSIsMjE6Ik5FV0xJTkUiLDIyOiJTUEFDRSIsMjM6IkVPRiIsMjQ6IkdSQVBIIiwyNToiTk9ESVIiLDI2OiJESVIiLDM4OiJzdWJncmFwaCIsNDA6IlNRUyIsNDE6IlNRRSIsNDI6ImVuZCIsNDc6IkFNUCIsNDg6IlNUWUxFX1NFUEFSQVRPUiIsNTA6IlBTIiw1MToiUEUiLDUyOiIoLSIsNTM6Ii0pIiw1NDoiU1RBRElVTVNUQVJUIiw1NToiU1RBRElVTUVORCIsNTY6IlNVQlJPVVRJTkVTVEFSVCIsNTc6IlNVQlJPVVRJTkVFTkQiLDU4OiJDWUxJTkRFUlNUQVJUIiw1OToiQ1lMSU5ERVJFTkQiLDYwOiJESUFNT05EX1NUQVJUIiw2MToiRElBTU9ORF9TVE9QIiw2MjoiVEFHRU5EIiw2MzoiVFJBUFNUQVJUIiw2NDoiVFJBUEVORCIsNjU6IklOVlRSQVBTVEFSVCIsNjY6IklOVlRSQVBFTkQiLDY5OiJURVNUU1RSIiw3MDoiU1RBUlRfTElOSyIsNzE6IkxJTksiLDcyOiJQSVBFIiw3NDoiU1RSIiw3NjoiU1RZTEUiLDc3OiJMSU5LU1RZTEUiLDc4OiJDTEFTU0RFRiIsNzk6IkNMQVNTIiw4MDoiQ0xJQ0siLDgxOiJET1dOIiw4MjoiVVAiLDg1OiJERUZBVUxUIiw4ODoiQ0FMTEJBQ0tOQU1FIiw4OToiQ0FMTEJBQ0tBUkdTIiw5MDoiSFJFRiIsOTE6IkxJTktfVEFSR0VUIiw5MjoiSEVYIiw5NDoiSU5URVJQT0xBVEUiLDk1OiJOVU0iLDk2OiJDT01NQSIsOTk6IkFMUEhBIiwxMDA6IkNPTE9OIiwxMDE6Ik1JTlVTIiwxMDI6IlVOSVQiLDEwMzoiQlJLVCIsMTA0OiJET1QiLDEwNToiUENUIiwxMDY6IlRBR1NUQVJUIiwxMTA6ImRpcmVjdGlvbl90YiIsMTExOiJkaXJlY3Rpb25fYnQiLDExMjoiZGlyZWN0aW9uX3JsIiwxMTM6ImRpcmVjdGlvbl9sciIsMTE0OiJQVU5DVFVBVElPTiIsMTE1OiJVTklDT0RFX1RFWFQiLDExNjoiUExVUyIsMTE3OiJFUVVBTFMiLDExODoiTVVMVCIsMTE5OiJVTkRFUlNDT1JFIiwxMjE6IkFSUk9XX0NST1NTIiwxMjI6IkFSUk9XX1BPSU5UIiwxMjM6IkFSUk9XX0NJUkNMRSIsMTI0OiJBUlJPV19PUEVOIiwxMjU6IlFVT1RFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDRdLFs1LDZdLFs2LDFdLFs3LDFdLFsxMSwxXSxbOCwxXSxbNCwyXSxbMTcsMF0sWzE3LDJdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE2LDJdLFsxNiwyXSxbMTYsMl0sWzE2LDNdLFsyOCwyXSxbMjgsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI3LDFdLFsyNywxXSxbMjcsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMCwyXSxbMzAsMV0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDldLFsxOSw2XSxbMTksNF0sWzE5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFszMiwzXSxbMzIsNF0sWzMyLDJdLFszMiwxXSxbNDUsMV0sWzQ1LDVdLFs0NSwzXSxbNDYsNF0sWzQ2LDZdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw2XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0NiwxXSxbNDQsMl0sWzQ0LDNdLFs0NCwzXSxbNDQsMV0sWzQ0LDNdLFs2NywxXSxbNjgsM10sWzM5LDFdLFszOSwyXSxbMzksMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbODMsMV0sWzgzLDJdLFszNSw1XSxbMzUsNV0sWzM2LDVdLFszNywyXSxbMzcsNF0sWzM3LDNdLFszNyw1XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzM3LDJdLFszNyw0XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzMzLDVdLFszMyw1XSxbMzQsNV0sWzM0LDVdLFszNCw5XSxbMzQsOV0sWzM0LDddLFszNCw3XSxbOTMsMV0sWzkzLDNdLFs4NiwxXSxbODYsM10sWzk3LDFdLFs5NywyXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs4NCwxXSxbODQsMV0sWzg0LDFdLFs4NCwxXSxbNDksMV0sWzQ5LDJdLFs4NywxXSxbODcsMl0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbNDMsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImZsb3djaGFydCIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA3NzpjYXNlIDc5OmNhc2UgOTE6Y2FzZSAxNDc6Y2FzZSAxNDk6Y2FzZSAxNTA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxOTpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDIwOnIuc2V0RGlyZWN0aW9uKGFbcy0xXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3MtMV0ubm9kZXM7YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOnRoaXMuJD1bXTticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ4OnIuYWRkTGluayhhW3MtMl0uc3RtdCxhW3NdLGFbcy0xXSksdGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXS5jb25jYXQoYVtzLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0OTpyLmFkZExpbmsoYVtzLTNdLnN0bXQsYVtzLTFdLGFbcy0yXSksdGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV0uY29uY2F0KGFbcy0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXX07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPWFbcy00XS5jb25jYXQoYVtzXSk7YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9W2Fbcy0yXV0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdGFkaXVtIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYwOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDYxOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwicm91bmQiKTticmVhaztjYXNlIDYyOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sIm9kZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX3JpZ2h0Iik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWFbc10sci5hZGRWZXJ0ZXgoYVtzXSk7YnJlYWs7Y2FzZSA3MDphW3MtMV0udGV4dD1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3MTpjYXNlIDcyOmFbcy0yXS50ZXh0PWFbcy0xXSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3NDp2YXIgYz1yLmRlc3RydWN0TGluayhhW3NdLGFbcy0yXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RoLHRleHQ6YVtzLTFdfTticmVhaztjYXNlIDc1OmM9ci5kZXN0cnVjdExpbmsoYVtzXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RofTticmVhaztjYXNlIDc2OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3ODpjYXNlIDkyOmNhc2UgMTQ4OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDkzOmNhc2UgOTQ6dGhpcy4kPWFbcy00XSxyLmFkZENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk1OnRoaXMuJD1hW3MtNF0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA5NjpjYXNlIDEwNDp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA5NzpjYXNlIDEwNTp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgOTg6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDk5OnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTAwOmNhc2UgMTA2OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwMTpjYXNlIDEwNzp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTAyOmNhc2UgMTA4OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDM6Y2FzZSAxMDk6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExMTpjYXNlIDExMzp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDExODpjYXNlIDEyMDp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMTE5OmNhc2UgMTIxOmFbcy0yXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMl07YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWFbcy0xXSthW3NdO2JyZWFrO2Nhc2UgMTQ1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTQ2OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDE1MTp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTUyOnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTM6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU0OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE1NTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNTY6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOnYsODE6bSw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6RSwxMDQ6VCwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9LHs4OjYwLDEwOlsxLDYxXSwxNTpSfSx0KFsxMCwxNV0sWzIsNl0pLHQoYSxbMiwxN10pLHQoYSxbMiwxOF0pLHQoYSxbMiwxOV0pLHsyMDpbMSw2NF0sMjE6WzEsNjVdLDIyOkYsMjc6NjMsMzA6NjZ9LHQoUCxbMiwxMV0pLHQoUCxbMiwxMl0pLHQoUCxbMiwxM10pLHQoUCxbMiwxNF0pLHQoUCxbMiwxNV0pLHQoUCxbMiwxNl0pLHs5OjY4LDIwOmosMjE6WSwyMzp6LDQ0OjY5LDY3OjczLDcwOlsxLDc0XSw3MTpbMSw3NV19LHs5Ojc2LDIwOmosMjE6WSwyMzp6fSx7OTo3NywyMDpqLDIxOlksMjM6en0sezk6NzgsMjA6aiwyMTpZLDIzOnp9LHs5Ojc5LDIwOmosMjE6WSwyMzp6fSx7OTo4MCwyMDpqLDIxOlksMjM6en0sezk6ODIsMjA6aiwyMTpZLDIyOlsxLDgxXSwyMzp6fSx0KFAsWzIsNDRdKSx0KFUsWzIsNTFdLHszMDo4MywyMjpGfSksezIyOlsxLDg0XX0sezIyOlsxLDg1XX0sezIyOlsxLDg2XX0sezIyOlsxLDg3XX0sezI2OiQsNDc6cSw3NDpbMSw5MV0sODE6Vyw4Nzo5MCw4ODpbMSw4OF0sOTA6WzEsODldLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChQLFsyLDE1M10pLHQoUCxbMiwxNTRdKSx0KFAsWzIsMTU1XSksdChQLFsyLDE1Nl0pLHQoYXQsWzIsNTJdLHs0ODpbMSwxMTBdfSksdChvdCxbMiw2OV0sezEwODoxMjEsNDA6WzEsMTExXSw0NzpmLDUwOlsxLDExMl0sNTI6WzEsMTEzXSw1NDpbMSwxMTRdLDU2OlsxLDExNV0sNTg6WzEsMTE2XSw2MDpbMSwxMTddLDYyOlsxLDExOF0sNjM6WzEsMTE5XSw2NTpbMSwxMjBdLDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9KSx0KHN0LFsyLDE0NV0pLHQoc3QsWzIsMTcwXSksdChzdCxbMiwxNzFdKSx0KHN0LFsyLDE3Ml0pLHQoc3QsWzIsMTczXSksdChzdCxbMiwxNzRdKSx0KHN0LFsyLDE3NV0pLHQoc3QsWzIsMTc2XSksdChzdCxbMiwxNzddKSx0KHN0LFsyLDE3OF0pLHQoc3QsWzIsMTc5XSksdChzdCxbMiwxODBdKSx0KHN0LFsyLDE4MV0pLHQoc3QsWzIsMTgyXSksdChzdCxbMiwxODNdKSx0KHN0LFsyLDE4NF0pLHs5OjEyMiwyMDpqLDIxOlksMjM6en0sezExOjEyMywxNDpbMSwxMjRdfSx0KGN0LFsyLDhdKSx0KGEsWzIsMjBdKSx0KGEsWzIsMjZdKSx0KGEsWzIsMjddKSx7MjE6WzEsMTI1XX0sdCh1dCxbMiwzNF0sezMwOjEyNiwyMjpGfSksdChQLFsyLDM1XSksezQ1OjEyNyw0Njo0Miw0NzpmLDQ5OjQzLDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTA4OjQ0LDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSx0KGx0LFsyLDQ1XSksdChsdCxbMiw0Nl0pLHQobHQsWzIsNDddKSx0KGh0LFsyLDczXSx7Njg6MTI4LDY5OlsxLDEyOV0sNzI6WzEsMTMwXX0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxMzEsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQoWzQ3LDY5LDcyLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzVdKSx0KFAsWzIsMzZdKSx0KFAsWzIsMzddKSx0KFAsWzIsMzhdKSx0KFAsWzIsMzldKSx0KFAsWzIsNDBdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTU1LDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEJ0LG8sezE3OjE1Nn0pLHQoVSxbMiw1MF0sezQ3Ok50fSksezI2OiQsNDc6cSw4MTpXLDg3OjE1OCw5MjpbMSwxNTldLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezg1OlsxLDE2MF0sOTM6MTYxLDk1OlsxLDE2Ml19LHsyNjokLDQ3OnEsODE6Vyw4NTpbMSwxNjNdLDg3OjE2NCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6WiwxMDM6USwxMDQ6SywxMDc6OTQsMTA5OjkyLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyNjokLDQ3OnEsODE6Vyw4NzoxNjUsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KGN0LFsyLDk2XSx7MjI6WzEsMTY2XSw4OTpbMSwxNjddfSksdChjdCxbMiwxMDBdLHsyMjpbMSwxNjhdfSksdChjdCxbMiwxMDRdLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwxNjldLDI2OiQsNDc6cSw4MTpXLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx0KGN0LFsyLDEwNl0sezIyOlsxLDE3MV19KSx0KER0LFsyLDE0N10pLHQoRHQsWzIsMTQ5XSksdChEdCxbMiwxNTBdKSx0KER0LFsyLDE1MV0pLHQoRHQsWzIsMTUyXSksdChMdCxbMiwxNTddKSx0KEx0LFsyLDE1OF0pLHQoTHQsWzIsMTU5XSksdChMdCxbMiwxNjBdKSx0KEx0LFsyLDE2MV0pLHQoTHQsWzIsMTYyXSksdChMdCxbMiwxNjNdKSx0KEx0LFsyLDE2NF0pLHQoTHQsWzIsMTY1XSksdChMdCxbMiwxNjZdKSx0KEx0LFsyLDE2N10pLHQoTHQsWzIsMTY4XSksdChMdCxbMiwxNjldKSx7NDc6Ziw0OToxNzIsODE6bSw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6RSwxMDQ6VCwxMDg6NDQsMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzMsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzUsNDI6Z3QsNDc6cSw1MDpbMSwxNzRdLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Niw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Nyw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OCw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OSw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE4MCw0MjpndCw0NzpxLDYwOlsxLDE4MV0sNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgyLDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgzLDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTg0LDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KHN0LFsyLDE0Nl0pLHQoSXQsWzIsM10pLHs4OjE4NSwxNTpSfSx7MTU6WzIsN119LHQoYSxbMiwyOF0pLHQodXQsWzIsMzNdKSx0KFUsWzIsNDhdLHszMDoxODYsMjI6Rn0pLHQoaHQsWzIsNzBdLHsyMjpbMSwxODddfSksezIyOlsxLDE4OF19LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxODksNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDcxOlsxLDE5MF0sNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEx0LFsyLDc3XSksdChMdCxbMiw3OV0pLHQoTHQsWzIsMTM1XSksdChMdCxbMiwxMzZdKSx0KEx0LFsyLDEzN10pLHQoTHQsWzIsMTM4XSksdChMdCxbMiwxMzldKSx0KEx0LFsyLDE0MF0pLHQoTHQsWzIsMTQxXSksdChMdCxbMiwxNDJdKSx0KEx0LFsyLDE0M10pLHQoTHQsWzIsMTQ0XSksdChMdCxbMiw4MF0pLHQoTHQsWzIsODFdKSx0KEx0LFsyLDgyXSksdChMdCxbMiw4M10pLHQoTHQsWzIsODRdKSx0KEx0LFsyLDg1XSksdChMdCxbMiw4Nl0pLHQoTHQsWzIsODddKSx0KEx0LFsyLDg4XSksdChMdCxbMiw4OV0pLHQoTHQsWzIsOTBdKSx7OToxOTMsMjA6aiwyMTpZLDIyOmZ0LDIzOnosMjQ6ZHQsMjY6cHQsMzg6eXQsNDA6WzEsMTkyXSw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwxOTRdLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDp2LDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSx7MjI6RiwzMDoxOTV9LHsyMjpbMSwxOTZdLDI2OiQsNDc6cSw4MTpXLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6MTcwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpbMSwxOTddfSx7MjI6WzEsMTk4XX0sezIyOlsxLDE5OV0sOTY6WzEsMjAwXX0sdChSdCxbMiwxMThdKSx7MjI6WzEsMjAxXX0sezIyOlsxLDIwMl0sMjY6JCw0NzpxLDgxOlcsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOlsxLDIwM10sMjY6JCw0NzpxLDgxOlcsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezc0OlsxLDIwNF19LHQoY3QsWzIsOThdLHsyMjpbMSwyMDVdfSksezc0OlsxLDIwNl0sOTE6WzEsMjA3XX0sezc0OlsxLDIwOF19LHQoRHQsWzIsMTQ4XSksezc0OlsxLDIwOV0sOTE6WzEsMjEwXX0sdChhdCxbMiw1NF0sezEwODoxMjEsNDc6Ziw4MTptLDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpFLDEwNDpULDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQxOlsxLDIxMV0sNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTIsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDUxOlsxLDIxM10sNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1MzpbMSwyMTRdLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTU6WzEsMjE1XSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDU3OlsxLDIxNl0sNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1OTpbMSwyMTddLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNjE6WzEsMjE4XSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTksNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MTpbMSwyMjBdLDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2Mjp2dCw2NDpbMSwyMjFdLDY2OlsxLDIyMl0sNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2Mjp2dCw2NDpbMSwyMjRdLDY2OlsxLDIyM10sNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7OToyMjUsMjA6aiwyMTpZLDIzOnp9LHQoVSxbMiw0OV0sezQ3Ok50fSksdChodCxbMiw3Ml0pLHQoaHQsWzIsNzFdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2Mjp2dCw3MDptdCw3MjpbMSwyMjZdLDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChodCxbMiw3NF0pLHQoTHQsWzIsNzhdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MjI3LDQyOmd0LDQ3OnEsNjI6dnQsNzA6bXQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEJ0LG8sezE3OjIyOH0pLHQoUCxbMiw0M10pLHs0NjoyMjksNDc6Ziw0OTo0Myw4MTptLDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpFLDEwNDpULDEwODo0NCwxMTQ6TywxMTU6QiwxMTY6TiwxMTc6RCwxMTg6TCwxMTk6SX0sezIyOkZ0LDc2OlB0LDg2OjIzMCw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx7MjI6RnQsNzY6UHQsODY6MjQ0LDkyOmp0LDk1Oll0LDk3OjIzMSw5ODoyMzIsOTk6enQsMTAwOlV0LDEwMTokdCwxMDI6cXQsMTAzOld0LDEwNDpWdCwxMDU6SHR9LHsyMjpGdCw3NjpQdCw4NjoyNDUsOTI6anQsOTQ6WzEsMjQ2XSw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx7MjI6RnQsNzY6UHQsODY6MjQ3LDkyOmp0LDk0OlsxLDI0OF0sOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0sezk1OlsxLDI0OV19LHsyMjpGdCw3NjpQdCw4NjoyNTAsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0sezIyOkZ0LDc2OlB0LDg2OjI1MSw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjUyLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiw5N10pLHs3NDpbMSwyNTNdfSx0KGN0LFsyLDEwMV0sezIyOlsxLDI1NF19KSx0KGN0LFsyLDEwMl0pLHQoY3QsWzIsMTA1XSksdChjdCxbMiwxMDddLHsyMjpbMSwyNTVdfSksdChjdCxbMiwxMDhdKSx0KG90LFsyLDU1XSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTE6WzEsMjU2XSw2Mjp2dCw3MDptdCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOkV0LDgxOlR0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6QXQsMTAzOlEsMTA0OkssMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQob3QsWzIsNjFdKSx0KG90LFsyLDU3XSksdChvdCxbMiw1OF0pLHQob3QsWzIsNTldKSx0KG90LFsyLDYwXSksdChvdCxbMiw2Ml0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYxOlsxLDI1N10sNjI6dnQsNzA6bXQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpFdCw4MTpUdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpRLDEwNDpLLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KG90LFsyLDY0XSksdChvdCxbMiw2NV0pLHQob3QsWzIsNjddKSx0KG90LFsyLDY2XSksdChvdCxbMiw2OF0pLHQoSXQsWzIsNF0pLHQoWzIyLDQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzZdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDE6WzEsMjU4XSw0MjpndCw0NzpxLDYyOnZ0LDcwOm10LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6RXQsODE6VHQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6USwxMDQ6SywxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNTldLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDp2LDgxOm0sOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOkUsMTA0OlQsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpCLDExNjpOLDExNzpELDExODpMLDExOTpJfSx0KGF0LFsyLDUzXSksdChjdCxbMiwxMTBdLHs5NjpHdH0pLHQoWHQsWzIsMTIwXSx7OTg6MjYxLDIyOkZ0LDc2OlB0LDkyOmp0LDk1Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSksdChadCxbMiwxMjJdKSx0KFp0LFsyLDEyNF0pLHQoWnQsWzIsMTI1XSksdChadCxbMiwxMjZdKSx0KFp0LFsyLDEyN10pLHQoWnQsWzIsMTI4XSksdChadCxbMiwxMjldKSx0KFp0LFsyLDEzMF0pLHQoWnQsWzIsMTMxXSksdChadCxbMiwxMzJdKSx0KFp0LFsyLDEzM10pLHQoWnQsWzIsMTM0XSksdChjdCxbMiwxMTFdLHs5NjpHdH0pLHQoY3QsWzIsMTEyXSx7OTY6R3R9KSx7MjI6WzEsMjYyXX0sdChjdCxbMiwxMTNdLHs5NjpHdH0pLHsyMjpbMSwyNjNdfSx0KFJ0LFsyLDExOV0pLHQoY3QsWzIsOTNdLHs5NjpHdH0pLHQoY3QsWzIsOTRdLHs5NjpHdH0pLHQoY3QsWzIsOTVdLHsxMDc6OTQsMTA5OjE3MCwyNjokLDQ3OnEsODE6Vyw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6WiwxMDM6USwxMDQ6SywxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiw5OV0pLHs5MTpbMSwyNjRdfSx7OTE6WzEsMjY1XX0sezUxOlsxLDI2Nl19LHs2MTpbMSwyNjddfSx7OToyNjgsMjA6aiwyMTpZLDIzOnp9LHQoUCxbMiw0Ml0pLHsyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5NzoyNjksOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx0KFp0LFsyLDEyM10pLHsyNjokLDQ3OnEsODE6Vyw4NzoyNzAsOTU6Viw5NjpILDk5OkcsMTAwOlgsMTAxOlosMTAzOlEsMTA0OkssMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjcxLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiwxMDNdKSx0KGN0LFsyLDEwOV0pLHQob3QsWzIsNTZdKSx0KG90LFsyLDYzXSksdChCdCxvLHsxNzoyNzJ9KSx0KFh0LFsyLDEyMV0sezk4OjI2MSwyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0pLHQoY3QsWzIsMTE2XSx7MTA3Ojk0LDEwOToxNzAsMjI6WzEsMjczXSwyNjokLDQ3OnEsODE6Vyw5NTpWLDk2OkgsOTk6RywxMDA6WCwxMDE6WiwxMDM6USwxMDQ6SywxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiwxMTddLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwyNzRdLDI2OiQsNDc6cSw4MTpXLDk1OlYsOTY6SCw5OTpHLDEwMDpYLDEwMTpaLDEwMzpRLDEwNDpLLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDI3NV0sNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOnYsODE6bSw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6RSwxMDQ6VCwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1OkIsMTE2Ok4sMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpGdCw3NjpQdCw4NjoyNzYsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0OlZ0LDEwNTpIdH0sezIyOkZ0LDc2OlB0LDg2OjI3Nyw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6VnQsMTA1Okh0fSx0KFAsWzIsNDFdKSx0KGN0LFsyLDExNF0sezk2Okd0fSksdChjdCxbMiwxMTVdLHs5NjpHdH0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw5OlsyLDVdLDEwOlsyLDJdLDEyNDpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEt0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDEzO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSA0OnJldHVybiAxNDtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4iU1RSIjtjYXNlIDEwOnJldHVybiA3NjtjYXNlIDExOnJldHVybiA4NTtjYXNlIDEyOnJldHVybiA3NztjYXNlIDEzOnJldHVybiA5NDtjYXNlIDE0OnJldHVybiA3ODtjYXNlIDE1OnJldHVybiA3OTtjYXNlIDE2OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5MDtjYXNlIDE5OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDg4O2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIDg5O2Nhc2UgMjU6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI3OnJldHVybiA4MDtjYXNlIDI4OmNhc2UgMjk6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAzMDpyZXR1cm4gMzg7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNTpyZXR1cm4gOTE7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ3OnJldHVybiAxMTA7Y2FzZSA0ODpyZXR1cm4gMTExO2Nhc2UgNDk6cmV0dXJuIDExMjtjYXNlIDUwOnJldHVybiAxMTM7Y2FzZSA1MTpyZXR1cm4gOTU7Y2FzZSA1MjpyZXR1cm4gMTAzO2Nhc2UgNTM6cmV0dXJuIDQ4O2Nhc2UgNTQ6cmV0dXJuIDEwMDtjYXNlIDU1OnJldHVybiA0NztjYXNlIDU2OnJldHVybiAyMDtjYXNlIDU3OnJldHVybiA5NjtjYXNlIDU4OnJldHVybiAxMTg7Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6cmV0dXJuIDcxO2Nhc2UgNjI6Y2FzZSA2MzpjYXNlIDY0OnJldHVybiA3MDtjYXNlIDY1OnJldHVybiA1MjtjYXNlIDY2OnJldHVybiA1MztjYXNlIDY3OnJldHVybiA1NDtjYXNlIDY4OnJldHVybiA1NTtjYXNlIDY5OnJldHVybiA1NjtjYXNlIDcwOnJldHVybiA1NztjYXNlIDcxOnJldHVybiA1ODtjYXNlIDcyOnJldHVybiA1OTtjYXNlIDczOnJldHVybiAxMDE7Y2FzZSA3NDpyZXR1cm4gMTA0O2Nhc2UgNzU6cmV0dXJuIDExOTtjYXNlIDc2OnJldHVybiAxMTY7Y2FzZSA3NzpyZXR1cm4gMTA1O2Nhc2UgNzg6Y2FzZSA3OTpyZXR1cm4gMTE3O2Nhc2UgODA6cmV0dXJuIDEwNjtjYXNlIDgxOnJldHVybiA2MjtjYXNlIDgyOnJldHVybiA4MjtjYXNlIDgzOnJldHVybiJTRVAiO2Nhc2UgODQ6cmV0dXJuIDgxO2Nhc2UgODU6cmV0dXJuIDk5O2Nhc2UgODY6cmV0dXJuIDY0O2Nhc2UgODc6cmV0dXJuIDYzO2Nhc2UgODg6cmV0dXJuIDY2O2Nhc2UgODk6cmV0dXJuIDY1O2Nhc2UgOTA6cmV0dXJuIDExNDtjYXNlIDkxOnJldHVybiAxMTU7Y2FzZSA5MjpyZXR1cm4gNzI7Y2FzZSA5MzpyZXR1cm4gNTA7Y2FzZSA5NDpyZXR1cm4gNTE7Y2FzZSA5NTpyZXR1cm4gNDA7Y2FzZSA5NjpyZXR1cm4gNDE7Y2FzZSA5NzpyZXR1cm4gNjA7Y2FzZSA5ODpyZXR1cm4gNjE7Y2FzZSA5OTpyZXR1cm4gMTI1O2Nhc2UgMTAwOnJldHVybiAyMTtjYXNlIDEwMTpyZXR1cm4gMjI7Y2FzZSAxMDI6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXFspLywvXig/OlxdXCkpLywvXig/OlxbXFspLywvXig/OlxdXF0pLywvXig/OlxbXCgpLywvXig/OlwpXF0pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpbXF9dKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86PCkvLC9eKD86PikvLC9eKD86XF4pLywvXig/OlxcXHwpLywvXig/OnZcYikvLC9eKD86W0EtWmEtel0rKS8sL14oPzpcXFxdKS8sL14oPzpcW1wvKS8sL14oPzpcL1xdKS8sL14oPzpcW1xcKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XCgpLywvXig/OlwpKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86IikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsyMCwyMSwyMl0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE5LDI1LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gSnQoKXt0aGlzLnl5PXt9fXJldHVybiBRdC5sZXhlcj1LdCxKdC5wcm90b3R5cGU9UXQsUXQuUGFyc2VyPUp0LG5ldyBKdH0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDE3LDE4LDE5LDIxXSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDIxXSxjPVs0LDYsOSwxMSwxNywxOCwxOSwyMV0sdT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsc2VjdGlvbjoxOCx0YXNrTmFtZToxOSx0YXNrRGF0YToyMCxvcGVuX2RpcmVjdGl2ZToyMSx0eXBlX2RpcmVjdGl2ZToyMixhcmdfZGlyZWN0aXZlOjIzLGNsb3NlX2RpcmVjdGl2ZToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwxNzoidGl0bGUiLDE4OiJzZWN0aW9uIiwxOToidGFza05hbWUiLDIwOiJ0YXNrRGF0YSIsMjE6Im9wZW5fZGlyZWN0aXZlIiwyMjoidHlwZV9kaXJlY3RpdmUiLDIzOiJhcmdfZGlyZWN0aXZlIiwyNDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6ci5zZXRUaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTI6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMzpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAxNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTY6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImpvdXJuZXkiKX19LHRhYmxlOlt7MzoxLDQ6ZSw3OjMsMTI6NCwyMTpufSx7MTpbM119LHQocixbMiwzXSx7NTo2fSksezM6Nyw0OmUsNzozLDEyOjQsMjE6bn0sezEzOjgsMjI6WzEsOV19LHsyMjpbMiwxNV19LHs2OlsxLDEwXSw3OjE4LDg6MTEsOTpbMSwxMl0sMTA6MTMsMTE6WzEsMTRdLDEyOjQsMTc6aSwxODphLDE5Om8sMjE6bn0sezE6WzIsMl19LHsxNDoxOSwxNTpbMSwyMF0sMjQ6c30sdChbMTUsMjRdLFsyLDE2XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxOCwxMDoyMiwxMjo0LDE3OmksMTg6YSwxOTpvLDIxOm59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx7MjA6WzEsMjNdfSx0KHIsWzIsMTRdKSx7MTE6WzEsMjRdfSx7MTY6MjUsMjM6WzEsMjZdfSx7MTE6WzIsMThdfSx0KHIsWzIsNV0pLHQocixbMiwxM10pLHQoYyxbMiw5XSksezE0OjI3LDI0OnN9LHsyNDpbMiwxN119LHsxMTpbMSwyOF19LHQoYyxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxNV0sNzpbMiwyXSwyMTpbMiwxOF0sMjY6WzIsMTddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIxO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyMjtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI0O2Nhc2UgNDpyZXR1cm4gMjM7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDExO2Nhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNDtjYXNlIDExOnJldHVybiAxNztjYXNlIDEyOnJldHVybiAxODtjYXNlIDEzOnJldHVybiAxOTtjYXNlIDE0OnJldHVybiAyMDtjYXNlIDE1OnJldHVybiAxNTtjYXNlIDE2OnJldHVybiA2O2Nhc2UgMTc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxN10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGgoKXt0aGlzLnl5PXt9fXJldHVybiB1LmxleGVyPWwsaC5wcm90b3R5cGU9dSx1LlBhcnNlcj1oLG5ldyBofSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9bigxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKGkuZGVmYXVsdC5wYXJzZSh0KVtlXSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTMpLGk9big4MyksYT1uKDI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0KTppKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO2lmKCFyKXRyeXtyPW4oMCl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kMyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9bigxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1pLmRlZmF1bHQucGFyc2UodCksbz1hW2VdLHM9ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXBbZV0obytuKTtyZXR1cm4gbyE9PXMmJihhW2VdPXMpLGkuZGVmYXVsdC5zdHJpbmdpZnkoYSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMTEpLGk9bigyMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkodCxlKTtyZXR1cm4gcihuKT9uOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPW4oMjEzKSxhPW4oMjE0KSxvPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMD09PXQ/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOm8mJm8gaW4gT2JqZWN0KHQpP2kodCk6YSh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sZnVuY3Rpb24odCl7dC5leHBvcnRzPUpTT04ucGFyc2UoJ3sibmFtZSI6Im1lcm1haWQiLCJ2ZXJzaW9uIjoiOC4xMC4yIiwiZGVzY3JpcHRpb24iOiJNYXJrZG93bmlzaCBzeW50YXggZm9yIGdlbmVyYXRpbmcgZmxvd2NoYXJ0cywgc2VxdWVuY2UgZGlhZ3JhbXMsIGNsYXNzIGRpYWdyYW1zLCBnYW50dCBjaGFydHMgYW5kIGdpdCBncmFwaHMuIiwibWFpbiI6ImRpc3QvbWVybWFpZC5jb3JlLmpzIiwia2V5d29yZHMiOlsiZGlhZ3JhbSIsIm1hcmtkb3duIiwiZmxvd2NoYXJ0Iiwic2VxdWVuY2UgZGlhZ3JhbSIsImdhbnR0IiwiY2xhc3MgZGlhZ3JhbSIsImdpdCBncmFwaCJdLCJzY3JpcHRzIjp7ImJ1aWxkOmRldmVsb3BtZW50Ijoid2VicGFjayAtLXByb2dyZXNzIC0tY29sb3JzIiwiYnVpbGQ6cHJvZHVjdGlvbiI6Inlhcm4gYnVpbGQ6ZGV2ZWxvcG1lbnQgLXAgLS1jb25maWcgd2VicGFjay5jb25maWcucHJvZC5iYWJlbC5qcyIsImJ1aWxkIjoieWFybiBidWlsZDpkZXZlbG9wbWVudCAmJiB5YXJuIGJ1aWxkOnByb2R1Y3Rpb24iLCJwb3N0YnVpbGQiOiJkb2N1bWVudGF0aW9uIGJ1aWxkIHNyYy9tZXJtYWlkQVBJLmpzIHNyYy9jb25maWcuanMgc3JjL2RlZmF1bHRDb25maWcuanMgLS1zaGFsbG93IC1mIG1kIC0tbWFya2Rvd24tdG9jIGZhbHNlID4gZG9jcy9TZXR1cC5tZCIsImJ1aWxkOndhdGNoIjoieWFybiBidWlsZCAtLXdhdGNoIiwibWluaWZ5IjoibWluaWZ5IC4vZGlzdC9tZXJtYWlkLmpzID4gLi9kaXN0L21lcm1haWQubWluLmpzIiwicmVsZWFzZSI6Inlhcm4gYnVpbGQiLCJsaW50IjoiZXNsaW50IHNyYyIsImUyZTpkZXByIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImN5cHJlc3MiOiJwZXJjeSBleGVjIC0tIGN5cHJlc3MgcnVuIiwiZTJlIjoic3RhcnQtc2VydmVyLWFuZC10ZXN0IGRldiBodHRwOi8vbG9jYWxob3N0OjkwMDAvIGN5cHJlc3MiLCJlMmUtdXBkIjoieWFybiBsaW50ICYmIGplc3QgZTJlIC11IC0tY29uZmlnIGUyZS9qZXN0LmNvbmZpZy5qcyIsImRldiI6IndlYnBhY2stZGV2LXNlcnZlciAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5lMmUuanMiLCJ0ZXN0IjoieWFybiBsaW50ICYmIGplc3Qgc3JjLy4qIiwidGVzdDp3YXRjaCI6Implc3QgLS13YXRjaCBzcmMiLCJwcmVwdWJsaXNoT25seSI6Inlhcm4gYnVpbGQgJiYgeWFybiB0ZXN0IiwicHJlcGFyZSI6Inlhcm4gYnVpbGQifSwicmVwb3NpdG9yeSI6eyJ0eXBlIjoiZ2l0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2tuc3YvbWVybWFpZCJ9LCJhdXRob3IiOiJLbnV0IFN2ZWlkcXZpc3QiLCJsaWNlbnNlIjoiTUlUIiwic3RhbmRhcmQiOnsiaWdub3JlIjpbIioqL3BhcnNlci8qLmpzIiwiZGlzdC8qKi8qLmpzIiwiY3lwcmVzcy8qKi8qLmpzIl0sImdsb2JhbHMiOlsicGFnZSJdfSwiZGVwZW5kZW5jaWVzIjp7IkBicmFpbnRyZWUvc2FuaXRpemUtdXJsIjoiXjMuMS4wIiwiZDMiOiJeNS43LjAiLCJkYWdyZSI6Il4wLjguNCIsImRhZ3JlLWQzIjoiXjAuNi40IiwiZW50aXR5LWRlY29kZSI6Il4yLjAuMiIsImdyYXBobGliIjoiXjIuMS43IiwiaGUiOiJeMS4yLjAiLCJraHJvbWEiOiJeMS4xLjAiLCJtaW5pZnkiOiJeNC4xLjEiLCJtb21lbnQtbWluaSI6Il4yLjIyLjEiLCJzdHlsaXMiOiJeMy41LjIifSwiZGV2RGVwZW5kZW5jaWVzIjp7IkBiYWJlbC9jb3JlIjoiXjcuMi4yIiwiQGJhYmVsL3ByZXNldC1lbnYiOiJeNy44LjQiLCJAYmFiZWwvcmVnaXN0ZXIiOiJeNy4wLjAiLCJAcGVyY3kvY3lwcmVzcyI6IioiLCJiYWJlbC1jb3JlIjoiNy4wLjAtYnJpZGdlLjAiLCJiYWJlbC1lc2xpbnQiOiJeMTAuMS4wIiwiYmFiZWwtamVzdCI6Il4yNC45LjAiLCJiYWJlbC1sb2FkZXIiOiJeOC4wLjQiLCJjb3ZlcmFsbHMiOiJeMy4wLjIiLCJjc3MtbG9hZGVyIjoiXjIuMC4xIiwiY3NzLXRvLXN0cmluZy1sb2FkZXIiOiJeMC4xLjMiLCJjeXByZXNzIjoiNC4wLjEiLCJkb2N1bWVudGF0aW9uIjoiXjEyLjAuMSIsImVzbGludCI6Il42LjMuMCIsImVzbGludC1jb25maWctcHJldHRpZXIiOiJeNi4zLjAiLCJlc2xpbnQtcGx1Z2luLXByZXR0aWVyIjoiXjMuMS4wIiwiaHVza3kiOiJeMS4yLjEiLCJpZGVudGl0eS1vYmotcHJveHkiOiJeMy4wLjAiLCJqZXN0IjoiXjI0LjkuMCIsImppc29uIjoiXjAuNC4xOCIsIm1vbWVudCI6Il4yLjIzLjAiLCJub2RlLXNhc3MiOiJeNS4wLjAiLCJwcmV0dGllciI6Il4xLjE4LjIiLCJwdXBwZXRlZXIiOiJeMS4xNy4wIiwic2Fzcy1sb2FkZXIiOiJeNy4xLjAiLCJzdGFydC1zZXJ2ZXItYW5kLXRlc3QiOiJeMS4xMC42IiwidGVyc2VyLXdlYnBhY2stcGx1Z2luIjoiXjIuMi4yIiwid2VicGFjayI6Il40LjQxLjIiLCJ3ZWJwYWNrLWJ1bmRsZS1hbmFseXplciI6Il4zLjcuMCIsIndlYnBhY2stY2xpIjoiXjMuMS4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuNC4xIiwid2VicGFjay1ub2RlLWV4dGVybmFscyI6Il4xLjcuMiIsInlhcm4tdXBncmFkZS1hbGwiOiJeMC41LjAifSwiZmlsZXMiOlsiZGlzdCJdLCJ5YXJuLXVwZ3JhZGUtYWxsIjp7Imlnbm9yZSI6WyJiYWJlbC1jb3JlIl19LCJzaWRlRWZmZWN0cyI6WyIqKi8qLmNzcyIsIioqLyouc2NzcyJdLCJodXNreSI6eyJob29rcyI6eyJwcmUtcHVzaCI6Inlhcm4gdGVzdCJ9fX0nKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQhPXQmJmUhPWV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIWkodCkpcmV0dXJuITE7dmFyIGU9cih0KTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1lfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IFByb3h5XSI9PWV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxOSkuU3ltYm9sO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3ZhciByPW4oMTkpLGk9bigyMzMpLGE9ZSYmIWUubm9kZVR5cGUmJmUsbz1hJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJiF0Lm5vZGVUeXBlJiZ0LHM9byYmby5leHBvcnRzPT09YT9yLkJ1ZmZlcjp2b2lkIDAsYz0ocz9zLmlzQnVmZmVyOnZvaWQgMCl8fGk7dC5leHBvcnRzPWN9KS5jYWxsKHRoaXMsbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMyksaT1uKDIzNyksYT1uKDI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/cih0LCEwKTppKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQyKSxpPW4oNzgpLGE9bigyNDMpLG89bigxMjIpLHM9bigyNDQpLGM9bigzNCksdT1uKDExMSksbD11KHIpLGg9dShpKSxmPXUoYSksZD11KG8pLHA9dShzKSx5PWM7KHImJiJbb2JqZWN0IERhdGFWaWV3XSIhPXkobmV3IHIobmV3IEFycmF5QnVmZmVyKDEpKSl8fGkmJiJbb2JqZWN0IE1hcF0iIT15KG5ldyBpKXx8YSYmIltvYmplY3QgUHJvbWlzZV0iIT15KGEucmVzb2x2ZSgpKXx8byYmIltvYmplY3QgU2V0XSIhPXkobmV3IG8pfHxzJiYiW29iamVjdCBXZWFrTWFwXSIhPXkobmV3IHMpKSYmKHk9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxuPSJbb2JqZWN0IE9iamVjdF0iPT1lP3QuY29uc3RydWN0b3I6dm9pZCAwLHI9bj91KG4pOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgbDpyZXR1cm4iW29iamVjdCBEYXRhVmlld10iO2Nhc2UgaDpyZXR1cm4iW29iamVjdCBNYXBdIjtjYXNlIGY6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UgZDpyZXR1cm4iW29iamVjdCBTZXRdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiBlfSksdC5leHBvcnRzPXl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGkodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPXtkZWZhdWx0czpuKDE1NSksZWFjaDpuKDg4KSxpc0Z1bmN0aW9uOm4oMzgpLGlzUGxhaW5PYmplY3Q6bigxNTkpLHBpY2s6bigxNjIpLGhhczpuKDk0KSxyYW5nZTpuKDE2MyksdW5pcXVlSWQ6bigxNjQpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bMSwxN10saT1bMiwxMF0sYT1bMSwyMV0sbz1bMSwyMl0scz1bMSwyM10sYz1bMSwyNF0sdT1bMSwyNV0sbD1bMSwyNl0saD1bMSwxOV0sZj1bMSwyN10sZD1bMSwyOF0scD1bMSwzMV0seT1bNjYsNjddLGc9WzUsOCwxNCwzNSwzNiwzNywzOCwzOSw0MCw0OCw1NSw1Nyw2Niw2N10sdj1bNSw2LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLG09WzEsNTFdLGI9WzEsNTJdLHg9WzEsNTNdLF89WzEsNTRdLGs9WzEsNTVdLHc9WzEsNTZdLEU9WzEsNTddLFQ9WzU3LDU4XSxDPVsxLDY5XSxTPVsxLDY1XSxBPVsxLDY2XSxNPVsxLDY3XSxPPVsxLDY4XSxCPVsxLDcwXSxOPVsxLDc0XSxEPVsxLDc1XSxMPVsxLDcyXSxJPVsxLDczXSxSPVs1LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLEY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxvcGVuRGlyZWN0aXZlOjksdHlwZURpcmVjdGl2ZToxMCxjbG9zZURpcmVjdGl2ZToxMSwiOiI6MTIsYXJnRGlyZWN0aXZlOjEzLG9wZW5fZGlyZWN0aXZlOjE0LHR5cGVfZGlyZWN0aXZlOjE1LGFyZ19kaXJlY3RpdmU6MTYsY2xvc2VfZGlyZWN0aXZlOjE3LHJlcXVpcmVtZW50RGVmOjE4LGVsZW1lbnREZWY6MTkscmVsYXRpb25zaGlwRGVmOjIwLHJlcXVpcmVtZW50VHlwZToyMSxyZXF1aXJlbWVudE5hbWU6MjIsU1RSVUNUX1NUQVJUOjIzLHJlcXVpcmVtZW50Qm9keToyNCxJRDoyNSxDT0xPTlNFUDoyNixpZDoyNyxURVhUOjI4LHRleHQ6MjksUklTSzozMCxyaXNrTGV2ZWw6MzEsVkVSSUZZTVRIRDozMix2ZXJpZnlUeXBlOjMzLFNUUlVDVF9TVE9QOjM0LFJFUVVJUkVNRU5UOjM1LEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzYsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjM3LFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM4LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM5LERFU0lHTl9DT05TVFJBSU5UOjQwLExPV19SSVNLOjQxLE1FRF9SSVNLOjQyLEhJR0hfUklTSzo0MyxWRVJJRllfQU5BTFlTSVM6NDQsVkVSSUZZX0RFTU9OU1RSQVRJT046NDUsVkVSSUZZX0lOU1BFQ1RJT046NDYsVkVSSUZZX1RFU1Q6NDcsRUxFTUVOVDo0OCxlbGVtZW50TmFtZTo0OSxlbGVtZW50Qm9keTo1MCxUWVBFOjUxLHR5cGU6NTIsRE9DUkVGOjUzLHJlZjo1NCxFTkRfQVJST1dfTDo1NSxyZWxhdGlvbnNoaXA6NTYsTElORTo1NyxFTkRfQVJST1dfUjo1OCxDT05UQUlOUzo1OSxDT1BJRVM6NjAsREVSSVZFUzo2MSxTQVRJU0ZJRVM6NjIsVkVSSUZJRVM6NjMsUkVGSU5FUzo2NCxUUkFDRVM6NjUsdW5xU3RyaW5nOjY2LHFTdHJpbmc6NjcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDEyOiI6IiwxNDoib3Blbl9kaXJlY3RpdmUiLDE1OiJ0eXBlX2RpcmVjdGl2ZSIsMTY6ImFyZ19kaXJlY3RpdmUiLDE3OiJjbG9zZV9kaXJlY3RpdmUiLDIzOiJTVFJVQ1RfU1RBUlQiLDI1OiJJRCIsMjY6IkNPTE9OU0VQIiwyODoiVEVYVCIsMzA6IlJJU0siLDMyOiJWRVJJRllNVEhEIiwzNDoiU1RSVUNUX1NUT1AiLDM1OiJSRVFVSVJFTUVOVCIsMzY6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDM3OiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM4OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzk6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiw0MDoiREVTSUdOX0NPTlNUUkFJTlQiLDQxOiJMT1dfUklTSyIsNDI6Ik1FRF9SSVNLIiw0MzoiSElHSF9SSVNLIiw0NDoiVkVSSUZZX0FOQUxZU0lTIiw0NToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQ2OiJWRVJJRllfSU5TUEVDVElPTiIsNDc6IlZFUklGWV9URVNUIiw0ODoiRUxFTUVOVCIsNTE6IlRZUEUiLDUzOiJET0NSRUYiLDU1OiJFTkRfQVJST1dfTCIsNTc6IkxJTkUiLDU4OiJFTkRfQVJST1dfUiIsNTk6IkNPTlRBSU5TIiw2MDoiQ09QSUVTIiw2MToiREVSSVZFUyIsNjI6IlNBVElTRklFUyIsNjM6IlZFUklGSUVTIiw2NDoiUkVGSU5FUyIsNjU6IlRSQUNFUyIsNjY6InVucVN0cmluZyIsNjc6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsM10sWzQsNV0sWzksMV0sWzEwLDFdLFsxMywxXSxbMTEsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE4LDVdLFsyNCw1XSxbMjQsNV0sWzI0LDVdLFsyNCw1XSxbMjQsMl0sWzI0LDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMTksNV0sWzUwLDVdLFs1MCw1XSxbNTAsMl0sWzUwLDFdLFsyMCw1XSxbMjAsNV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFsyMiwxXSxbMjIsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzI5LDFdLFs0OSwxXSxbNDksMV0sWzUyLDFdLFs1MiwxXSxbNTQsMV0sWzU0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA5OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInBpZSIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTY6ci5hZGRSZXF1aXJlbWVudChhW3MtM10sYVtzLTRdKTticmVhaztjYXNlIDE3OnIuc2V0TmV3UmVxSWQoYVtzLTJdKTticmVhaztjYXNlIDE4OnIuc2V0TmV3UmVxVGV4dChhW3MtMl0pO2JyZWFrO2Nhc2UgMTk6ci5zZXROZXdSZXFSaXNrKGFbcy0yXSk7YnJlYWs7Y2FzZSAyMDpyLnNldE5ld1JlcVZlcmlmeU1ldGhvZChhW3MtMl0pO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlJFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPXIuUmlza0xldmVsLkxPV19SSVNLO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPXIuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPXIuUmlza0xldmVsLkhJR0hfUklTSzticmVhaztjYXNlIDMyOnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0FOQUxZU0lTO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDM0OnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9URVNUO2JyZWFrO2Nhc2UgMzY6ci5hZGRFbGVtZW50KGFbcy0zXSk7YnJlYWs7Y2FzZSAzNzpyLnNldE5ld0VsZW1lbnRUeXBlKGFbcy0yXSk7YnJlYWs7Y2FzZSAzODpyLnNldE5ld0VsZW1lbnREb2NSZWYoYVtzLTJdKTticmVhaztjYXNlIDQxOnIuYWRkUmVsYXRpb25zaGlwKGFbcy0yXSxhW3NdLGFbcy00XSk7YnJlYWs7Y2FzZSA0MjpyLmFkZFJlbGF0aW9uc2hpcChhW3MtMl0sYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5DT05UQUlOUzticmVhaztjYXNlIDQ0OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5ERVJJVkVTO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5SRUZJTkVTO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5UUkFDRVN9fSx0YWJsZTpbezM6MSw0OjIsNjplLDk6NCwxNDpufSx7MTpbM119LHszOjcsNDoyLDU6WzEsNl0sNjplLDk6NCwxNDpufSx7NTpbMSw4XX0sezEwOjksMTU6WzEsMTBdfSx7MTU6WzIsNl19LHszOjExLDQ6Miw2OmUsOTo0LDE0Om59LHsxOlsyLDJdfSx7NDoxNiw1OnIsNzoxMiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHsxMToyOSwxMjpbMSwzMF0sMTc6cH0sdChbMTIsMTddLFsyLDddKSx7MTpbMiwxXX0sezg6WzEsMzJdfSx7NDoxNiw1OnIsNzozMyw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM0LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzUsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM3LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezIyOjM4LDY2OlsxLDM5XSw2NzpbMSw0MF19LHs0OTo0MSw2NjpbMSw0Ml0sNjc6WzEsNDNdfSx7NTU6WzEsNDRdLDU3OlsxLDQ1XX0sdCh5LFsyLDIzXSksdCh5LFsyLDI0XSksdCh5LFsyLDI1XSksdCh5LFsyLDI2XSksdCh5LFsyLDI3XSksdCh5LFsyLDI4XSksdChnLFsyLDUyXSksdChnLFsyLDUzXSksdCh2LFsyLDRdKSx7MTM6NDYsMTY6WzEsNDddfSx0KHYsWzIsOV0pLHsxOlsyLDNdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezg6WzIsMTNdfSx7ODpbMiwxNF19LHs4OlsyLDE1XX0sezIzOlsxLDQ4XX0sezIzOlsyLDUwXX0sezIzOlsyLDUxXX0sezIzOlsxLDQ5XX0sezIzOlsyLDU2XX0sezIzOlsyLDU3XX0sezU2OjUwLDU5Om0sNjA6Yiw2MTp4LDYyOl8sNjM6ayw2NDp3LDY1OkV9LHs1Njo1OCw1OTptLDYwOmIsNjE6eCw2MjpfLDYzOmssNjQ6dyw2NTpFfSx7MTE6NTksMTc6cH0sezE3OlsyLDhdfSx7NTpbMSw2MF19LHs1OlsxLDYxXX0sezU3OlsxLDYyXX0sdChULFsyLDQzXSksdChULFsyLDQ0XSksdChULFsyLDQ1XSksdChULFsyLDQ2XSksdChULFsyLDQ3XSksdChULFsyLDQ4XSksdChULFsyLDQ5XSksezU4OlsxLDYzXX0sdCh2LFsyLDVdKSx7NTpDLDI0OjY0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Qn0sezU6TiwzNDpELDUwOjcxLDUxOkwsNTM6SX0sezI3Ojc2LDY2OmYsNjc6ZH0sezI3Ojc3LDY2OmYsNjc6ZH0sdChSLFsyLDE2XSksezI2OlsxLDc4XX0sezI2OlsxLDc5XX0sezI2OlsxLDgwXX0sezI2OlsxLDgxXX0sezU6QywyNDo4MiwyNTpTLDI4OkEsMzA6TSwzMjpPLDM0OkJ9LHQoUixbMiwyMl0pLHQoUixbMiwzNl0pLHsyNjpbMSw4M119LHsyNjpbMSw4NF19LHs1Ok4sMzQ6RCw1MDo4NSw1MTpMLDUzOkl9LHQoUixbMiw0MF0pLHQoUixbMiw0MV0pLHQoUixbMiw0Ml0pLHsyNzo4Niw2NjpmLDY3OmR9LHsyOTo4Nyw2NjpbMSw4OF0sNjc6WzEsODldfSx7MzE6OTAsNDE6WzEsOTFdLDQyOlsxLDkyXSw0MzpbMSw5M119LHszMzo5NCw0NDpbMSw5NV0sNDU6WzEsOTZdLDQ2OlsxLDk3XSw0NzpbMSw5OF19LHQoUixbMiwyMV0pLHs1Mjo5OSw2NjpbMSwxMDBdLDY3OlsxLDEwMV19LHs1NDoxMDIsNjY6WzEsMTAzXSw2NzpbMSwxMDRdfSx0KFIsWzIsMzldKSx7NTpbMSwxMDVdfSx7NTpbMSwxMDZdfSx7NTpbMiw1NF19LHs1OlsyLDU1XX0sezU6WzEsMTA3XX0sezU6WzIsMjldfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezU6WzEsMTA4XX0sezU6WzIsMzJdfSx7NTpbMiwzM119LHs1OlsyLDM0XX0sezU6WzIsMzVdfSx7NTpbMSwxMDldfSx7NTpbMiw1OF19LHs1OlsyLDU5XX0sezU6WzEsMTEwXX0sezU6WzIsNjBdfSx7NTpbMiw2MV19LHs1OkMsMjQ6MTExLDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Qn0sezU6QywyNDoxMTIsMjU6UywyODpBLDMwOk0sMzI6TywzNDpCfSx7NTpDLDI0OjExMywyNTpTLDI4OkEsMzA6TSwzMjpPLDM0OkJ9LHs1OkMsMjQ6MTE0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Qn0sezU6TiwzNDpELDUwOjExNSw1MTpMLDUzOkl9LHs1Ok4sMzQ6RCw1MDoxMTYsNTE6TCw1MzpJfSx0KFIsWzIsMTddKSx0KFIsWzIsMThdKSx0KFIsWzIsMTldKSx0KFIsWzIsMjBdKSx0KFIsWzIsMzddKSx0KFIsWzIsMzhdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsNl0sNzpbMiwyXSwxMTpbMiwxXSwzMjpbMiwzXSwzMzpbMiwxMV0sMzQ6WzIsMTJdLDM1OlsyLDEzXSwzNjpbMiwxNF0sMzc6WzIsMTVdLDM5OlsyLDUwXSw0MDpbMiw1MV0sNDI6WzIsNTZdLDQzOlsyLDU3XSw0NzpbMiw4XSw4ODpbMiw1NF0sODk6WzIsNTVdLDkxOlsyLDI5XSw5MjpbMiwzMF0sOTM6WzIsMzFdLDk1OlsyLDMyXSw5NjpbMiwzM10sOTc6WzIsMzRdLDk4OlsyLDM1XSwxMDA6WzIsNThdLDEwMTpbMiw1OV0sMTAzOlsyLDYwXSwxMDQ6WzIsNjFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sUD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDE0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTI7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgNDpyZXR1cm4gMTY7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gODtjYXNlIDEwOnJldHVybiA2O2Nhc2UgMTE6cmV0dXJuIDIzO2Nhc2UgMTI6cmV0dXJuIDM0O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6cmV0dXJuIDI1O2Nhc2UgMTU6cmV0dXJuIDI4O2Nhc2UgMTY6cmV0dXJuIDMwO2Nhc2UgMTc6cmV0dXJuIDMyO2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDM2O2Nhc2UgMjA6cmV0dXJuIDM3O2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6cmV0dXJuIDQwO2Nhc2UgMjQ6cmV0dXJuIDQxO2Nhc2UgMjU6cmV0dXJuIDQyO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQ0O2Nhc2UgMjg6cmV0dXJuIDQ1O2Nhc2UgMjk6cmV0dXJuIDQ2O2Nhc2UgMzA6cmV0dXJuIDQ3O2Nhc2UgMzE6cmV0dXJuIDQ4O2Nhc2UgMzI6cmV0dXJuIDU5O2Nhc2UgMzM6cmV0dXJuIDYwO2Nhc2UgMzQ6cmV0dXJuIDYxO2Nhc2UgMzU6cmV0dXJuIDYyO2Nhc2UgMzY6cmV0dXJuIDYzO2Nhc2UgMzc6cmV0dXJuIDY0O2Nhc2UgMzg6cmV0dXJuIDY1O2Nhc2UgMzk6cmV0dXJuIDUxO2Nhc2UgNDA6cmV0dXJuIDUzO2Nhc2UgNDE6cmV0dXJuIDU1O2Nhc2UgNDI6cmV0dXJuIDU4O2Nhc2UgNDM6cmV0dXJuIDU3O2Nhc2UgNDQ6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4icVN0cmluZyI7Y2FzZSA0NzpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLDY2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHRva2VuOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzQ1LDQ2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGooKXt0aGlzLnl5PXt9fXJldHVybiBGLmxleGVyPVAsai5wcm90b3R5cGU9RixGLlBhcnNlcj1qLG5ldyBqfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMSksbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW5ldyhuKDE3NikuZGVmYXVsdCkoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50Iik7ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oNjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz0hbjtufHwobj17fSk7Zm9yKHZhciBzPS0xLGM9ZS5sZW5ndGg7KytzPGM7KXt2YXIgdT1lW3NdLGw9YT9hKG5bdV0sdFt1XSx1LG4sdCk6dm9pZCAwO3ZvaWQgMD09PWwmJihsPXRbdV0pLG8/aShuLHUsbCk6cihuLHUsbCl9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzIpLGk9bigyMSksYT1PYmplY3QucHJvdG90eXBlLG89YS5oYXNPd25Qcm9wZXJ0eSxzPWEucHJvcGVydHlJc0VudW1lcmFibGUsYz1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/cjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmby5jYWxsKHQsImNhbGxlZSIpJiYhcy5jYWxsKHQsImNhbGxlZSIpfTt0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM0KSxpPW4oNjIpLGE9big4Miksbz1hJiZhLmlzVHlwZWRBcnJheSxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8cih0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiMTAwMDAwIiksaT1uLmFwcGVuZCgieGh0bWw6ZGl2Iik7aS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgYT1lLmxhYmVsO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSJmdW5jdGlvbiI6aS5pbnNlcnQoYSk7YnJlYWs7Y2FzZSJvYmplY3QiOmkuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBhfSkpO2JyZWFrO2RlZmF1bHQ6aS5odG1sKGEpfXIuYXBwbHlTdHlsZShpLGUubGFiZWxTdHlsZSksaS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLGkuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIik7dmFyIG89aS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uYXR0cigid2lkdGgiLG8ud2lkdGgpLmF0dHIoImhlaWdodCIsby5oZWlnaHQpLG59fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oNDYpLGE9bigxNiksbz1uKDUzKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4scyl7aWYodm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09cyYmKHM9MSksIm51bWJlciIhPXR5cGVvZiB0KXJldHVybiBvLmRlZmF1bHQodCx7YTplfSk7dmFyIGM9aS5kZWZhdWx0LnNldCh7cjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5yKHQpLGc6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuZyhlKSxiOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmIobiksYTpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKHMpfSk7cmV0dXJuIGEuZGVmYXVsdC5zdHJpbmdpZnkoYyl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oMTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZhciBuPWkuZGVmYXVsdC5wYXJzZSh0KTtmb3IodmFyIGEgaW4gZSluW2FdPXIuZGVmYXVsdC5jaGFubmVsLmNsYW1wW2FdKGVbYV0pO3JldHVybiBpLmRlZmF1bHQuc3RyaW5naWZ5KG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTUpLGk9bigyMDYpLGE9bigyMDcpLG89bigyMDgpLHM9bigyMDkpLGM9bigyMTApO2Z1bmN0aW9uIHUodCl7dmFyIGU9dGhpcy5fX2RhdGFfXz1uZXcgcih0KTt0aGlzLnNpemU9ZS5zaXplfXUucHJvdG90eXBlLmNsZWFyPWksdS5wcm90b3R5cGUuZGVsZXRlPWEsdS5wcm90b3R5cGUuZ2V0PW8sdS5wcm90b3R5cGUuaGFzPXMsdS5wcm90b3R5cGUuc2V0PWMsdC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIwMSksaT1uKDIwMiksYT1uKDIwMyksbz1uKDIwNCkscz1uKDIwNSk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQubGVuZ3RoO24tLTspaWYocih0W25dWzBdLGUpKXJldHVybiBuO3JldHVybi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKE9iamVjdCwiY3JlYXRlIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIyNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5fX2RhdGFfXztyZXR1cm4gcihlKT9uWyJzdHJpbmciPT10eXBlb2YgZT8ic3RyaW5nIjoiaGFzaCJdOm4ubWFwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjApLGk9bigzNyksYT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89dFtlXTthLmNhbGwodCxlKSYmaShvLG4pJiYodm9pZCAwIT09bnx8ZSBpbiB0KXx8cih0LGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Il9fcHJvdG9fXyI9PWUmJnI/cih0LGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm4sd3JpdGFibGU6ITB9KTp0W2VdPW59fSxmdW5jdGlvbih0LGUpe3ZhciBuPS9eKD86MHxbMS05XVxkKikkLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgdDtyZXR1cm4hIShlPW51bGw9PWU/OTAwNzE5OTI1NDc0MDk5MTplKSYmKCJudW1iZXIiPT1yfHwic3ltYm9sIiE9ciYmbi50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9fX0sZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10JiZ0LmNvbnN0cnVjdG9yO3JldHVybiB0PT09KCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLnByb3RvdHlwZXx8bil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTQpKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4OSksaT1uKDI1NSkocik7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDUpLGk9big5MyksYT1uKDI2OSksbz1uKDEzNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCk/dDppKHQsZSk/W3RdOmEobyh0KSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPUFycmF5KHIpOysrbjxyOylpW25dPWUodFtuXSxuLHQpO3JldHVybiBpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzUpLGk9bigxNDQpLGE9bigxNDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBhKGkodCxlLHIpLHQrIiIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzcpLGk9bigyNSksYT1uKDYxKSxvPW4oMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7aWYoIW8obikpcmV0dXJuITE7dmFyIHM9dHlwZW9mIGU7cmV0dXJuISEoIm51bWJlciI9PXM/aShuKSYmYShlLG4ubGVuZ3RoKToic3RyaW5nIj09cyYmZSBpbiBuKSYmcihuW2VdLHQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO3QuZXhwb3J0cz17bG9uZ2VzdFBhdGg6ZnVuY3Rpb24odCl7dmFyIGU9e307ci5mb3JFYWNoKHQuc291cmNlcygpLChmdW5jdGlvbiBuKGkpe3ZhciBhPXQubm9kZShpKTtpZihyLmhhcyhlLGkpKXJldHVybiBhLnJhbms7ZVtpXT0hMDt2YXIgbz1yLm1pbihyLm1hcCh0Lm91dEVkZ2VzKGkpLChmdW5jdGlvbihlKXtyZXR1cm4gbihlLncpLXQuZWRnZShlKS5taW5sZW59KSkpO3JldHVybiBvIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZudWxsIT1vfHwobz0wKSxhLnJhbms9b30pKX0sc2xhY2s6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub2RlKGUudykucmFuay10Lm5vZGUoZS52KS5yYW5rLXQuZWRnZShlKS5taW5sZW59fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj0vXiglMjB8XHMpKihqYXZhc2NyaXB0fGRhdGEpL2ltLGk9L1teXHgyMC1ceDdFXS9naW0sYT0vXihbXjpdKyk6L2dtLG89WyIuIiwiLyJdO3QuZXhwb3J0cz17c2FuaXRpemVVcmw6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuImFib3V0OmJsYW5rIjt2YXIgZSxuLHM9dC5yZXBsYWNlKGksIiIpLnRyaW0oKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8uaW5kZXhPZih0WzBdKT4tMX0ocyk/czoobj1zLm1hdGNoKGEpKT8oZT1uWzBdLHIudGVzdChlKT8iYWJvdXQ6YmxhbmsiOnMpOiJhYm91dDpibGFuayJ9fX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMiwzXSxuPVsxLDddLHI9WzcsMTIsMTUsMTcsMTksMjAsMjFdLGk9WzcsMTEsMTIsMTUsMTcsMTksMjAsMjFdLGE9WzIsMjBdLG89WzEsMzJdLHM9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEdHOjQsIjoiOjUsZG9jdW1lbnQ6NixFT0Y6NyxESVI6OCxvcHRpb25zOjksYm9keToxMCxPUFQ6MTEsTkw6MTIsbGluZToxMyxzdGF0ZW1lbnQ6MTQsQ09NTUlUOjE1LGNvbW1pdF9hcmc6MTYsQlJBTkNIOjE3LElEOjE4LENIRUNLT1VUOjE5LE1FUkdFOjIwLFJFU0VUOjIxLHJlc2V0X2FyZzoyMixTVFI6MjMsSEVBRDoyNCxyZXNldF9wYXJlbnRzOjI1LENBUkVUOjI2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJHRyIsNToiOiIsNzoiRU9GIiw4OiJESVIiLDExOiJPUFQiLDEyOiJOTCIsMTU6IkNPTU1JVCIsMTc6IkJSQU5DSCIsMTg6IklEIiwxOToiQ0hFQ0tPVVQiLDIwOiJNRVJHRSIsMjE6IlJFU0VUIiwyMzoiU1RSIiwyNDoiSEVBRCIsMjY6IkNBUkVUIn0scHJvZHVjdGlvbnNfOlswLFszLDRdLFszLDVdLFs2LDBdLFs2LDJdLFs5LDJdLFs5LDFdLFsxMCwwXSxbMTAsMl0sWzEzLDJdLFsxMywxXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNiwwXSxbMTYsMV0sWzIyLDJdLFsyMiwyXSxbMjUsMF0sWzI1LDJdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpyZXR1cm4gYVtzLTFdO2Nhc2UgMjpyZXR1cm4gci5zZXREaXJlY3Rpb24oYVtzLTNdKSxhW3MtMV07Y2FzZSA0OnIuc2V0T3B0aW9ucyhhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNTphW3MtMV0rPWFbc10sdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgODphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTE6ci5jb21taXQoYVtzXSk7YnJlYWs7Y2FzZSAxMjpyLmJyYW5jaChhW3NdKTticmVhaztjYXNlIDEzOnIuY2hlY2tvdXQoYVtzXSk7YnJlYWs7Y2FzZSAxNDpyLm1lcmdlKGFbc10pO2JyZWFrO2Nhc2UgMTU6ci5yZXNldChhW3NdKTticmVhaztjYXNlIDE2OnRoaXMuJD0iIjticmVhaztjYXNlIDE3OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTg6dGhpcy4kPWFbcy0xXSsiOiIrYVtzXTticmVhaztjYXNlIDE5OnRoaXMuJD1hW3MtMV0rIjoiK3IuY291bnQsci5jb3VudD0wO2JyZWFrO2Nhc2UgMjA6ci5jb3VudD0wO2JyZWFrO2Nhc2UgMjE6ci5jb3VudCs9MX19LHRhYmxlOlt7MzoxLDQ6WzEsMl19LHsxOlszXX0sezU6WzEsM10sODpbMSw0XX0sezY6NSw3OmUsOTo2LDEyOm59LHs1OlsxLDhdfSx7NzpbMSw5XX0sdChyLFsyLDddLHsxMDoxMCwxMTpbMSwxMV19KSx0KGksWzIsNl0pLHs2OjEyLDc6ZSw5OjYsMTI6bn0sezE6WzIsMV19LHs3OlsyLDRdLDEyOlsxLDE1XSwxMzoxMywxNDoxNCwxNTpbMSwxNl0sMTc6WzEsMTddLDE5OlsxLDE4XSwyMDpbMSwxOV0sMjE6WzEsMjBdfSx0KGksWzIsNV0pLHs3OlsxLDIxXX0sdChyLFsyLDhdKSx7MTI6WzEsMjJdfSx0KHIsWzIsMTBdKSx7MTI6WzIsMTZdLDE2OjIzLDIzOlsxLDI0XX0sezE4OlsxLDI1XX0sezE4OlsxLDI2XX0sezE4OlsxLDI3XX0sezE4OlsxLDMwXSwyMjoyOCwyNDpbMSwyOV19LHsxOlsyLDJdfSx0KHIsWzIsOV0pLHsxMjpbMiwxMV19LHsxMjpbMiwxN119LHsxMjpbMiwxMl19LHsxMjpbMiwxM119LHsxMjpbMiwxNF19LHsxMjpbMiwxNV19LHsxMjphLDI1OjMxLDI2Om99LHsxMjphLDI1OjMzLDI2Om99LHsxMjpbMiwxOF19LHsxMjphLDI1OjM0LDI2Om99LHsxMjpbMiwxOV19LHsxMjpbMiwyMV19XSxkZWZhdWx0QWN0aW9uczp7OTpbMiwxXSwyMTpbMiwyXSwyMzpbMiwxMV0sMjQ6WzIsMTddLDI1OlsyLDEyXSwyNjpbMiwxM10sMjc6WzIsMTRdLDI4OlsyLDE1XSwzMTpbMiwxOF0sMzM6WzIsMTldLDM0OlsyLDIxXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGM9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gMTI7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6YnJlYWs7Y2FzZSA0OnJldHVybiA0O2Nhc2UgNTpyZXR1cm4gMTU7Y2FzZSA2OnJldHVybiAxNztjYXNlIDc6cmV0dXJuIDIwO2Nhc2UgODpyZXR1cm4gMjE7Y2FzZSA5OnJldHVybiAxOTtjYXNlIDEwOmNhc2UgMTE6cmV0dXJuIDg7Y2FzZSAxMjpyZXR1cm4gNTtjYXNlIDEzOnJldHVybiAyNjtjYXNlIDE0OnRoaXMuYmVnaW4oIm9wdGlvbnMiKTticmVhaztjYXNlIDE1OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE2OnJldHVybiAxMTtjYXNlIDE3OnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMTg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTk6cmV0dXJuIDIzO2Nhc2UgMjA6cmV0dXJuIDE4O2Nhc2UgMjE6cmV0dXJuIDd9fSxydWxlczpbL14oPzooXHI/XG4pKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86Z2l0R3JhcGhcYikvaSwvXig/OmNvbW1pdFxiKS9pLC9eKD86YnJhbmNoXGIpL2ksL14oPzptZXJnZVxiKS9pLC9eKD86cmVzZXRcYikvaSwvXig/OmNoZWNrb3V0XGIpL2ksL14oPzpMUlxiKS9pLC9eKD86QlRcYikvaSwvXig/OjopL2ksL14oPzpcXikvaSwvXig/Om9wdGlvbnNccj9cbikvaSwvXig/OmVuZFxyP1xuKS9pLC9eKD86W15cbl0rXHI/XG4pL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OlthLXpBLVpdWy1fXC5hLXpBLVowLTldKlstX2EtekEtWjAtOV0pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntvcHRpb25zOntydWxlczpbMTUsMTZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTgsMTldLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTcsMjAsMjFdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiB1KCl7dGhpcy55eT17fX1yZXR1cm4gcy5sZXhlcj1jLHUucHJvdG90eXBlPXMscy5QYXJzZXI9dSxuZXcgdX0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVs2LDksMTBdLG49e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGluZm86NCxkb2N1bWVudDo1LEVPRjo2LGxpbmU6NyxzdGF0ZW1lbnQ6OCxOTDo5LHNob3dJbmZvOjEwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJpbmZvIiw2OiJFT0YiLDk6Ik5MIiwxMDoic2hvd0luZm8ifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzUsMF0sWzUsMl0sWzcsMV0sWzcsMV0sWzgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7YS5sZW5ndGg7c3dpdGNoKGkpe2Nhc2UgMTpyZXR1cm4gcjtjYXNlIDQ6YnJlYWs7Y2FzZSA2OnIuc2V0SW5mbyghMCl9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHQoZSxbMiwyXSx7NTozfSksezY6WzEsNF0sNzo1LDg6Niw5OlsxLDddLDEwOlsxLDhdfSx7MTpbMiwxXX0sdChlLFsyLDNdKSx0KGUsWzIsNF0pLHQoZSxbMiw1XSksdChlLFsyLDZdKV0sZGVmYXVsdEFjdGlvbnM6ezQ6WzIsMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciB2PXAueXlsbG9jO2EucHVzaCh2KTt2YXIgbT1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxFLFQsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoVCBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW1RdJiZUPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW1RdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzp2LGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sdj1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sbSYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KEU9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBFO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxyPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIDQ7Y2FzZSAxOnJldHVybiA5O2Nhc2UgMjpyZXR1cm4ic3BhY2UiO2Nhc2UgMzpyZXR1cm4gMTA7Y2FzZSA0OnJldHVybiA2O2Nhc2UgNTpyZXR1cm4iVFhUIn19LHJ1bGVzOlsvXig/OmluZm9cYikvaSwvXig/Oltcc1xuXHJdKykvaSwvXig/Oltcc10rKS9pLC9eKD86c2hvd0luZm9cYikvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDVdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBpKCl7dGhpcy55eT17fX1yZXR1cm4gbi5sZXhlcj1yLGkucHJvdG90eXBlPW4sbi5QYXJzZXI9aSxuZXcgaX0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTEpLG4oNikodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDRdLG49WzEsNV0scj1bMSw2XSxpPVsxLDddLGE9WzEsOV0sbz1bMSwxMSwxMywyMCwyMSwyMiwyM10scz1bMiw1XSxjPVsxLDYsMTEsMTMsMjAsMjEsMjIsMjNdLHU9WzIwLDIxLDIyXSxsPVsyLDhdLGg9WzEsMThdLGY9WzEsMTldLGQ9WzEsMjRdLHA9WzYsMjAsMjEsMjIsMjNdLHk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGVvbDo0LGRpcmVjdGl2ZTo1LFBJRTo2LGRvY3VtZW50Ojcsc2hvd0RhdGE6OCxsaW5lOjksc3RhdGVtZW50OjEwLHR4dDoxMSx2YWx1ZToxMix0aXRsZToxMyx0aXRsZV92YWx1ZToxNCxvcGVuRGlyZWN0aXZlOjE1LHR5cGVEaXJlY3RpdmU6MTYsY2xvc2VEaXJlY3RpdmU6MTcsIjoiOjE4LGFyZ0RpcmVjdGl2ZToxOSxORVdMSU5FOjIwLCI7IjoyMSxFT0Y6MjIsb3Blbl9kaXJlY3RpdmU6MjMsdHlwZV9kaXJlY3RpdmU6MjQsYXJnX2RpcmVjdGl2ZToyNSxjbG9zZV9kaXJlY3RpdmU6MjYsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDY6IlBJRSIsODoic2hvd0RhdGEiLDExOiJ0eHQiLDEyOiJ2YWx1ZSIsMTM6InRpdGxlIiwxNDoidGl0bGVfdmFsdWUiLDE4OiI6IiwyMDoiTkVXTElORSIsMjE6IjsiLDIyOiJFT0YiLDIzOiJvcGVuX2RpcmVjdGl2ZSIsMjQ6InR5cGVfZGlyZWN0aXZlIiwyNToiYXJnX2RpcmVjdGl2ZSIsMjY6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywzXSxbNywwXSxbNywyXSxbOSwyXSxbMTAsMF0sWzEwLDJdLFsxMCwyXSxbMTAsMV0sWzUsM10sWzUsNV0sWzQsMV0sWzQsMV0sWzQsMV0sWzE1LDFdLFsxNiwxXSxbMTksMV0sWzE3LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNDpyLnNldFNob3dEYXRhKCEwKTticmVhaztjYXNlIDc6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6ci5hZGRTZWN0aW9uKGFbcy0xXSxyLmNsZWFudXBWYWx1ZShhW3NdKSk7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9YVtzXS50cmltKCksci5zZXRUaXRsZSh0aGlzLiQpO2JyZWFrO2Nhc2UgMTc6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDE5OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAyMDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJwaWUiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sezE6WzNdfSx7MzoxMCw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHszOjExLDQ6Miw1OjMsNjplLDE1OjgsMjA6biwyMTpyLDIyOmksMjM6YX0sdChvLHMsezc6MTIsODpbMSwxM119KSx0KGMsWzIsMTRdKSx0KGMsWzIsMTVdKSx0KGMsWzIsMTZdKSx7MTY6MTQsMjQ6WzEsMTVdfSx7MjQ6WzIsMTddfSx7MTpbMiwxXX0sezE6WzIsMl19LHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDNdLDExOmgsMTM6ZiwyMzphfSksdChvLHMsezc6MjF9KSx7MTc6MjIsMTg6WzEsMjNdLDI2OmR9LHQoWzE4LDI2XSxbMiwxOF0pLHQobyxbMiw2XSksezQ6MjUsMjA6biwyMTpyLDIyOml9LHsxMjpbMSwyNl19LHsxNDpbMSwyN119LHQodSxbMiwxMV0pLHQodSxsLHsxNTo4LDk6MTYsMTA6MTcsNToyMCwxOlsyLDRdLDExOmgsMTM6ZiwyMzphfSksdChwLFsyLDEyXSksezE5OjI4LDI1OlsxLDI5XX0sdChwLFsyLDIwXSksdChvLFsyLDddKSx0KHUsWzIsOV0pLHQodSxbMiwxMF0pLHsxNzozMCwyNjpkfSx7MjY6WzIsMTldfSx0KHAsWzIsMTNdKV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMTddLDEwOlsyLDFdLDExOlsyLDJdLDI5OlsyLDE5XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIHY9cC55eWxsb2M7YS5wdXNoKHYpO3ZhciBtPXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LEUsVCxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihUIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bVF0mJlQ+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bVF0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOnYsZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyx2PXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSxtJiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oRT10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIEU7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGc9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwyMztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMjQ7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE4O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ6cmV0dXJuIDI1O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAyMDtjYXNlIDg6Y2FzZSA5OmJyZWFrO2Nhc2UgMTA6cmV0dXJuIHRoaXMuYmVnaW4oInRpdGxlIiksMTM7Y2FzZSAxMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJ0aXRsZV92YWx1ZSI7Y2FzZSAxMjp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDEzOnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE0OnJldHVybiJ0eHQiO2Nhc2UgMTU6cmV0dXJuIDY7Y2FzZSAxNjpyZXR1cm4gODtjYXNlIDE3OnJldHVybiJ2YWx1ZSI7Y2FzZSAxODpyZXR1cm4gMjJ9fSxydWxlczpbL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5ccl0rKS9pLC9eKD86JSVbXlxuXSopL2ksL14oPzpbXHNdKykvaSwvXig/OnRpdGxlXGIpL2ksL14oPzooPyFcbnx8KSpbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpbIl0pL2ksL14oPzpbXiJdKikvaSwvXig/OnBpZVxiKS9pLC9eKD86c2hvd0RhdGFcYikvaSwvXig/OjpbXHNdKltcZF0rKD86XC5bXGRdKyk/KS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7Y2xvc2VfZGlyZWN0aXZlOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LGFyZ19kaXJlY3RpdmU6e3J1bGVzOlszLDRdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOlsxXSxpbmNsdXNpdmU6ITF9LHRpdGxlOntydWxlczpbMTFdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDEyLDE1LDE2LDE3LDE4XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdigpe3RoaXMueXk9e319cmV0dXJuIHkubGV4ZXI9Zyx2LnByb3RvdHlwZT15LHkuUGFyc2VyPXYsbmV3IHZ9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDExKSxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDVdLHI9WzYsOSwxMSwyMywzN10saT1bMSwxN10sYT1bMSwyMF0sbz1bMSwyNV0scz1bMSwyNl0sYz1bMSwyN10sdT1bMSwyOF0sbD1bMSwzN10saD1bMjMsMzQsMzVdLGY9WzQsNiw5LDExLDIzLDM3XSxkPVszMCwzMSwzMiwzM10scD1bMjIsMjddLHk9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLEVSX0RJQUdSQU06NCxkb2N1bWVudDo1LEVPRjo2LGRpcmVjdGl2ZTo3LGxpbmU6OCxTUEFDRTo5LHN0YXRlbWVudDoxMCxORVdMSU5FOjExLG9wZW5EaXJlY3RpdmU6MTIsdHlwZURpcmVjdGl2ZToxMyxjbG9zZURpcmVjdGl2ZToxNCwiOiI6MTUsYXJnRGlyZWN0aXZlOjE2LGVudGl0eU5hbWU6MTcscmVsU3BlYzoxOCxyb2xlOjE5LEJMT0NLX1NUQVJUOjIwLGF0dHJpYnV0ZXM6MjEsQkxPQ0tfU1RPUDoyMixBTFBIQU5VTToyMyxhdHRyaWJ1dGU6MjQsYXR0cmlidXRlVHlwZToyNSxhdHRyaWJ1dGVOYW1lOjI2LEFUVFJJQlVURV9XT1JEOjI3LGNhcmRpbmFsaXR5OjI4LHJlbFR5cGU6MjksWkVST19PUl9PTkU6MzAsWkVST19PUl9NT1JFOjMxLE9ORV9PUl9NT1JFOjMyLE9OTFlfT05FOjMzLE5PTl9JREVOVElGWUlORzozNCxJREVOVElGWUlORzozNSxXT1JEOjM2LG9wZW5fZGlyZWN0aXZlOjM3LHR5cGVfZGlyZWN0aXZlOjM4LGFyZ19kaXJlY3RpdmU6MzksY2xvc2VfZGlyZWN0aXZlOjQwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw0OiJFUl9ESUFHUkFNIiw2OiJFT0YiLDk6IlNQQUNFIiwxMToiTkVXTElORSIsMTU6IjoiLDIwOiJCTE9DS19TVEFSVCIsMjI6IkJMT0NLX1NUT1AiLDIzOiJBTFBIQU5VTSIsMjc6IkFUVFJJQlVURV9XT1JEIiwzMDoiWkVST19PUl9PTkUiLDMxOiJaRVJPX09SX01PUkUiLDMyOiJPTkVfT1JfTU9SRSIsMzM6Ik9OTFlfT05FIiwzNDoiTk9OX0lERU5USUZZSU5HIiwzNToiSURFTlRJRllJTkciLDM2OiJXT1JEIiwzNzoib3Blbl9kaXJlY3RpdmUiLDM4OiJ0eXBlX2RpcmVjdGl2ZSIsMzk6ImFyZ19kaXJlY3RpdmUiLDQwOiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzUsMF0sWzUsMl0sWzgsMl0sWzgsMV0sWzgsMV0sWzgsMV0sWzcsNF0sWzcsNl0sWzEwLDFdLFsxMCw1XSxbMTAsNF0sWzEwLDNdLFsxMCwxXSxbMTcsMV0sWzIxLDFdLFsyMSwyXSxbMjQsMl0sWzI1LDFdLFsyNiwxXSxbMTgsM10sWzI4LDFdLFsyOCwxXSxbMjgsMV0sWzI4LDFdLFsyOSwxXSxbMjksMV0sWzE5LDFdLFsxOSwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOmJyZWFrO2Nhc2UgMzp0aGlzLiQ9W107YnJlYWs7Y2FzZSA0OmFbcy0xXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA1OmNhc2UgNjp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1bXTticmVhaztjYXNlIDEyOnIuYWRkRW50aXR5KGFbcy00XSksci5hZGRFbnRpdHkoYVtzLTJdKSxyLmFkZFJlbGF0aW9uc2hpcChhW3MtNF0sYVtzXSxhW3MtMl0sYVtzLTNdKTticmVhaztjYXNlIDEzOnIuYWRkRW50aXR5KGFbcy0zXSksci5hZGRBdHRyaWJ1dGVzKGFbcy0zXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMTQ6ci5hZGRFbnRpdHkoYVtzLTJdKTticmVhaztjYXNlIDE1OnIuYWRkRW50aXR5KGFbc10pO2JyZWFrO2Nhc2UgMTY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMTg6YVtzXS5wdXNoKGFbcy0xXSksdGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9e2F0dHJpYnV0ZVR5cGU6YVtzLTFdLGF0dHJpYnV0ZU5hbWU6YVtzXX07YnJlYWs7Y2FzZSAyMDpjYXNlIDIxOnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtjYXJkQTphW3NdLHJlbFR5cGU6YVtzLTFdLGNhcmRCOmFbcy0yXX07YnJlYWs7Y2FzZSAyMzp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTticmVhaztjYXNlIDI0OnRoaXMuJD1yLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTticmVhaztjYXNlIDI1OnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXIuQ2FyZGluYWxpdHkuT05MWV9PTkU7YnJlYWs7Y2FzZSAyNzp0aGlzLiQ9ci5JZGVudGlmaWNhdGlvbi5OT05fSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9ci5JZGVudGlmaWNhdGlvbi5JREVOVElGWUlORzticmVhaztjYXNlIDI5OnRoaXMuJD1hW3NdLnJlcGxhY2UoLyIvZywiIik7YnJlYWs7Y2FzZSAzMDp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDMxOnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzMjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzMzphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzQ6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZXIiKX19LHRhYmxlOlt7MzoxLDQ6ZSw3OjMsMTI6NCwzNzpufSx7MTpbM119LHQocixbMiwzXSx7NTo2fSksezM6Nyw0OmUsNzozLDEyOjQsMzc6bn0sezEzOjgsMzg6WzEsOV19LHszODpbMiwzMV19LHs2OlsxLDEwXSw3OjE1LDg6MTEsOTpbMSwxMl0sMTA6MTMsMTE6WzEsMTRdLDEyOjQsMTc6MTYsMjM6aSwzNzpufSx7MTpbMiwyXX0sezE0OjE4LDE1OlsxLDE5XSw0MDphfSx0KFsxNSw0MF0sWzIsMzJdKSx0KHIsWzIsOF0sezE6WzIsMV19KSx0KHIsWzIsNF0pLHs3OjE1LDEwOjIxLDEyOjQsMTc6MTYsMjM6aSwzNzpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDExXSksdChyLFsyLDE1XSx7MTg6MjIsMjg6MjQsMjA6WzEsMjNdLDMwOm8sMzE6cywzMjpjLDMzOnV9KSx0KFs2LDksMTEsMTUsMjAsMjMsMzAsMzEsMzIsMzMsMzddLFsyLDE2XSksezExOlsxLDI5XX0sezE2OjMwLDM5OlsxLDMxXX0sezExOlsyLDM0XX0sdChyLFsyLDVdKSx7MTc6MzIsMjM6aX0sezIxOjMzLDIyOlsxLDM0XSwyNDozNSwyNTozNiwyNzpsfSx7Mjk6MzgsMzQ6WzEsMzldLDM1OlsxLDQwXX0sdChoLFsyLDIzXSksdChoLFsyLDI0XSksdChoLFsyLDI1XSksdChoLFsyLDI2XSksdChmLFsyLDldKSx7MTQ6NDEsNDA6YX0sezQwOlsyLDMzXX0sezE1OlsxLDQyXX0sezIyOlsxLDQzXX0sdChyLFsyLDE0XSksezIxOjQ0LDIyOlsyLDE3XSwyNDozNSwyNTozNiwyNzpsfSx7MjY6NDUsMjc6WzEsNDZdfSx7Mjc6WzIsMjBdfSx7Mjg6NDcsMzA6bywzMTpzLDMyOmMsMzM6dX0sdChkLFsyLDI3XSksdChkLFsyLDI4XSksezExOlsxLDQ4XX0sezE5OjQ5LDIzOlsxLDUxXSwzNjpbMSw1MF19LHQocixbMiwxM10pLHsyMjpbMiwxOF19LHQocCxbMiwxOV0pLHQocCxbMiwyMV0pLHsyMzpbMiwyMl19LHQoZixbMiwxMF0pLHQocixbMiwxMl0pLHQocixbMiwyOV0pLHQocixbMiwzMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwzMV0sNzpbMiwyXSwyMDpbMiwzNF0sMzE6WzIsMzNdLDM3OlsyLDIwXSw0NDpbMiwxOF0sNDc6WzIsMjJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgdj1wLnl5bGxvYzthLnB1c2godik7dmFyIG09cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsRSxULEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKFQgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tUXSYmVD5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tUXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6dixleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLHY9cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LG0mJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShFPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gRTtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sZz17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDM3O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzODtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDQwO2Nhc2UgNDpyZXR1cm4gMzk7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDExO2Nhc2UgODpicmVhaztjYXNlIDk6cmV0dXJuIDk7Y2FzZSAxMDpyZXR1cm4gMzY7Y2FzZSAxMTpyZXR1cm4gNDtjYXNlIDEyOnJldHVybiB0aGlzLmJlZ2luKCJibG9jayIpLDIwO2Nhc2UgMTM6YnJlYWs7Y2FzZSAxNDpyZXR1cm4gMjc7Y2FzZSAxNTpicmVhaztjYXNlIDE2OnJldHVybiB0aGlzLnBvcFN0YXRlKCksMjI7Y2FzZSAxNzpyZXR1cm4gZS55eXRleHRbMF07Y2FzZSAxODpyZXR1cm4gMzA7Y2FzZSAxOTpyZXR1cm4gMzE7Y2FzZSAyMDpyZXR1cm4gMzI7Y2FzZSAyMTpyZXR1cm4gMzM7Y2FzZSAyMjpyZXR1cm4gMzA7Y2FzZSAyMzpyZXR1cm4gMzE7Y2FzZSAyNDpyZXR1cm4gMzI7Y2FzZSAyNTpyZXR1cm4gMzQ7Y2FzZSAyNjpyZXR1cm4gMzU7Y2FzZSAyNzpjYXNlIDI4OnJldHVybiAzNDtjYXNlIDI5OnJldHVybiAyMztjYXNlIDMwOnJldHVybiBlLnl5dGV4dFswXTtjYXNlIDMxOnJldHVybiA2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/Oltcc10rKS9pLC9eKD86IlteIl0qIikvaSwvXig/OmVyRGlhZ3JhbVxiKS9pLC9eKD86XHspL2ksL14oPzpccyspL2ksL14oPzpbQS1aYS16XVtBLVphLXowLTlcLV9dKikvaSwvXig/Oltcbl0rKS9pLC9eKD86XH0pL2ksL14oPzouKS9pLC9eKD86XHxvXGIpL2ksL14oPzpcfW9cYikvaSwvXig/Olx9XHwpL2ksL14oPzpcfFx8KS9pLC9eKD86b1x8KS9pLC9eKD86b1x7KS9pLC9eKD86XHxceykvaSwvXig/OlwuXC4pL2ksL14oPzotLSkvaSwvXig/OlwuLSkvaSwvXig/Oi1cLikvaSwvXig/OltBLVphLXpdW0EtWmEtejAtOVwtX10qKS9pLC9eKD86LikvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LGJsb2NrOntydWxlczpbMTMsMTQsMTUsMTYsMTddLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDcsOCw5LDEwLDExLDEyLDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdigpe3RoaXMueXk9e319cmV0dXJuIHkubGV4ZXI9Zyx2LnByb3RvdHlwZT15LHkuUGFyc2VyPXYsbmV3IHZ9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDExKSxuKDYpKHQpKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZnVuY3Rpb24odCl7dFt0LkFMTD0wXT0iQUxMIix0W3QuUkdCPTFdPSJSR0IiLHRbdC5IU0w9Ml09IkhTTCJ9KHJ8fChyPXt9KSksZS5UWVBFPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxMik7dC5leHBvcnRzPWk7ZnVuY3Rpb24gaSh0KXt0aGlzLl9pc0RpcmVjdGVkPSFyLmhhcyh0LCJkaXJlY3RlZCIpfHx0LmRpcmVjdGVkLHRoaXMuX2lzTXVsdGlncmFwaD0hIXIuaGFzKHQsIm11bHRpZ3JhcGgiKSYmdC5tdWx0aWdyYXBoLHRoaXMuX2lzQ29tcG91bmQ9ISFyLmhhcyh0LCJjb21wb3VuZCIpJiZ0LmNvbXBvdW5kLHRoaXMuX2xhYmVsPXZvaWQgMCx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49ci5jb25zdGFudCh2b2lkIDApLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj1yLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlblsiXDAiXT17fSksdGhpcy5faW49e30sdGhpcy5fcHJlZHM9e30sdGhpcy5fb3V0PXt9LHRoaXMuX3N1Y3M9e30sdGhpcy5fZWRnZU9ianM9e30sdGhpcy5fZWRnZUxhYmVscz17fX1mdW5jdGlvbiBhKHQsZSl7dFtlXT90W2VdKys6dFtlXT0xfWZ1bmN0aW9uIG8odCxlKXstLXRbZV18fGRlbGV0ZSB0W2VdfWZ1bmN0aW9uIHModCxlLG4saSl7dmFyIGE9IiIrZSxvPSIiK247aWYoIXQmJmE+byl7dmFyIHM9YTthPW8sbz1zfXJldHVybiBhKyIBIitvKyIBIisoci5pc1VuZGVmaW5lZChpKT8iXDAiOmkpfWZ1bmN0aW9uIGModCxlLG4scil7dmFyIGk9IiIrZSxhPSIiK247aWYoIXQmJmk+YSl7dmFyIG89aTtpPWEsYT1vfXZhciBzPXt2OmksdzphfTtyZXR1cm4gciYmKHMubmFtZT1yKSxzfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gcyh0LGUudixlLncsZS5uYW1lKX1pLnByb3RvdHlwZS5fbm9kZUNvdW50PTAsaS5wcm90b3R5cGUuX2VkZ2VDb3VudD0wLGkucHJvdG90eXBlLmlzRGlyZWN0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNEaXJlY3RlZH0saS5wcm90b3R5cGUuaXNNdWx0aWdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlncmFwaH0saS5wcm90b3R5cGUuaXNDb21wb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfSxpLnByb3RvdHlwZS5zZXRHcmFwaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGFiZWw9dCx0aGlzfSxpLnByb3RvdHlwZS5ncmFwaD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sYWJlbH0saS5wcm90b3R5cGUuc2V0RGVmYXVsdE5vZGVMYWJlbD1mdW5jdGlvbih0KXtyZXR1cm4gci5pc0Z1bmN0aW9uKHQpfHwodD1yLmNvbnN0YW50KHQpKSx0aGlzLl9kZWZhdWx0Tm9kZUxhYmVsRm49dCx0aGlzfSxpLnByb3RvdHlwZS5ub2RlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZUNvdW50fSxpLnByb3RvdHlwZS5ub2Rlcz1mdW5jdGlvbigpe3JldHVybiByLmtleXModGhpcy5fbm9kZXMpfSxpLnByb3RvdHlwZS5zb3VyY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gci5maWx0ZXIodGhpcy5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gci5pc0VtcHR5KHQuX2luW2VdKX0pKX0saS5wcm90b3R5cGUuc2lua3M9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiByLmZpbHRlcih0aGlzLm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiByLmlzRW1wdHkodC5fb3V0W2VdKX0pKX0saS5wcm90b3R5cGUuc2V0Tm9kZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hcmd1bWVudHMsaT10aGlzO3JldHVybiByLmVhY2godCwoZnVuY3Rpb24odCl7bi5sZW5ndGg+MT9pLnNldE5vZGUodCxlKTppLnNldE5vZGUodCl9KSksdGhpc30saS5wcm90b3R5cGUuc2V0Tm9kZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmhhcyh0aGlzLl9ub2Rlcyx0KT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbdF09ZSksdGhpcyk6KHRoaXMuX25vZGVzW3RdPWFyZ3VtZW50cy5sZW5ndGg+MT9lOnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbih0KSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W3RdPSJcMCIsdGhpcy5fY2hpbGRyZW5bdF09e30sdGhpcy5fY2hpbGRyZW5bIlwwIl1bdF09ITApLHRoaXMuX2luW3RdPXt9LHRoaXMuX3ByZWRzW3RdPXt9LHRoaXMuX291dFt0XT17fSx0aGlzLl9zdWNzW3RdPXt9LCsrdGhpcy5fbm9kZUNvdW50LHRoaXMpfSxpLnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9ub2Rlc1t0XX0saS5wcm90b3R5cGUuaGFzTm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gci5oYXModGhpcy5fbm9kZXMsdCl9LGkucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZihyLmhhcyh0aGlzLl9ub2Rlcyx0KSl7dmFyIG49ZnVuY3Rpb24odCl7ZS5yZW1vdmVFZGdlKGUuX2VkZ2VPYmpzW3RdKX07ZGVsZXRlIHRoaXMuX25vZGVzW3RdLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdCh0KSxkZWxldGUgdGhpcy5fcGFyZW50W3RdLHIuZWFjaCh0aGlzLmNoaWxkcmVuKHQpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0KX0pKSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bdF0pLHIuZWFjaChyLmtleXModGhpcy5faW5bdF0pLG4pLGRlbGV0ZSB0aGlzLl9pblt0XSxkZWxldGUgdGhpcy5fcHJlZHNbdF0sci5lYWNoKHIua2V5cyh0aGlzLl9vdXRbdF0pLG4pLGRlbGV0ZSB0aGlzLl9vdXRbdF0sZGVsZXRlIHRoaXMuX3N1Y3NbdF0sLS10aGlzLl9ub2RlQ291bnR9cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnNldFBhcmVudD1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLl9pc0NvbXBvdW5kKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBwYXJlbnQgaW4gYSBub24tY29tcG91bmQgZ3JhcGgiKTtpZihyLmlzVW5kZWZpbmVkKGUpKWU9IlwwIjtlbHNle2Zvcih2YXIgbj1lKz0iIjshci5pc1VuZGVmaW5lZChuKTtuPXRoaXMucGFyZW50KG4pKWlmKG49PT10KXRocm93IG5ldyBFcnJvcigiU2V0dGluZyAiK2UrIiBhcyBwYXJlbnQgb2YgIit0KyIgd291bGQgY3JlYXRlIGEgY3ljbGUiKTt0aGlzLnNldE5vZGUoZSl9cmV0dXJuIHRoaXMuc2V0Tm9kZSh0KSx0aGlzLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdCh0KSx0aGlzLl9wYXJlbnRbdF09ZSx0aGlzLl9jaGlsZHJlbltlXVt0XT0hMCx0aGlzfSxpLnByb3RvdHlwZS5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3Q9ZnVuY3Rpb24odCl7ZGVsZXRlIHRoaXMuX2NoaWxkcmVuW3RoaXMuX3BhcmVudFt0XV1bdF19LGkucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9wYXJlbnRbdF07aWYoIlwwIiE9PWUpcmV0dXJuIGV9fSxpLnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZihyLmlzVW5kZWZpbmVkKHQpJiYodD0iXDAiKSx0aGlzLl9pc0NvbXBvdW5kKXt2YXIgZT10aGlzLl9jaGlsZHJlblt0XTtpZihlKXJldHVybiByLmtleXMoZSl9ZWxzZXtpZigiXDAiPT09dClyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZSh0KSlyZXR1cm5bXX19LGkucHJvdG90eXBlLnByZWRlY2Vzc29ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wcmVkc1t0XTtpZihlKXJldHVybiByLmtleXMoZSl9LGkucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fc3Vjc1t0XTtpZihlKXJldHVybiByLmtleXMoZSl9LGkucHJvdG90eXBlLm5laWdoYm9ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnByZWRlY2Vzc29ycyh0KTtpZihlKXJldHVybiByLnVuaW9uKGUsdGhpcy5zdWNjZXNzb3JzKHQpKX0saS5wcm90b3R5cGUuaXNMZWFmPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09KHRoaXMuaXNEaXJlY3RlZCgpP3RoaXMuc3VjY2Vzc29ycyh0KTp0aGlzLm5laWdoYm9ycyh0KSkubGVuZ3RofSxpLnByb3RvdHlwZS5maWx0ZXJOb2Rlcz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7ZS5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciBuPXRoaXM7ci5lYWNoKHRoaXMuX25vZGVzLChmdW5jdGlvbihuLHIpe3QocikmJmUuc2V0Tm9kZShyLG4pfSkpLHIuZWFjaCh0aGlzLl9lZGdlT2JqcywoZnVuY3Rpb24odCl7ZS5oYXNOb2RlKHQudikmJmUuaGFzTm9kZSh0LncpJiZlLnNldEVkZ2UodCxuLmVkZ2UodCkpfSkpO3ZhciBpPXt9O3JldHVybiB0aGlzLl9pc0NvbXBvdW5kJiZyLmVhY2goZS5ub2RlcygpLChmdW5jdGlvbih0KXtlLnNldFBhcmVudCh0LGZ1bmN0aW9uIHQocil7dmFyIGE9bi5wYXJlbnQocik7cmV0dXJuIHZvaWQgMD09PWF8fGUuaGFzTm9kZShhKT8oaVtyXT1hLGEpOmEgaW4gaT9pW2FdOnQoYSl9KHQpKX0pKSxlfSxpLnByb3RvdHlwZS5zZXREZWZhdWx0RWRnZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiByLmlzRnVuY3Rpb24odCl8fCh0PXIuY29uc3RhbnQodCkpLHRoaXMuX2RlZmF1bHRFZGdlTGFiZWxGbj10LHRoaXN9LGkucHJvdG90eXBlLmVkZ2VDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lZGdlQ291bnR9LGkucHJvdG90eXBlLmVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIHIudmFsdWVzKHRoaXMuX2VkZ2VPYmpzKX0saS5wcm90b3R5cGUuc2V0UGF0aD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT1hcmd1bWVudHM7cmV0dXJuIHIucmVkdWNlKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIGkubGVuZ3RoPjE/bi5zZXRFZGdlKHQscixlKTpuLnNldEVkZ2UodCxyKSxyfSkpLHRoaXN9LGkucHJvdG90eXBlLnNldEVkZ2U9ZnVuY3Rpb24oKXt2YXIgdCxlLG4saSxvPSExLHU9YXJndW1lbnRzWzBdOyJvYmplY3QiPT10eXBlb2YgdSYmbnVsbCE9PXUmJiJ2ImluIHU/KHQ9dS52LGU9dS53LG49dS5uYW1lLDI9PT1hcmd1bWVudHMubGVuZ3RoJiYoaT1hcmd1bWVudHNbMV0sbz0hMCkpOih0PXUsZT1hcmd1bWVudHNbMV0sbj1hcmd1bWVudHNbM10sYXJndW1lbnRzLmxlbmd0aD4yJiYoaT1hcmd1bWVudHNbMl0sbz0hMCkpLHQ9IiIrdCxlPSIiK2Usci5pc1VuZGVmaW5lZChuKXx8KG49IiIrbik7dmFyIGw9cyh0aGlzLl9pc0RpcmVjdGVkLHQsZSxuKTtpZihyLmhhcyh0aGlzLl9lZGdlTGFiZWxzLGwpKXJldHVybiBvJiYodGhpcy5fZWRnZUxhYmVsc1tsXT1pKSx0aGlzO2lmKCFyLmlzVW5kZWZpbmVkKG4pJiYhdGhpcy5faXNNdWx0aWdyYXBoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBhIG5hbWVkIGVkZ2Ugd2hlbiBpc011bHRpZ3JhcGggPSBmYWxzZSIpO3RoaXMuc2V0Tm9kZSh0KSx0aGlzLnNldE5vZGUoZSksdGhpcy5fZWRnZUxhYmVsc1tsXT1vP2k6dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuKHQsZSxuKTt2YXIgaD1jKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiB0PWgudixlPWgudyxPYmplY3QuZnJlZXplKGgpLHRoaXMuX2VkZ2VPYmpzW2xdPWgsYSh0aGlzLl9wcmVkc1tlXSx0KSxhKHRoaXMuX3N1Y3NbdF0sZSksdGhpcy5faW5bZV1bbF09aCx0aGlzLl9vdXRbdF1bbF09aCx0aGlzLl9lZGdlQ291bnQrKyx0aGlzfSxpLnByb3RvdHlwZS5lZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0xPT09YXJndW1lbnRzLmxlbmd0aD91KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpzKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiB0aGlzLl9lZGdlTGFiZWxzW3JdfSxpLnByb3RvdHlwZS5oYXNFZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0xPT09YXJndW1lbnRzLmxlbmd0aD91KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpzKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO3JldHVybiByLmhhcyh0aGlzLl9lZGdlTGFiZWxzLGkpfSxpLnByb3RvdHlwZS5yZW1vdmVFZGdlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0xPT09YXJndW1lbnRzLmxlbmd0aD91KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpzKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pLGk9dGhpcy5fZWRnZU9ianNbcl07cmV0dXJuIGkmJih0PWkudixlPWkudyxkZWxldGUgdGhpcy5fZWRnZUxhYmVsc1tyXSxkZWxldGUgdGhpcy5fZWRnZU9ianNbcl0sbyh0aGlzLl9wcmVkc1tlXSx0KSxvKHRoaXMuX3N1Y3NbdF0sZSksZGVsZXRlIHRoaXMuX2luW2VdW3JdLGRlbGV0ZSB0aGlzLl9vdXRbdF1bcl0sdGhpcy5fZWRnZUNvdW50LS0pLHRoaXN9LGkucHJvdG90eXBlLmluRWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pblt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC52PT09ZX0pKTppfX0saS5wcm90b3R5cGUub3V0RWRnZXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9vdXRbdF07aWYobil7dmFyIGk9ci52YWx1ZXMobik7cmV0dXJuIGU/ci5maWx0ZXIoaSwoZnVuY3Rpb24odCl7cmV0dXJuIHQudz09PWV9KSk6aX19LGkucHJvdG90eXBlLm5vZGVFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuaW5FZGdlcyh0LGUpO2lmKG4pcmV0dXJuIG4uY29uY2F0KHRoaXMub3V0RWRnZXModCxlKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxOSksIk1hcCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMTgpLGk9bigyMjUpLGE9bigyMjcpLG89bigyMjgpLHM9bigyMjkpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytuPHImJiExIT09ZSh0W25dLG4sdCk7KTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD4tMSYmdCUxPT0wJiZ0PD05MDA3MTk5MjU0NzQwOTkxfX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXt2YXIgcj1uKDExMCksaT1lJiYhZS5ub2RlVHlwZSYmZSxhPWkmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsbz1hJiZhLmV4cG9ydHM9PT1pJiZyLnByb2Nlc3Mscz1mdW5jdGlvbigpe3RyeXt2YXIgdD1hJiZhLnJlcXVpcmUmJmEucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiB0fHxvJiZvLmJpbmRpbmcmJm8uYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCk7dC5leHBvcnRzPXN9KS5jYWxsKHRoaXMsbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYzKSxpPW4oMjM1KSxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBpKHQpO3ZhciBlPVtdO2Zvcih2YXIgbiBpbiBPYmplY3QodCkpYS5jYWxsKHQsbikmJiJjb25zdHJ1Y3RvciIhPW4mJmUucHVzaChuKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExNyksaT1uKDExOCksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxzPW8/ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/W106KHQ9T2JqZWN0KHQpLHIobyh0KSwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2FsbCh0LGUpfSkpKX06aTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1lLmxlbmd0aCxpPXQubGVuZ3RoOysrbjxyOyl0W2krbl09ZVtuXTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyByKGUpLnNldChuZXcgcih0KSksZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX19LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9bigxMjcpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MCksaT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcih0LGUsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTQpKCk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtuWysrZV09dH0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjYpLGk9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAsYT0oZT1yKGUsdCkpLmxlbmd0aDtudWxsIT10JiZuPGE7KXQ9dFtpKGVbbisrXSldO3JldHVybiBuJiZuPT1hP3Q6dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNSksaT1uKDQzKSxhPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLG89L15cdyokLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihyKHQpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybiEoIm51bWJlciIhPW4mJiJzeW1ib2wiIT1uJiYiYm9vbGVhbiIhPW4mJm51bGwhPXQmJiFpKHQpKXx8KG8udGVzdCh0KXx8IWEudGVzdCh0KXx8bnVsbCE9ZSYmdCBpbiBPYmplY3QoZSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc2KSxpPW4oMTM4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmaSh0LGUscil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NSksaT1uKDI4OCk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGEsbyxzKXt2YXIgYz0tMSx1PWUubGVuZ3RoO2ZvcihhfHwoYT1pKSxzfHwocz1bXSk7KytjPHU7KXt2YXIgbD1lW2NdO24+MCYmYShsKT9uPjE/dChsLG4tMSxhLG8scyk6cihzLGwpOm98fChzW3MubGVuZ3RoXT1sKX1yZXR1cm4gc319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT0tMSxhPXQubGVuZ3RoOysraTxhOyl7dmFyIG89dFtpXSxzPWUobyk7aWYobnVsbCE9cyYmKHZvaWQgMD09PWM/cz09cyYmIXIocyk6bihzLGMpKSl2YXIgYz1zLHU9b31yZXR1cm4gdX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7ci55PGEmJihsPS1sKTtyZXR1cm57eDppK3UseTphK2x9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzczKSxpPW4oNTEpLGE9bigzNzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIG89ZS5sYWJlbCxzPXQuYXBwZW5kKCJnIik7InN2ZyI9PT1lLmxhYmVsVHlwZT9hKHMsZSk6InN0cmluZyIhPXR5cGVvZiBvfHwiaHRtbCI9PT1lLmxhYmVsVHlwZT9pKHMsZSk6cihzLGUpO3ZhciBjLHU9cy5ub2RlKCkuZ2V0QkJveCgpO3N3aXRjaChuKXtjYXNlInRvcCI6Yz0tZS5oZWlnaHQvMjticmVhaztjYXNlImJvdHRvbSI6Yz1lLmhlaWdodC8yLXUuaGVpZ2h0O2JyZWFrO2RlZmF1bHQ6Yz0tdS5oZWlnaHQvMn1yZXR1cm4gcy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistdS53aWR0aC8yKyIsIitjKyIpIiksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9big0NiksYT1uKDE3OCksbz17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTpmdW5jdGlvbih0KXtpZigzNT09PXQuY2hhckNvZGVBdCgwKSl7dmFyIGU9dC5tYXRjaChvLnJlKTtpZihlKXt2YXIgbj1lWzFdLHI9cGFyc2VJbnQobiwxNiksYT1uLmxlbmd0aCxzPWElND09MCxjPWE+NCx1PWM/MToxNyxsPWM/ODo0LGg9cz8wOi0xLGY9Yz8yNTU6MTU7cmV0dXJuIGkuZGVmYXVsdC5zZXQoe3I6KHI+PmwqKGgrMykmZikqdSxnOihyPj5sKihoKzIpJmYpKnUsYjoocj4+bCooaCsxKSZmKSp1LGE6cz8ociZmKSp1LzI1NToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYTwxPyIjIithLkRFQzJIRVhbTWF0aC5yb3VuZCh0LnIpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmcpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmIpXStyLmRlZmF1bHQudW5pdC5mcmFjMmhleCh0LmEpOiIjIithLkRFQzJIRVhbTWF0aC5yb3VuZCh0LnIpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmcpXSthLkRFQzJIRVhbTWF0aC5yb3VuZCh0LmIpXX19O2UuZGVmYXVsdD1vfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oNDYpLGE9bigxNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSxuLG8pe3ZvaWQgMD09PW8mJihvPTEpO3ZhciBzPWkuZGVmYXVsdC5zZXQoe2g6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCh0KSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMoZSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKG4pLGE6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShvKX0pO3JldHVybiBhLmRlZmF1bHQuc3RyaW5naWZ5KHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYSIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMCksaT1uKDE2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9aS5kZWZhdWx0LnBhcnNlKHQpLG49ZS5yLGE9ZS5nLG89ZS5iLHM9LjIxMjYqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobikrLjcxNTIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIoYSkrLjA3MjIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobyk7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDIpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQpPj0uNX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImEiLC1lKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTYpLGk9big1Myk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5kZWZhdWx0LnBhcnNlKHQpLGE9e307Zm9yKHZhciBvIGluIGUpZVtvXSYmKGFbb109bltvXStlW29dKTtyZXR1cm4gaS5kZWZhdWx0KHQsYSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2KSxpPW4oNTIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbil7dm9pZCAwPT09biYmKG49NTApO3ZhciBhPXIuZGVmYXVsdC5wYXJzZSh0KSxvPWEucixzPWEuZyxjPWEuYix1PWEuYSxsPXIuZGVmYXVsdC5wYXJzZShlKSxoPWwucixmPWwuZyxkPWwuYixwPWwuYSx5PW4vMTAwLGc9Mip5LTEsdj11LXAsbT0oKGcqdj09LTE/ZzooZyt2KS8oMStnKnYpKSsxKS8yLGI9MS1tLHg9byptK2gqYixfPXMqbStmKmIsaz1jKm0rZCpiLHc9dSp5K3AqKDEteSk7cmV0dXJuIGkuZGVmYXVsdCh4LF8sayx3KX19LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDgwKSxhPW4oNTkpLG89bigyMzApLHM9bigyMzYpLGM9bigxMTUpLHU9bigxMTYpLGw9bigyMzkpLGg9bigyNDApLGY9bigxMjApLGQ9bigyNDEpLHA9big0MikseT1uKDI0NSksZz1uKDI0Niksdj1uKDEyNSksbT1uKDUpLGI9big0MCkseD1uKDI1MCksXz1uKDEzKSxrPW4oMjUyKSx3PW4oMzApLEU9e307RVsiW29iamVjdCBBcmd1bWVudHNdIl09RVsiW29iamVjdCBBcnJheV0iXT1FWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUVbIltvYmplY3QgRGF0YVZpZXddIl09RVsiW29iamVjdCBCb29sZWFuXSJdPUVbIltvYmplY3QgRGF0ZV0iXT1FWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1FWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1FWyJbb2JqZWN0IEludDhBcnJheV0iXT1FWyJbb2JqZWN0IEludDE2QXJyYXldIl09RVsiW29iamVjdCBJbnQzMkFycmF5XSJdPUVbIltvYmplY3QgTWFwXSJdPUVbIltvYmplY3QgTnVtYmVyXSJdPUVbIltvYmplY3QgT2JqZWN0XSJdPUVbIltvYmplY3QgUmVnRXhwXSJdPUVbIltvYmplY3QgU2V0XSJdPUVbIltvYmplY3QgU3RyaW5nXSJdPUVbIltvYmplY3QgU3ltYm9sXSJdPUVbIltvYmplY3QgVWludDhBcnJheV0iXT1FWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUVbIltvYmplY3QgVWludDE2QXJyYXldIl09RVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxFWyJbb2JqZWN0IEVycm9yXSJdPUVbIltvYmplY3QgRnVuY3Rpb25dIl09RVsiW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixULEMsUyxBKXt2YXIgTSxPPTEmbixCPTImbixOPTQmbjtpZihUJiYoTT1TP1QoZSxDLFMsQSk6VChlKSksdm9pZCAwIT09TSlyZXR1cm4gTTtpZighXyhlKSlyZXR1cm4gZTt2YXIgRD1tKGUpO2lmKEQpe2lmKE09eShlKSwhTylyZXR1cm4gdShlLE0pfWVsc2V7dmFyIEw9cChlKSxJPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PUx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PUw7aWYoYihlKSlyZXR1cm4gYyhlLE8pO2lmKCJbb2JqZWN0IE9iamVjdF0iPT1MfHwiW29iamVjdCBBcmd1bWVudHNdIj09THx8SSYmIVMpe2lmKE09Qnx8ST97fTp2KGUpLCFPKXJldHVybiBCP2goZSxzKE0sZSkpOmwoZSxvKE0sZSkpfWVsc2V7aWYoIUVbTF0pcmV0dXJuIFM/ZTp7fTtNPWcoZSxMLE8pfX1BfHwoQT1uZXcgcik7dmFyIFI9QS5nZXQoZSk7aWYoUilyZXR1cm4gUjtBLnNldChlLE0pLGsoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtNLmFkZCh0KHIsbixULHIsZSxBKSl9KSk6eChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLGkpe00uc2V0KGksdChyLG4sVCxpLGUsQSkpfSkpO3ZhciBGPU4/Qj9kOmY6Qj9rZXlzSW46dyxQPUQ/dm9pZCAwOkYoZSk7cmV0dXJuIGkoUHx8ZSwoZnVuY3Rpb24ocixpKXtQJiYocj1lW2k9cl0pLGEoTSxpLHQocixuLFQsaSxlLEEpKX0pKSxNfX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbihlKXt2YXIgbj0ib2JqZWN0Ij09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlO3QuZXhwb3J0cz1ufSkuY2FsbCh0aGlzLG4oMjEyKSl9LGZ1bmN0aW9uKHQsZSl7dmFyIG49RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsIT10KXt0cnl7cmV0dXJuIG4uY2FsbCh0KX1jYXRjaCh0KXt9dHJ5e3JldHVybiB0KyIifWNhdGNoKHQpe319cmV0dXJuIiJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMyksaT1mdW5jdGlvbigpe3RyeXt2YXIgdD1yKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzEpLGk9big0OCksYT1uKDUpLG89big0MCkscz1uKDYxKSxjPW4oNDkpLHU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1hKHQpLGw9IW4mJmkodCksaD0hbiYmIWwmJm8odCksZj0hbiYmIWwmJiFoJiZjKHQpLGQ9bnx8bHx8aHx8ZixwPWQ/cih0Lmxlbmd0aCxTdHJpbmcpOltdLHk9cC5sZW5ndGg7Zm9yKHZhciBnIGluIHQpIWUmJiF1LmNhbGwodCxnKXx8ZCYmKCJsZW5ndGgiPT1nfHxoJiYoIm9mZnNldCI9PWd8fCJwYXJlbnQiPT1nKXx8ZiYmKCJidWZmZXIiPT1nfHwiYnl0ZUxlbmd0aCI9PWd8fCJieXRlT2Zmc2V0Ij09Zyl8fHMoZyx5KSl8fHAucHVzaChnKTtyZXR1cm4gcH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUobikpfX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCl7dmFyIHI9bigxOSksaT1lJiYhZS5ub2RlVHlwZSYmZSxhPWkmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsbz1hJiZhLmV4cG9ydHM9PT1pP3IuQnVmZmVyOnZvaWQgMCxzPW8/by5hbGxvY1Vuc2FmZTp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZSlyZXR1cm4gdC5zbGljZSgpO3ZhciBuPXQubGVuZ3RoLHI9cz9zKG4pOm5ldyB0LmNvbnN0cnVjdG9yKG4pO3JldHVybiB0LmNvcHkocikscn19KS5jYWxsKHRoaXMsbig2KSh0KSl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEscj10Lmxlbmd0aDtmb3IoZXx8KGU9QXJyYXkocikpOysrbjxyOyllW25dPXRbbl07cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aCxpPTAsYT1bXTsrK248cjspe3ZhciBvPXRbbl07ZShvLG4sdCkmJihhW2krK109byl9cmV0dXJuIGF9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybltdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODUpLGk9big2NCksYT1uKDg0KSxvPW4oMTE4KSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdO3Q7KXIoZSxhKHQpKSx0PWkodCk7cmV0dXJuIGV9Om87dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMSksaT1uKDg0KSxhPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGEsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NSksaT1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9ZSh0KTtyZXR1cm4gaSh0KT9hOnIoYSxuKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiU2V0Iik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KS5VaW50OEFycmF5O3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZT9yKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTI2KSxpPW4oNjQpLGE9big2Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxhKHQpP3t9OnIoaSh0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyksaT1PYmplY3QuY3JlYXRlLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiBmdW5jdGlvbihlKXtpZighcihlKSlyZXR1cm57fTtpZihpKXJldHVybiBpKGUpO3QucHJvdG90eXBlPWU7dmFyIG49bmV3IHQ7cmV0dXJuIHQucHJvdG90eXBlPXZvaWQgMCxufX0oKTt0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODApLGk9big2NSksYT1uKDEyOCksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6aSkodCxhKGUpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE3KSxpPW4oMjU2KSxhPW4oMjYpLG89big1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obyh0KT9yOmkpKHQsYShlLDMpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1OSksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3JldHVybiBlPT09bnx8KG51bGw9PWV8fG51bGw9PW58fCFpKGUpJiYhaShuKT9lIT1lJiZuIT1uOnIoZSxuLGEsbyx0LHMpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzMiksaT1uKDI2MiksYT1uKDEzMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLG8scyxjKXt2YXIgdT0xJm4sbD10Lmxlbmd0aCxoPWUubGVuZ3RoO2lmKGwhPWgmJiEodSYmaD5sKSlyZXR1cm4hMTt2YXIgZj1jLmdldCh0KTtpZihmJiZjLmdldChlKSlyZXR1cm4gZj09ZTt2YXIgZD0tMSxwPSEwLHk9MiZuP25ldyByOnZvaWQgMDtmb3IoYy5zZXQodCxlKSxjLnNldChlLHQpOysrZDxsOyl7dmFyIGc9dFtkXSx2PWVbZF07aWYobyl2YXIgbT11P28odixnLGQsZSx0LGMpOm8oZyx2LGQsdCxlLGMpO2lmKHZvaWQgMCE9PW0pe2lmKG0pY29udGludWU7cD0hMTticmVha31pZih5KXtpZighaShlLChmdW5jdGlvbih0LGUpe2lmKCFhKHksZSkmJihnPT09dHx8cyhnLHQsbixvLGMpKSlyZXR1cm4geS5wdXNoKGUpfSkpKXtwPSExO2JyZWFrfX1lbHNlIGlmKGchPT12JiYhcyhnLHYsbixvLGMpKXtwPSExO2JyZWFrfX1yZXR1cm4gYy5kZWxldGUodCksYy5kZWxldGUoZSkscH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc5KSxpPW4oMjYwKSxhPW4oMjYxKTtmdW5jdGlvbiBvKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyByOysrZTxuOyl0aGlzLmFkZCh0W2VdKX1vLnByb3RvdHlwZS5hZGQ9by5wcm90b3R5cGUucHVzaD1pLG8ucHJvdG90eXBlLmhhcz1hLHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmhhcyhlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFyKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJihuW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KG4pKSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3MyksaT1uKDEzOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmkodCxlLHIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjYpLGk9big0OCksYT1uKDUpLG89big2MSkscz1uKDgxKSxjPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciB1PS0xLGw9KGU9cihlLHQpKS5sZW5ndGgsaD0hMTsrK3U8bDspe3ZhciBmPWMoZVt1XSk7aWYoIShoPW51bGwhPXQmJm4odCxmKSkpYnJlYWs7dD10W2ZdfXJldHVybiBofHwrK3UhPWw/aDohIShsPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJnMobCkmJm8oZixsKSYmKGEodCl8fGkodCkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjcpLGk9bigyNiksYT1uKDE0Miksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6YSkodCxpKGUsMykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjUpLGk9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEsYT1pKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7YVsrK25dPWUodCxyLGkpfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzgpLGk9big2NSksYT1uKDI2KSxvPW4oMjc5KSxzPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz1zKHQpP3I6byx1PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gYyh0LGEoZSw0KSxuLHUsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODkpLGk9TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1pKHZvaWQgMD09PWU/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxvPS0xLHM9aShhLmxlbmd0aC1lLDApLGM9QXJyYXkocyk7KytvPHM7KWNbb109YVtlK29dO289LTE7Zm9yKHZhciB1PUFycmF5KGUrMSk7KytvPGU7KXVbb109YVtvXTtyZXR1cm4gdVtlXT1uKGMpLHIodCx0aGlzLHUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI5MCksaT1uKDI5MSkocik7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPGk7KWlmKGUodFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzAwKSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXTpyKHQsaSh0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMiksaT1uKDE1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbih0LGUsbixyKXt2YXIgYSxvLHM9e30sYz1uZXcgaSx1PWZ1bmN0aW9uKHQpe3ZhciBlPXQudiE9PWE/dC52OnQudyxyPXNbZV0saT1uKHQpLHU9by5kaXN0YW5jZStpO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrdCsiIFdlaWdodDogIitpKTt1PHIuZGlzdGFuY2UmJihyLmRpc3RhbmNlPXUsci5wcmVkZWNlc3Nvcj1hLGMuZGVjcmVhc2UoZSx1KSl9O3Qubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtzW3RdPXtkaXN0YW5jZTpufSxjLmFkZCh0LG4pfSkpO2Zvcig7Yy5zaXplKCk+MCYmKGE9Yy5yZW1vdmVNaW4oKSwobz1zW2FdKS5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KXIoYSkuZm9yRWFjaCh1KTtyZXR1cm4gc30odCxTdHJpbmcoZSksbnx8YSxyfHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgYT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7ZnVuY3Rpb24gaSgpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fXQuZXhwb3J0cz1pLGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLmxlbmd0aH0saS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSl9LGkucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gci5oYXModGhpcy5fa2V5SW5kaWNlcyx0KX0saS5wcm90b3R5cGUucHJpb3JpdHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fa2V5SW5kaWNlc1t0XTtpZih2b2lkIDAhPT1lKXJldHVybiB0aGlzLl9hcnJbZV0ucHJpb3JpdHl9LGkucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKDA9PT10aGlzLnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9rZXlJbmRpY2VzO2lmKHQ9U3RyaW5nKHQpLCFyLmhhcyhuLHQpKXt2YXIgaT10aGlzLl9hcnIsYT1pLmxlbmd0aDtyZXR1cm4gblt0XT1hLGkucHVzaCh7a2V5OnQscHJpb3JpdHk6ZX0pLHRoaXMuX2RlY3JlYXNlKGEpLCEwfXJldHVybiExfSxpLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgdD10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW3Qua2V5XSx0aGlzLl9oZWFwaWZ5KDApLHQua2V5fSxpLnByb3RvdHlwZS5kZWNyZWFzZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXNbdF07aWYoZT50aGlzLl9hcnJbbl0ucHJpb3JpdHkpdGhyb3cgbmV3IEVycm9yKCJOZXcgcHJpb3JpdHkgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQgcHJpb3JpdHkuIEtleTogIit0KyIgT2xkOiAiK3RoaXMuX2FycltuXS5wcmlvcml0eSsiIE5ldzogIitlKTt0aGlzLl9hcnJbbl0ucHJpb3JpdHk9ZSx0aGlzLl9kZWNyZWFzZShuKX0saS5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYXJyLG49Mip0LHI9bisxLGk9dDtuPGUubGVuZ3RoJiYoaT1lW25dLnByaW9yaXR5PGVbaV0ucHJpb3JpdHk/bjppLHI8ZS5sZW5ndGgmJihpPWVbcl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9yOmkpLGkhPT10JiYodGhpcy5fc3dhcCh0LGkpLHRoaXMuX2hlYXBpZnkoaSkpKX0saS5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuX2FycixyPW5bdF0ucHJpb3JpdHk7MCE9PXQmJiEobltlPXQ+PjFdLnByaW9yaXR5PHIpOyl0aGlzLl9zd2FwKHQsZSksdD1lfSxpLnByb3RvdHlwZS5fc3dhcD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2FycixyPXRoaXMuX2tleUluZGljZXMsaT1uW3RdLGE9bltlXTtuW3RdPWEsbltlXT1pLHJbYS5rZXldPXQscltpLmtleV09ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxuPVtdLGk9e30sYT1bXTtyZXR1cm4gdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKG8pe3IuaGFzKGksbyl8fGZ1bmN0aW9uIG8ocyl7dmFyIGM9aVtzXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2gocyksdC5zdWNjZXNzb3JzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaGFzKGksdCk/aVt0XS5vblN0YWNrJiYoYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmluZGV4KSk6KG8odCksYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmxvd2xpbmspKX0pKSxjLmxvd2xpbms9PT1jLmluZGV4KXt2YXIgdSxsPVtdO2Rve3U9bi5wb3AoKSxpW3VdLm9uU3RhY2s9ITEsbC5wdXNoKHUpfXdoaWxlKHMhPT11KTthLnB1c2gobCl9fShvKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIpO2Z1bmN0aW9uIGkodCl7dmFyIGU9e30sbj17fSxpPVtdO2lmKHIuZWFjaCh0LnNpbmtzKCksKGZ1bmN0aW9uIG8ocyl7aWYoci5oYXMobixzKSl0aHJvdyBuZXcgYTtyLmhhcyhlLHMpfHwobltzXT0hMCxlW3NdPSEwLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhzKSxvKSxkZWxldGUgbltzXSxpLnB1c2gocykpfSkpLHIuc2l6ZShlKSE9PXQubm9kZUNvdW50KCkpdGhyb3cgbmV3IGE7cmV0dXJuIGl9ZnVuY3Rpb24gYSgpe310LmV4cG9ydHM9aSxpLkN5Y2xlRXhjZXB0aW9uPWEsYS5wcm90b3R5cGU9bmV3IEVycm9yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyLmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIGk9KHQuaXNEaXJlY3RlZCgpP3Quc3VjY2Vzc29yczp0Lm5laWdoYm9ycykuYmluZCh0KSxhPVtdLG89e307cmV0dXJuIHIuZWFjaChlLChmdW5jdGlvbihlKXtpZighdC5oYXNOb2RlKGUpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK2UpOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtyLmhhcyhhLG4pfHwoYVtuXT0hMCxpfHxzLnB1c2gobiksci5lYWNoKG8obiksKGZ1bmN0aW9uKG4pe3QoZSxuLGksYSxvLHMpfSkpLGkmJnMucHVzaChuKSl9KHQsZSwicG9zdCI9PT1uLG8saSxhKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oOSl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5kYWdyZSksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY4KSxpPW4oMzcpLGE9big2OSksbz1uKDQxKSxzPU9iamVjdC5wcm90b3R5cGUsYz1zLmhhc093blByb3BlcnR5LHU9cigoZnVuY3Rpb24odCxlKXt0PU9iamVjdCh0KTt2YXIgbj0tMSxyPWUubGVuZ3RoLHU9cj4yP2VbMl06dm9pZCAwO2Zvcih1JiZhKGVbMF0sZVsxXSx1KSYmKHI9MSk7KytuPHI7KWZvcih2YXIgbD1lW25dLGg9byhsKSxmPS0xLGQ9aC5sZW5ndGg7KytmPGQ7KXt2YXIgcD1oW2ZdLHk9dFtwXTsodm9pZCAwPT09eXx8aSh5LHNbcF0pJiYhYy5jYWxsKHQscCkpJiYodFtwXT1sW3BdKX1yZXR1cm4gdH0pKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHQ9cih0KSk9PT0xLzB8fHQ9PT0tMS8wPzE3OTc2OTMxMzQ4NjIzMTU3ZTI5MioodDwwPy0xOjEpOnQ9PXQ/dDowOjA9PT10P3Q6MH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuKG51bGw9PXQ/MDp0Lmxlbmd0aCk/cih0LDEpOltdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjApLGk9bigzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXsodm9pZCAwPT09bnx8aSh0W2VdLG4pKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9big2NCksYT1uKDIxKSxvPUZ1bmN0aW9uLnByb3RvdHlwZSxzPU9iamVjdC5wcm90b3R5cGUsYz1vLnRvU3RyaW5nLHU9cy5oYXNPd25Qcm9wZXJ0eSxsPWMuY2FsbChPYmplY3QpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighYSh0KXx8IltvYmplY3QgT2JqZWN0XSIhPXIodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj11LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmMuY2FsbChuKT09bH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoKCJjb25zdHJ1Y3RvciIhPT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdFtlXSkmJiJfX3Byb3RvX18iIT1lKXJldHVybiB0W2VdfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMzKSxpPW4oMzM2KSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTpyKHQsZSl9KSk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzNykoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM2KSxpPTA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSsraTtyZXR1cm4gcih0KStlfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDcwKS5zbGFjaztmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIG4oaSl7ci5mb3JFYWNoKGUubm9kZUVkZ2VzKGkpLChmdW5jdGlvbihyKXt2YXIgbz1yLnYscz1pPT09bz9yLnc6bzt0Lmhhc05vZGUocyl8fGEoZSxyKXx8KHQuc2V0Tm9kZShzLHt9KSx0LnNldEVkZ2UoaSxzLHt9KSxuKHMpKX0pKX0pKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gci5taW5CeShlLmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2lmKHQuaGFzTm9kZShuLnYpIT09dC5oYXNOb2RlKG4udykpcmV0dXJuIGEoZSxuKX0pKX1mdW5jdGlvbiBjKHQsZSxuKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtlLm5vZGUodCkucmFuays9bn0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPW5ldyBpKHtkaXJlY3RlZDohMX0pLHU9dC5ub2RlcygpWzBdLGw9dC5ub2RlQ291bnQoKTtyLnNldE5vZGUodSx7fSk7Zm9yKDtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIodCxlLGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9aWYoIW8ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLHQpLHQ7by5sZW5ndGg+MSYmby5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIG9bMF19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKTtyZXR1cm57eDppK24seTphK3J9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj0vXlwwKy9nLHI9L1tcMFxyXGZdL2csaT0vOiAqL2csYT0vem9vfGdyYS8sbz0vKFssOiBdKSh0cmFuc2Zvcm0pL2cscz0vLCtccyooPyFbXihdKlspXSkvZyxjPS8gK1xzKig/IVteKF0qWyldKS9nLHU9LyAqW1wwXSAqL2csbD0vLFxyKz8vZyxoPS8oW1x0XHJcbiBdKSpcZj8mL2csZj0vOmdsb2JhbFwoKCg/OlteXChcKVxbXF1dKnxcWy4qXF18XChbXlwoXCldKlwpKSopXCkvZyxkPS9cVysvZyxwPS9AKGtcdyspXHMqKFxTKilccyovLHk9Lzo6KHBsYWNlKS9nLGc9LzoocmVhZC1vbmx5KS9nLHY9L1xzKyg/PVt7XF07PTo+XSkvZyxtPS8oW1t9PTo+XSlccysvZyxiPS8oXHtbXntdKz8pOyg/PVx9KS9nLHg9L1xzezIsfS9nLF89LyhbXlwoXSkoOispICovZyxrPS9bc3ZoXVx3Ky1bdGJscl17Mn0vLHc9L1woXHMqKC4qKVxzKlwpL2csRT0vKFtcc1xTXSo/KTsvZyxUPS8tc2VsZnxmbGV4LS9nLEM9L1teXSo/KDpbcnBdW2VsXWFbXHctXSspW15dKi8sUz0vc3RyZXRjaHw6XHMqXHcrXC0oPzpjb250ZXxhdmFpbCkvLEE9LyhbXi1dKShpbWFnZS1zZXRcKCkvLE09Ii13ZWJraXQtIixPPSItbW96LSIsQj0iLW1zLSIsTj0xLEQ9MSxMPTAsST0xLFI9MSxGPTEsUD0wLGo9MCxZPTAsej1bXSxVPVtdLCQ9MCxxPW51bGwsVz0wLFY9MSxIPSIiLEc9IiIsWD0iIjtmdW5jdGlvbiBaKHQsZSxpLGEsbyl7Zm9yKHZhciBzLGMsbD0wLGg9MCxmPTAsZD0wLHY9MCxtPTAsYj0wLHg9MCxrPTAsRT0wLFQ9MCxDPTAsUz0wLEE9MCxPPTAsQj0wLFA9MCxVPTAscT0wLEs9aS5sZW5ndGgsaXQ9Sy0xLGF0PSIiLG90PSIiLHN0PSIiLGN0PSIiLHV0PSIiLGx0PSIiO088Szspe2lmKGI9aS5jaGFyQ29kZUF0KE8pLE89PT1pdCYmaCtkK2YrbCE9PTAmJigwIT09aCYmKGI9NDc9PT1oPzEwOjQ3KSxkPWY9bD0wLEsrKyxpdCsrKSxoK2QrZitsPT09MCl7aWYoTz09PWl0JiYoQj4wJiYob3Q9b3QucmVwbGFjZShyLCIiKSksb3QudHJpbSgpLmxlbmd0aD4wKSl7c3dpdGNoKGIpe2Nhc2UgMzI6Y2FzZSA5OmNhc2UgNTk6Y2FzZSAxMzpjYXNlIDEwOmJyZWFrO2RlZmF1bHQ6b3QrPWkuY2hhckF0KE8pfWI9NTl9aWYoMT09PVApc3dpdGNoKGIpe2Nhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNTk6Y2FzZSAzNDpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQ0OlA9MDtjYXNlIDk6Y2FzZSAxMzpjYXNlIDEwOmNhc2UgMzI6YnJlYWs7ZGVmYXVsdDpmb3IoUD0wLHE9Tyx2PWIsTy0tLGI9NTk7cTxLOylzd2l0Y2goaS5jaGFyQ29kZUF0KHErKykpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDU5OisrTyxiPXYscT1LO2JyZWFrO2Nhc2UgNTg6Qj4wJiYoKytPLGI9dik7Y2FzZSAxMjM6cT1LfX1zd2l0Y2goYil7Y2FzZSAxMjM6Zm9yKHY9KG90PW90LnRyaW0oKSkuY2hhckNvZGVBdCgwKSxUPTEscT0rK087TzxLOyl7c3dpdGNoKGI9aS5jaGFyQ29kZUF0KE8pKXtjYXNlIDEyMzpUKys7YnJlYWs7Y2FzZSAxMjU6VC0tO2JyZWFrO2Nhc2UgNDc6c3dpdGNoKG09aS5jaGFyQ29kZUF0KE8rMSkpe2Nhc2UgNDI6Y2FzZSA0NzpPPXJ0KG0sTyxpdCxpKX1icmVhaztjYXNlIDkxOmIrKztjYXNlIDQwOmIrKztjYXNlIDM0OmNhc2UgMzk6Zm9yKDtPKys8aXQmJmkuY2hhckNvZGVBdChPKSE9PWI7KTt9aWYoMD09PVQpYnJlYWs7TysrfXN3aXRjaChzdD1pLnN1YnN0cmluZyhxLE8pLDA9PT12JiYodj0ob3Q9b3QucmVwbGFjZShuLCIiKS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLHYpe2Nhc2UgNjQ6c3dpdGNoKEI+MCYmKG90PW90LnJlcGxhY2UociwiIikpLG09b3QuY2hhckNvZGVBdCgxKSl7Y2FzZSAxMDA6Y2FzZSAxMDk6Y2FzZSAxMTU6Y2FzZSA0NTpzPWU7YnJlYWs7ZGVmYXVsdDpzPXp9aWYocT0oc3Q9WihlLHMsc3QsbSxvKzEpKS5sZW5ndGgsWT4wJiYwPT09cSYmKHE9b3QubGVuZ3RoKSwkPjAmJihjPW50KDMsc3Qscz1RKHosb3QsVSksZSxELE4scSxtLG8sYSksb3Q9cy5qb2luKCIiKSx2b2lkIDAhPT1jJiYwPT09KHE9KHN0PWMudHJpbSgpKS5sZW5ndGgpJiYobT0wLHN0PSIiKSkscT4wKXN3aXRjaChtKXtjYXNlIDExNTpvdD1vdC5yZXBsYWNlKHcsZXQpO2Nhc2UgMTAwOmNhc2UgMTA5OmNhc2UgNDU6c3Q9b3QrInsiK3N0KyJ9IjticmVhaztjYXNlIDEwNzpzdD0ob3Q9b3QucmVwbGFjZShwLCIkMSAkMiIrKFY+MD9IOiIiKSkpKyJ7IitzdCsifSIsc3Q9MT09PVJ8fDI9PT1SJiZ0dCgiQCIrc3QsMyk/IkAiK00rc3QrIkAiK3N0OiJAIitzdDticmVhaztkZWZhdWx0OnN0PW90K3N0LDExMj09PWEmJihjdCs9c3Qsc3Q9IiIpfWVsc2Ugc3Q9IiI7YnJlYWs7ZGVmYXVsdDpzdD1aKGUsUShlLG90LFUpLHN0LGEsbysxKX11dCs9c3QsQz0wLFA9MCxBPTAsQj0wLFU9MCxTPTAsb3Q9IiIsc3Q9IiIsYj1pLmNoYXJDb2RlQXQoKytPKTticmVhaztjYXNlIDEyNTpjYXNlIDU5OmlmKChxPShvdD0oQj4wP290LnJlcGxhY2UociwiIik6b3QpLnRyaW0oKSkubGVuZ3RoKT4xKXN3aXRjaCgwPT09QSYmKDQ1PT09KHY9b3QuY2hhckNvZGVBdCgwKSl8fHY+OTYmJnY8MTIzKSYmKHE9KG90PW90LnJlcGxhY2UoIiAiLCI6IikpLmxlbmd0aCksJD4wJiZ2b2lkIDAhPT0oYz1udCgxLG90LGUsdCxELE4sY3QubGVuZ3RoLGEsbyxhKSkmJjA9PT0ocT0ob3Q9Yy50cmltKCkpLmxlbmd0aCkmJihvdD0iXDBcMCIpLHY9b3QuY2hhckNvZGVBdCgwKSxtPW90LmNoYXJDb2RlQXQoMSksdil7Y2FzZSAwOmJyZWFrO2Nhc2UgNjQ6aWYoMTA1PT09bXx8OTk9PT1tKXtsdCs9b3QraS5jaGFyQXQoTyk7YnJlYWt9ZGVmYXVsdDppZig1OD09PW90LmNoYXJDb2RlQXQocS0xKSlicmVhaztjdCs9SihvdCx2LG0sb3QuY2hhckNvZGVBdCgyKSl9Qz0wLFA9MCxBPTAsQj0wLFU9MCxvdD0iIixiPWkuY2hhckNvZGVBdCgrK08pfX1zd2l0Y2goYil7Y2FzZSAxMzpjYXNlIDEwOmlmKGgrZCtmK2wraj09PTApc3dpdGNoKEUpe2Nhc2UgNDE6Y2FzZSAzOTpjYXNlIDM0OmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NzpjYXNlIDQ1OmNhc2UgNTg6Y2FzZSA0NDpjYXNlIDU5OmNhc2UgMTIzOmNhc2UgMTI1OmJyZWFrO2RlZmF1bHQ6QT4wJiYoUD0xKX00Nz09PWg/aD0wOkkrQz09PTAmJjEwNyE9PWEmJm90Lmxlbmd0aD4wJiYoQj0xLG90Kz0iXDAiKSwkKlc+MCYmbnQoMCxvdCxlLHQsRCxOLGN0Lmxlbmd0aCxhLG8sYSksTj0xLEQrKzticmVhaztjYXNlIDU5OmNhc2UgMTI1OmlmKGgrZCtmK2w9PT0wKXtOKys7YnJlYWt9ZGVmYXVsdDpzd2l0Y2goTisrLGF0PWkuY2hhckF0KE8pLGIpe2Nhc2UgOTpjYXNlIDMyOmlmKGQrbCtoPT09MClzd2l0Y2goeCl7Y2FzZSA0NDpjYXNlIDU4OmNhc2UgOTpjYXNlIDMyOmF0PSIiO2JyZWFrO2RlZmF1bHQ6MzIhPT1iJiYoYXQ9IiAiKX1icmVhaztjYXNlIDA6YXQ9IlxcMCI7YnJlYWs7Y2FzZSAxMjphdD0iXFxmIjticmVhaztjYXNlIDExOmF0PSJcXHYiO2JyZWFrO2Nhc2UgMzg6ZCtoK2w9PT0wJiZJPjAmJihVPTEsQj0xLGF0PSJcZiIrYXQpO2JyZWFrO2Nhc2UgMTA4OmlmKGQraCtsK0w9PT0wJiZBPjApc3dpdGNoKE8tQSl7Y2FzZSAyOjExMj09PXgmJjU4PT09aS5jaGFyQ29kZUF0KE8tMykmJihMPXgpO2Nhc2UgODoxMTE9PT1rJiYoTD1rKX1icmVhaztjYXNlIDU4OmQraCtsPT09MCYmKEE9Tyk7YnJlYWs7Y2FzZSA0NDpoK2YrZCtsPT09MCYmKEI9MSxhdCs9IlxyIik7YnJlYWs7Y2FzZSAzNDpjYXNlIDM5OjA9PT1oJiYoZD1kPT09Yj8wOjA9PT1kP2I6ZCk7YnJlYWs7Y2FzZSA5MTpkK2grZj09PTAmJmwrKzticmVhaztjYXNlIDkzOmQraCtmPT09MCYmbC0tO2JyZWFrO2Nhc2UgNDE6ZCtoK2w9PT0wJiZmLS07YnJlYWs7Y2FzZSA0MDppZihkK2grbD09PTApe2lmKDA9PT1DKXN3aXRjaCgyKngrMyprKXtjYXNlIDUzMzpicmVhaztkZWZhdWx0OlQ9MCxDPTF9ZisrfWJyZWFrO2Nhc2UgNjQ6aCtmK2QrbCtBK1M9PT0wJiYoUz0xKTticmVhaztjYXNlIDQyOmNhc2UgNDc6aWYoZCtsK2Y+MClicmVhaztzd2l0Y2goaCl7Y2FzZSAwOnN3aXRjaCgyKmIrMyppLmNoYXJDb2RlQXQoTysxKSl7Y2FzZSAyMzU6aD00NzticmVhaztjYXNlIDIyMDpxPU8saD00Mn1icmVhaztjYXNlIDQyOjQ3PT09YiYmNDI9PT14JiZxKzIhPT1PJiYoMzM9PT1pLmNoYXJDb2RlQXQocSsyKSYmKGN0Kz1pLnN1YnN0cmluZyhxLE8rMSkpLGF0PSIiLGg9MCl9fWlmKDA9PT1oKXtpZihJK2QrbCtTPT09MCYmMTA3IT09YSYmNTkhPT1iKXN3aXRjaChiKXtjYXNlIDQ0OmNhc2UgMTI2OmNhc2UgNjI6Y2FzZSA0MzpjYXNlIDQxOmNhc2UgNDA6aWYoMD09PUMpe3N3aXRjaCh4KXtjYXNlIDk6Y2FzZSAzMjpjYXNlIDEwOmNhc2UgMTM6YXQrPSJcMCI7YnJlYWs7ZGVmYXVsdDphdD0iXDAiK2F0Kyg0ND09PWI/IiI6IlwwIil9Qj0xfWVsc2Ugc3dpdGNoKGIpe2Nhc2UgNDA6QSs3PT09TyYmMTA4PT09eCYmKEE9MCksQz0rK1Q7YnJlYWs7Y2FzZSA0MTowPT0oQz0tLVQpJiYoQj0xLGF0Kz0iXDAiKX1icmVhaztjYXNlIDk6Y2FzZSAzMjpzd2l0Y2goeCl7Y2FzZSAwOmNhc2UgMTIzOmNhc2UgMTI1OmNhc2UgNTk6Y2FzZSA0NDpjYXNlIDEyOmNhc2UgOTpjYXNlIDMyOmNhc2UgMTA6Y2FzZSAxMzpicmVhaztkZWZhdWx0OjA9PT1DJiYoQj0xLGF0Kz0iXDAiKX19b3QrPWF0LDMyIT09YiYmOSE9PWImJihFPWIpfX1rPXgseD1iLE8rK31pZihxPWN0Lmxlbmd0aCxZPjAmJjA9PT1xJiYwPT09dXQubGVuZ3RoJiYwPT09ZVswXS5sZW5ndGg9PTAmJigxMDkhPT1hfHwxPT09ZS5sZW5ndGgmJihJPjA/RzpYKT09PWVbMF0pJiYocT1lLmpvaW4oIiwiKS5sZW5ndGgrMikscT4wKXtpZihzPTA9PT1JJiYxMDchPT1hP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLGk9MCxhPXQubGVuZ3RoLG89QXJyYXkoYSk7aTxhOysraSl7Zm9yKHZhciBzPXRbaV0uc3BsaXQodSksYz0iIixsPTAsaD0wLGY9MCxkPTAscD1zLmxlbmd0aDtsPHA7KytsKWlmKCEoMD09PShoPShuPXNbbF0pLmxlbmd0aCkmJnA+MSkpe2lmKGY9Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTEpLGQ9bi5jaGFyQ29kZUF0KDApLGU9IiIsMCE9PWwpc3dpdGNoKGYpe2Nhc2UgNDI6Y2FzZSAxMjY6Y2FzZSA2MjpjYXNlIDQzOmNhc2UgMzI6Y2FzZSA0MDpicmVhaztkZWZhdWx0OmU9IiAifXN3aXRjaChkKXtjYXNlIDM4Om49ZStHO2Nhc2UgMTI2OmNhc2UgNjI6Y2FzZSA0MzpjYXNlIDMyOmNhc2UgNDE6Y2FzZSA0MDpicmVhaztjYXNlIDkxOm49ZStuK0c7YnJlYWs7Y2FzZSA1ODpzd2l0Y2goMipuLmNoYXJDb2RlQXQoMSkrMypuLmNoYXJDb2RlQXQoMikpe2Nhc2UgNTMwOmlmKEY+MCl7bj1lK24uc3Vic3RyaW5nKDgsaC0xKTticmVha31kZWZhdWx0OihsPDF8fHNbbC0xXS5sZW5ndGg8MSkmJihuPWUrRytuKX1icmVhaztjYXNlIDQ0OmU9IiI7ZGVmYXVsdDpuPWg+MSYmbi5pbmRleE9mKCI6Iik+MD9lK24ucmVwbGFjZShfLCIkMSIrRysiJDIiKTplK24rR31jKz1ufW9baV09Yy5yZXBsYWNlKHIsIiIpLnRyaW0oKX1yZXR1cm4gb30oZSk6ZSwkPjAmJnZvaWQgMCE9PShjPW50KDIsY3Qscyx0LEQsTixxLGEsbyxhKSkmJjA9PT0oY3Q9YykubGVuZ3RoKXJldHVybiBsdCtjdCt1dDtpZihjdD1zLmpvaW4oIiwiKSsieyIrY3QrIn0iLFIqTCE9MCl7c3dpdGNoKDIhPT1SfHx0dChjdCwyKXx8KEw9MCksTCl7Y2FzZSAxMTE6Y3Q9Y3QucmVwbGFjZShnLCI6LW1vei0kMSIpK2N0O2JyZWFrO2Nhc2UgMTEyOmN0PWN0LnJlcGxhY2UoeSwiOjotd2Via2l0LWlucHV0LSQxIikrY3QucmVwbGFjZSh5LCI6Oi1tb3otJDEiKStjdC5yZXBsYWNlKHksIjotbXMtaW5wdXQtJDEiKStjdH1MPTB9fXJldHVybiBsdCtjdCt1dH1mdW5jdGlvbiBRKHQsZSxuKXt2YXIgcj1lLnRyaW0oKS5zcGxpdChsKSxpPXIsYT1yLmxlbmd0aCxvPXQubGVuZ3RoO3N3aXRjaChvKXtjYXNlIDA6Y2FzZSAxOmZvcih2YXIgcz0wLGM9MD09PW8/IiI6dFswXSsiICI7czxhOysrcylpW3NdPUsoYyxpW3NdLG4sbykudHJpbSgpO2JyZWFrO2RlZmF1bHQ6cz0wO3ZhciB1PTA7Zm9yKGk9W107czxhOysrcylmb3IodmFyIGg9MDtoPG87KytoKWlbdSsrXT1LKHRbaF0rIiAiLHJbc10sbixvKS50cmltKCl9cmV0dXJuIGl9ZnVuY3Rpb24gSyh0LGUsbixyKXt2YXIgaT1lLGE9aS5jaGFyQ29kZUF0KDApO3N3aXRjaChhPDMzJiYoYT0oaT1pLnRyaW0oKSkuY2hhckNvZGVBdCgwKSksYSl7Y2FzZSAzODpzd2l0Y2goSStyKXtjYXNlIDA6Y2FzZSAxOmlmKDA9PT10LnRyaW0oKS5sZW5ndGgpYnJlYWs7ZGVmYXVsdDpyZXR1cm4gaS5yZXBsYWNlKGgsIiQxIit0LnRyaW0oKSl9YnJlYWs7Y2FzZSA1ODpzd2l0Y2goaS5jaGFyQ29kZUF0KDEpKXtjYXNlIDEwMzppZihGPjAmJkk+MClyZXR1cm4gaS5yZXBsYWNlKGYsIiQxIikucmVwbGFjZShoLCIkMSIrWCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdC50cmltKCkraS5yZXBsYWNlKGgsIiQxIit0LnRyaW0oKSl9ZGVmYXVsdDppZihuKkk+MCYmaS5pbmRleE9mKCJcZiIpPjApcmV0dXJuIGkucmVwbGFjZShoLCg1OD09PXQuY2hhckNvZGVBdCgwKT8iIjoiJDEiKSt0LnRyaW0oKSl9cmV0dXJuIHQraX1mdW5jdGlvbiBKKHQsZSxuLHIpe3ZhciB1LGw9MCxoPXQrIjsiLGY9MiplKzMqbis0KnI7aWYoOTQ0PT09ZilyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LmluZGV4T2YoIjoiLDkpKzEscj10LnN1YnN0cmluZygwLG4pLnRyaW0oKSxpPXQuc3Vic3RyaW5nKG4sZS0xKS50cmltKCk7c3dpdGNoKHQuY2hhckNvZGVBdCg5KSpWKXtjYXNlIDA6YnJlYWs7Y2FzZSA0NTppZigxMTAhPT10LmNoYXJDb2RlQXQoMTApKWJyZWFrO2RlZmF1bHQ6dmFyIGE9aS5zcGxpdCgoaT0iIixzKSksbz0wO2ZvcihuPTAsZT1hLmxlbmd0aDtvPGU7bj0wLCsrbyl7Zm9yKHZhciB1PWFbb10sbD11LnNwbGl0KGMpO3U9bFtuXTspe3ZhciBoPXUuY2hhckNvZGVBdCgwKTtpZigxPT09ViYmKGg+NjQmJmg8OTB8fGg+OTYmJmg8MTIzfHw5NT09PWh8fDQ1PT09aCYmNDUhPT11LmNoYXJDb2RlQXQoMSkpKXN3aXRjaChpc05hTihwYXJzZUZsb2F0KHUpKSsoLTEhPT11LmluZGV4T2YoIigiKSkpe2Nhc2UgMTpzd2l0Y2godSl7Y2FzZSJpbmZpbml0ZSI6Y2FzZSJhbHRlcm5hdGUiOmNhc2UiYmFja3dhcmRzIjpjYXNlInJ1bm5pbmciOmNhc2Uibm9ybWFsIjpjYXNlImZvcndhcmRzIjpjYXNlImJvdGgiOmNhc2Uibm9uZSI6Y2FzZSJsaW5lYXIiOmNhc2UiZWFzZSI6Y2FzZSJlYXNlLWluIjpjYXNlImVhc2Utb3V0IjpjYXNlImVhc2UtaW4tb3V0IjpjYXNlInBhdXNlZCI6Y2FzZSJyZXZlcnNlIjpjYXNlImFsdGVybmF0ZS1yZXZlcnNlIjpjYXNlImluaGVyaXQiOmNhc2UiaW5pdGlhbCI6Y2FzZSJ1bnNldCI6Y2FzZSJzdGVwLXN0YXJ0IjpjYXNlInN0ZXAtZW5kIjpicmVhaztkZWZhdWx0OnUrPUh9fWxbbisrXT11fWkrPSgwPT09bz8iIjoiLCIpK2wuam9pbigiICIpfX1yZXR1cm4gaT1yK2krIjsiLDE9PT1SfHwyPT09UiYmdHQoaSwxKT9NK2kraTppfShoKTtpZigwPT09Unx8Mj09PVImJiF0dChoLDEpKXJldHVybiBoO3N3aXRjaChmKXtjYXNlIDEwMTU6cmV0dXJuIDk3PT09aC5jaGFyQ29kZUF0KDEwKT9NK2graDpoO2Nhc2UgOTUxOnJldHVybiAxMTY9PT1oLmNoYXJDb2RlQXQoMyk/TStoK2g6aDtjYXNlIDk2MzpyZXR1cm4gMTEwPT09aC5jaGFyQ29kZUF0KDUpP00raCtoOmg7Y2FzZSAxMDA5OmlmKDEwMCE9PWguY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDk2OTpjYXNlIDk0MjpyZXR1cm4gTStoK2g7Y2FzZSA5Nzg6cmV0dXJuIE0raCtPK2graDtjYXNlIDEwMTk6Y2FzZSA5ODM6cmV0dXJuIE0raCtPK2grQitoK2g7Y2FzZSA4ODM6cmV0dXJuIDQ1PT09aC5jaGFyQ29kZUF0KDgpP00raCtoOmguaW5kZXhPZigiaW1hZ2Utc2V0KCIsMTEpPjA/aC5yZXBsYWNlKEEsIiQxLXdlYmtpdC0kMiIpK2g6aDtjYXNlIDkzMjppZig0NT09PWguY2hhckNvZGVBdCg0KSlzd2l0Y2goaC5jaGFyQ29kZUF0KDUpKXtjYXNlIDEwMzpyZXR1cm4gTSsiYm94LSIraC5yZXBsYWNlKCItZ3JvdyIsIiIpK00raCtCK2gucmVwbGFjZSgiZ3JvdyIsInBvc2l0aXZlIikraDtjYXNlIDExNTpyZXR1cm4gTStoK0IraC5yZXBsYWNlKCJzaHJpbmsiLCJuZWdhdGl2ZSIpK2g7Y2FzZSA5ODpyZXR1cm4gTStoK0IraC5yZXBsYWNlKCJiYXNpcyIsInByZWZlcnJlZC1zaXplIikraH1yZXR1cm4gTStoK0IraCtoO2Nhc2UgOTY0OnJldHVybiBNK2grQisiZmxleC0iK2graDtjYXNlIDEwMjM6aWYoOTkhPT1oLmNoYXJDb2RlQXQoOCkpYnJlYWs7cmV0dXJuIHU9aC5zdWJzdHJpbmcoaC5pbmRleE9mKCI6IiwxNSkpLnJlcGxhY2UoImZsZXgtIiwiIikucmVwbGFjZSgic3BhY2UtYmV0d2VlbiIsImp1c3RpZnkiKSxNKyJib3gtcGFjayIrdStNK2grQisiZmxleC1wYWNrIit1K2g7Y2FzZSAxMDA1OnJldHVybiBhLnRlc3QoaCk/aC5yZXBsYWNlKGksIjoiK00pK2gucmVwbGFjZShpLCI6IitPKStoOmg7Y2FzZSAxZTM6c3dpdGNoKGw9KHU9aC5zdWJzdHJpbmcoMTMpLnRyaW0oKSkuaW5kZXhPZigiLSIpKzEsdS5jaGFyQ29kZUF0KDApK3UuY2hhckNvZGVBdChsKSl7Y2FzZSAyMjY6dT1oLnJlcGxhY2UoaywidGIiKTticmVhaztjYXNlIDIzMjp1PWgucmVwbGFjZShrLCJ0Yi1ybCIpO2JyZWFrO2Nhc2UgMjIwOnU9aC5yZXBsYWNlKGssImxyIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaH1yZXR1cm4gTStoK0IrdStoO2Nhc2UgMTAxNzppZigtMT09PWguaW5kZXhPZigic3RpY2t5Iiw5KSlyZXR1cm4gaDtjYXNlIDk3NTpzd2l0Y2gobD0oaD10KS5sZW5ndGgtMTAsZj0odT0oMzM9PT1oLmNoYXJDb2RlQXQobCk/aC5zdWJzdHJpbmcoMCxsKTpoKS5zdWJzdHJpbmcodC5pbmRleE9mKCI6Iiw3KSsxKS50cmltKCkpLmNoYXJDb2RlQXQoMCkrKDB8dS5jaGFyQ29kZUF0KDcpKSl7Y2FzZSAyMDM6aWYodS5jaGFyQ29kZUF0KDgpPDExMSlicmVhaztjYXNlIDExNTpoPWgucmVwbGFjZSh1LE0rdSkrIjsiK2g7YnJlYWs7Y2FzZSAyMDc6Y2FzZSAxMDI6aD1oLnJlcGxhY2UodSxNKyhmPjEwMj8iaW5saW5lLSI6IiIpKyJib3giKSsiOyIraC5yZXBsYWNlKHUsTSt1KSsiOyIraC5yZXBsYWNlKHUsQit1KyJib3giKSsiOyIraH1yZXR1cm4gaCsiOyI7Y2FzZSA5Mzg6aWYoNDU9PT1oLmNoYXJDb2RlQXQoNSkpc3dpdGNoKGguY2hhckNvZGVBdCg2KSl7Y2FzZSAxMDU6cmV0dXJuIHU9aC5yZXBsYWNlKCItaXRlbXMiLCIiKSxNK2grTSsiYm94LSIrdStCKyJmbGV4LSIrdStoO2Nhc2UgMTE1OnJldHVybiBNK2grQisiZmxleC1pdGVtLSIraC5yZXBsYWNlKFQsIiIpK2g7ZGVmYXVsdDpyZXR1cm4gTStoK0IrImZsZXgtbGluZS1wYWNrIitoLnJlcGxhY2UoImFsaWduLWNvbnRlbnQiLCIiKS5yZXBsYWNlKFQsIiIpK2h9YnJlYWs7Y2FzZSA5NzM6Y2FzZSA5ODk6aWYoNDUhPT1oLmNoYXJDb2RlQXQoMyl8fDEyMj09PWguY2hhckNvZGVBdCg0KSlicmVhaztjYXNlIDkzMTpjYXNlIDk1MzppZighMD09PVMudGVzdCh0KSlyZXR1cm4gMTE1PT09KHU9dC5zdWJzdHJpbmcodC5pbmRleE9mKCI6IikrMSkpLmNoYXJDb2RlQXQoMCk/Sih0LnJlcGxhY2UoInN0cmV0Y2giLCJmaWxsLWF2YWlsYWJsZSIpLGUsbixyKS5yZXBsYWNlKCI6ZmlsbC1hdmFpbGFibGUiLCI6c3RyZXRjaCIpOmgucmVwbGFjZSh1LE0rdSkraC5yZXBsYWNlKHUsTyt1LnJlcGxhY2UoImZpbGwtIiwiIikpK2g7YnJlYWs7Y2FzZSA5NjI6aWYoaD1NK2grKDEwMj09PWguY2hhckNvZGVBdCg1KT9CK2g6IiIpK2gsbityPT09MjExJiYxMDU9PT1oLmNoYXJDb2RlQXQoMTMpJiZoLmluZGV4T2YoInRyYW5zZm9ybSIsMTApPjApcmV0dXJuIGguc3Vic3RyaW5nKDAsaC5pbmRleE9mKCI7IiwyNykrMSkucmVwbGFjZShvLCIkMS13ZWJraXQtJDIiKStofXJldHVybiBofWZ1bmN0aW9uIHR0KHQsZSl7dmFyIG49dC5pbmRleE9mKDE9PT1lPyI6IjoieyIpLHI9dC5zdWJzdHJpbmcoMCwzIT09ZT9uOjEwKSxpPXQuc3Vic3RyaW5nKG4rMSx0Lmxlbmd0aC0xKTtyZXR1cm4gcSgyIT09ZT9yOnIucmVwbGFjZShDLCIkMSIpLGksZSl9ZnVuY3Rpb24gZXQodCxlKXt2YXIgbj1KKGUsZS5jaGFyQ29kZUF0KDApLGUuY2hhckNvZGVBdCgxKSxlLmNoYXJDb2RlQXQoMikpO3JldHVybiBuIT09ZSsiOyI/bi5yZXBsYWNlKEUsIiBvciAoJDEpIikuc3Vic3RyaW5nKDQpOiIoIitlKyIpIn1mdW5jdGlvbiBudCh0LGUsbixyLGksYSxvLHMsYyx1KXtmb3IodmFyIGwsaD0wLGY9ZTtoPCQ7KytoKXN3aXRjaChsPVVbaF0uY2FsbChhdCx0LGYsbixyLGksYSxvLHMsYyx1KSl7Y2FzZSB2b2lkIDA6Y2FzZSExOmNhc2UhMDpjYXNlIG51bGw6YnJlYWs7ZGVmYXVsdDpmPWx9aWYoZiE9PWUpcmV0dXJuIGZ9ZnVuY3Rpb24gcnQodCxlLG4scil7Zm9yKHZhciBpPWUrMTtpPG47KytpKXN3aXRjaChyLmNoYXJDb2RlQXQoaSkpe2Nhc2UgNDc6aWYoNDI9PT10JiY0Mj09PXIuY2hhckNvZGVBdChpLTEpJiZlKzIhPT1pKXJldHVybiBpKzE7YnJlYWs7Y2FzZSAxMDppZig0Nz09PXQpcmV0dXJuIGkrMX1yZXR1cm4gaX1mdW5jdGlvbiBpdCh0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG49dFtlXTtzd2l0Y2goZSl7Y2FzZSJrZXlmcmFtZSI6Vj0wfG47YnJlYWs7Y2FzZSJnbG9iYWwiOkY9MHxuO2JyZWFrO2Nhc2UiY2FzY2FkZSI6ST0wfG47YnJlYWs7Y2FzZSJjb21wcmVzcyI6UD0wfG47YnJlYWs7Y2FzZSJzZW1pY29sb24iOmo9MHxuO2JyZWFrO2Nhc2UicHJlc2VydmUiOlk9MHxuO2JyZWFrO2Nhc2UicHJlZml4IjpxPW51bGwsbj8iZnVuY3Rpb24iIT10eXBlb2Ygbj9SPTE6KFI9MixxPW4pOlI9MH19cmV0dXJuIGl0fWZ1bmN0aW9uIGF0KGUsbil7aWYodm9pZCAwIT09dGhpcyYmdGhpcy5jb25zdHJ1Y3Rvcj09PWF0KXJldHVybiB0KGUpO3ZhciBpPWUsYT1pLmNoYXJDb2RlQXQoMCk7YTwzMyYmKGE9KGk9aS50cmltKCkpLmNoYXJDb2RlQXQoMCkpLFY+MCYmKEg9aS5yZXBsYWNlKGQsOTE9PT1hPyIiOiItIikpLGE9MSwxPT09ST9YPWk6Rz1pO3ZhciBvLHM9W1hdOyQ+MCYmdm9pZCAwIT09KG89bnQoLTEsbixzLHMsRCxOLDAsMCwwLDApKSYmInN0cmluZyI9PXR5cGVvZiBvJiYobj1vKTt2YXIgYz1aKHoscyxuLDAsMCk7cmV0dXJuICQ+MCYmdm9pZCAwIT09KG89bnQoLTIsYyxzLHMsRCxOLGMubGVuZ3RoLDAsMCwwKSkmJiJzdHJpbmciIT10eXBlb2YoYz1vKSYmKGE9MCksSD0iIixYPSIiLEc9IiIsTD0wLEQ9MSxOPTEsUCphPT0wP2M6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShyLCIiKS5yZXBsYWNlKHYsIiIpLnJlcGxhY2UobSwiJDEiKS5yZXBsYWNlKGIsIiQxIikucmVwbGFjZSh4LCIgIil9KGMpfXJldHVybiBhdC51c2U9ZnVuY3Rpb24gdChlKXtzd2l0Y2goZSl7Y2FzZSB2b2lkIDA6Y2FzZSBudWxsOiQ9VS5sZW5ndGg9MDticmVhaztkZWZhdWx0OmlmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKVVbJCsrXT1lO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBlKWZvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyOysrbil0KGVbbl0pO2Vsc2UgVz0wfCEhZX1yZXR1cm4gdH0sYXQuc2V0PWl0LHZvaWQgMCE9PWUmJml0KGUpLGF0fShudWxsKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnRlcnNlY3QoZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDUyKTtlLmhleD1yLmRlZmF1bHQ7dmFyIGk9big1Mik7ZS5yZ2I9aS5kZWZhdWx0O3ZhciBhPW4oNTIpO2UucmdiYT1hLmRlZmF1bHQ7dmFyIG89bigxMDApO2UuaHNsPW8uZGVmYXVsdDt2YXIgcz1uKDEwMCk7ZS5oc2xhPXMuZGVmYXVsdDt2YXIgYz1uKDI5KTtlLmNoYW5uZWw9Yy5kZWZhdWx0O3ZhciB1PW4oMTgyKTtlLnJlZD11LmRlZmF1bHQ7dmFyIGw9bigxODMpO2UuZ3JlZW49bC5kZWZhdWx0O3ZhciBoPW4oMTg0KTtlLmJsdWU9aC5kZWZhdWx0O3ZhciBmPW4oMTg1KTtlLmh1ZT1mLmRlZmF1bHQ7dmFyIGQ9bigxODYpO2Uuc2F0dXJhdGlvbj1kLmRlZmF1bHQ7dmFyIHA9bigxODcpO2UubGlnaHRuZXNzPXAuZGVmYXVsdDt2YXIgeT1uKDEwMSk7ZS5hbHBoYT15LmRlZmF1bHQ7dmFyIGc9bigxMDEpO2Uub3BhY2l0eT1nLmRlZmF1bHQ7dmFyIHY9bigxMDIpO2UubHVtaW5hbmNlPXYuZGVmYXVsdDt2YXIgbT1uKDE4OCk7ZS5pc0Rhcms9bS5kZWZhdWx0O3ZhciBiPW4oMTAzKTtlLmlzTGlnaHQ9Yi5kZWZhdWx0O3ZhciB4PW4oMTg5KTtlLmlzVmFsaWQ9eC5kZWZhdWx0O3ZhciBfPW4oMTkwKTtlLnNhdHVyYXRlPV8uZGVmYXVsdDt2YXIgaz1uKDE5MSk7ZS5kZXNhdHVyYXRlPWsuZGVmYXVsdDt2YXIgdz1uKDE5Mik7ZS5saWdodGVuPXcuZGVmYXVsdDt2YXIgRT1uKDE5Myk7ZS5kYXJrZW49RS5kZWZhdWx0O3ZhciBUPW4oMTA0KTtlLm9wYWNpZnk9VC5kZWZhdWx0O3ZhciBDPW4oMTA0KTtlLmZhZGVJbj1DLmRlZmF1bHQ7dmFyIFM9bigxMDUpO2UudHJhbnNwYXJlbnRpemU9Uy5kZWZhdWx0O3ZhciBBPW4oMTA1KTtlLmZhZGVPdXQ9QS5kZWZhdWx0O3ZhciBNPW4oMTk0KTtlLmNvbXBsZW1lbnQ9TS5kZWZhdWx0O3ZhciBPPW4oMTk1KTtlLmdyYXlzY2FsZT1PLmRlZmF1bHQ7dmFyIEI9bigxMDYpO2UuYWRqdXN0PUIuZGVmYXVsdDt2YXIgTj1uKDUzKTtlLmNoYW5nZT1OLmRlZmF1bHQ7dmFyIEQ9bigxOTYpO2UuaW52ZXJ0PUQuZGVmYXVsdDt2YXIgTD1uKDEwNyk7ZS5taXg9TC5kZWZhdWx0O3ZhciBJPW4oMTk3KTtlLnNjYWxlPUkuZGVmYXVsdH0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e21pbjp7cjowLGc6MCxiOjAsczowLGw6MCxhOjB9LG1heDp7cjoyNTUsZzoyNTUsYjoyNTUsaDozNjAsczoxMDAsbDoxMDAsYToxfSxjbGFtcDp7cjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxnOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0saDpmdW5jdGlvbih0KXtyZXR1cm4gdCUzNjB9LHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwMD8xMDA6dDwwPzA6dH0sbDpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xPzE6dDwwPzA6dH19LHRvTGluZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXQvMjU1O3JldHVybiB0Pi4wMzkyOD9NYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpOmUvMTIuOTJ9LGh1ZTJyZ2I6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPDAmJihuKz0xKSxuPjEmJihuLT0xKSxuPDEvNj90KzYqKGUtdCkqbjpuPC41P2U6bjwyLzM/dCsoZS10KSooMi8zLW4pKjY6dH0saHNsMnJnYjpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaCxpPXQucyxhPXQubDtpZigxMDA9PT1pKXJldHVybiAyLjU1KmE7bi89MzYwLGkvPTEwMDt2YXIgbz0oYS89MTAwKTwuNT9hKigxK2kpOmEraS1hKmkscz0yKmEtbztzd2l0Y2goZSl7Y2FzZSJyIjpyZXR1cm4gMjU1KnIuaHVlMnJnYihzLG8sbisxLzMpO2Nhc2UiZyI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4pO2Nhc2UiYiI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4tMS8zKX19LHJnYjJoc2w6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnIscj10LmcsaT10LmI7bi89MjU1LHIvPTI1NSxpLz0yNTU7dmFyIGE9TWF0aC5tYXgobixyLGkpLG89TWF0aC5taW4obixyLGkpLHM9KGErbykvMjtpZigibCI9PT1lKXJldHVybiAxMDAqcztpZihhPT09bylyZXR1cm4gMDt2YXIgYz1hLW87aWYoInMiPT09ZSlyZXR1cm4gMTAwKihzPi41P2MvKDItYS1vKTpjLyhhK28pKTtzd2l0Y2goYSl7Y2FzZSBuOnJldHVybiA2MCooKHItaSkvYysocjxpPzY6MCkpO2Nhc2UgcjpyZXR1cm4gNjAqKChpLW4pL2MrMik7Y2FzZSBpOnJldHVybiA2MCooKG4tcikvYys0KTtkZWZhdWx0OnJldHVybi0xfX19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17cm91bmQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoMWUxMCp0KS8xZTEwfX07ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPXtmcmFjMmhleDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKDI1NSp0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZToiMCIrZX0sZGVjMmhleDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gZS5sZW5ndGg+MT9lOiIwIitlfX07ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9big3NiksYT1uKDE3Nyksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZT1uZXcgYS5kZWZhdWx0fXJldHVybiB0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jb2xvcj1lLHRoaXMuY2hhbmdlZD0hMSx0aGlzLmRhdGE9dCx0aGlzLnR5cGUudHlwZT1pLlRZUEUuQUxMLHRoaXN9LHQucHJvdG90eXBlLl9lbnN1cmVIU0w9ZnVuY3Rpb24oKXt2b2lkIDA9PT10aGlzLmRhdGEuaCYmKHRoaXMuZGF0YS5oPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJoIikpLHZvaWQgMD09PXRoaXMuZGF0YS5zJiYodGhpcy5kYXRhLnM9ci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsInMiKSksdm9pZCAwPT09dGhpcy5kYXRhLmwmJih0aGlzLmRhdGEubD1yLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwibCIpKX0sdC5wcm90b3R5cGUuX2Vuc3VyZVJHQj1mdW5jdGlvbigpe3ZvaWQgMD09PXRoaXMuZGF0YS5yJiYodGhpcy5kYXRhLnI9ci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsInIiKSksdm9pZCAwPT09dGhpcy5kYXRhLmcmJih0aGlzLmRhdGEuZz1yLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiZyIpKSx2b2lkIDA9PT10aGlzLmRhdGEuYiYmKHRoaXMuZGF0YS5iPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJiIikpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5IU0wpfHx2b2lkIDA9PT10aGlzLmRhdGEucj8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0aGlzLmRhdGEsInIiKSk6dGhpcy5kYXRhLnJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5SR0IpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucj10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLkhTTCl8fHZvaWQgMD09PXRoaXMuZGF0YS5nPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHRoaXMuZGF0YSwiZyIpKTp0aGlzLmRhdGEuZ30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLlJHQiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5nPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJiIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuSFNMKXx8dm9pZCAwPT09dGhpcy5kYXRhLmI/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodGhpcy5kYXRhLCJiIikpOnRoaXMuZGF0YS5ifSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuUkdCKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmI9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImgiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlLmlzKGkuVFlQRS5SR0IpfHx2b2lkIDA9PT10aGlzLmRhdGEuaD8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0aGlzLmRhdGEsImgiKSk6dGhpcy5kYXRhLmh9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KGkuVFlQRS5IU0wpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuaD10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwicyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGUuaXMoaS5UWVBFLlJHQil8fHZvaWQgMD09PXRoaXMuZGF0YS5zPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHRoaXMuZGF0YSwicyIpKTp0aGlzLmRhdGEuc30sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoaS5UWVBFLkhTTCksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5zPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZS5pcyhpLlRZUEUuUkdCKXx8dm9pZCAwPT09dGhpcy5kYXRhLmw/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodGhpcy5kYXRhLCJsIikpOnRoaXMuZGF0YS5sfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldChpLlRZUEUuSFNMKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmw9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmF9LHNldDpmdW5jdGlvbih0KXt0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmE9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0fSgpO2UuZGVmYXVsdD1vfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDc2KSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3RoaXMudHlwZT1yLlRZUEUuQUxMfXJldHVybiB0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy50eXBlJiZ0aGlzLnR5cGUhPT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNoYW5nZSBib3RoIFJHQiBhbmQgSFNMIGNoYW5uZWxzIGF0IHRoZSBzYW1lIHRpbWUiKTt0aGlzLnR5cGU9dH0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLnR5cGU9ci5UWVBFLkFMTH0sdC5wcm90b3R5cGUuaXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudHlwZT09PXR9LHR9KCk7ZS5kZWZhdWx0PWl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9e307ZS5ERUMySEVYPWk7Zm9yKHZhciBhPTA7YTw9MjU1O2ErKylpW2FdPXIuZGVmYXVsdC51bml0LmRlYzJoZXgoYSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oOTkpLGk9e2NvbG9yczp7YWxpY2VibHVlOiIjZjBmOGZmIixhbnRpcXVld2hpdGU6IiNmYWViZDciLGFxdWE6IiMwMGZmZmYiLGFxdWFtYXJpbmU6IiM3ZmZmZDQiLGF6dXJlOiIjZjBmZmZmIixiZWlnZToiI2Y1ZjVkYyIsYmlzcXVlOiIjZmZlNGM0IixibGFjazoiIzAwMDAwMCIsYmxhbmNoZWRhbG1vbmQ6IiNmZmViY2QiLGJsdWU6IiMwMDAwZmYiLGJsdWV2aW9sZXQ6IiM4YTJiZTIiLGJyb3duOiIjYTUyYTJhIixidXJseXdvb2Q6IiNkZWI4ODciLGNhZGV0Ymx1ZToiIzVmOWVhMCIsY2hhcnRyZXVzZToiIzdmZmYwMCIsY2hvY29sYXRlOiIjZDI2OTFlIixjb3JhbDoiI2ZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IiM2NDk1ZWQiLGNvcm5zaWxrOiIjZmZmOGRjIixjcmltc29uOiIjZGMxNDNjIixjeWFuYXF1YToiIzAwZmZmZiIsZGFya2JsdWU6IiMwMDAwOGIiLGRhcmtjeWFuOiIjMDA4YjhiIixkYXJrZ29sZGVucm9kOiIjYjg4NjBiIixkYXJrZ3JheToiI2E5YTlhOSIsZGFya2dyZWVuOiIjMDA2NDAwIixkYXJrZ3JleToiI2E5YTlhOSIsZGFya2toYWtpOiIjYmRiNzZiIixkYXJrbWFnZW50YToiIzhiMDA4YiIsZGFya29saXZlZ3JlZW46IiM1NTZiMmYiLGRhcmtvcmFuZ2U6IiNmZjhjMDAiLGRhcmtvcmNoaWQ6IiM5OTMyY2MiLGRhcmtyZWQ6IiM4YjAwMDAiLGRhcmtzYWxtb246IiNlOTk2N2EiLGRhcmtzZWFncmVlbjoiIzhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiIzQ4M2Q4YiIsZGFya3NsYXRlZ3JheToiIzJmNGY0ZiIsZGFya3NsYXRlZ3JleToiIzJmNGY0ZiIsZGFya3R1cnF1b2lzZToiIzAwY2VkMSIsZGFya3Zpb2xldDoiIzk0MDBkMyIsZGVlcHBpbms6IiNmZjE0OTMiLGRlZXBza3libHVlOiIjMDBiZmZmIixkaW1ncmF5OiIjNjk2OTY5IixkaW1ncmV5OiIjNjk2OTY5Iixkb2RnZXJibHVlOiIjMWU5MGZmIixmaXJlYnJpY2s6IiNiMjIyMjIiLGZsb3JhbHdoaXRlOiIjZmZmYWYwIixmb3Jlc3RncmVlbjoiIzIyOGIyMiIsZnVjaHNpYToiI2ZmMDBmZiIsZ2FpbnNib3JvOiIjZGNkY2RjIixnaG9zdHdoaXRlOiIjZjhmOGZmIixnb2xkOiIjZmZkNzAwIixnb2xkZW5yb2Q6IiNkYWE1MjAiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixncmVlbnllbGxvdzoiI2FkZmYyZiIsZ3JleToiIzgwODA4MCIsaG9uZXlkZXc6IiNmMGZmZjAiLGhvdHBpbms6IiNmZjY5YjQiLGluZGlhbnJlZDoiI2NkNWM1YyIsaW5kaWdvOiIjNGIwMDgyIixpdm9yeToiI2ZmZmZmMCIsa2hha2k6IiNmMGU2OGMiLGxhdmVuZGVyOiIjZTZlNmZhIixsYXZlbmRlcmJsdXNoOiIjZmZmMGY1IixsYXduZ3JlZW46IiM3Y2ZjMDAiLGxlbW9uY2hpZmZvbjoiI2ZmZmFjZCIsbGlnaHRibHVlOiIjYWRkOGU2IixsaWdodGNvcmFsOiIjZjA4MDgwIixsaWdodGN5YW46IiNlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiIjZmFmYWQyIixsaWdodGdyYXk6IiNkM2QzZDMiLGxpZ2h0Z3JlZW46IiM5MGVlOTAiLGxpZ2h0Z3JleToiI2QzZDNkMyIsbGlnaHRwaW5rOiIjZmZiNmMxIixsaWdodHNhbG1vbjoiI2ZmYTA3YSIsbGlnaHRzZWFncmVlbjoiIzIwYjJhYSIsbGlnaHRza3libHVlOiIjODdjZWZhIixsaWdodHNsYXRlZ3JheToiIzc3ODg5OSIsbGlnaHRzbGF0ZWdyZXk6IiM3Nzg4OTkiLGxpZ2h0c3RlZWxibHVlOiIjYjBjNGRlIixsaWdodHllbGxvdzoiI2ZmZmZlMCIsbGltZToiIzAwZmYwMCIsbGltZWdyZWVuOiIjMzJjZDMyIixsaW5lbjoiI2ZhZjBlNiIsbWFnZW50YToiI2ZmMDBmZiIsbWFyb29uOiIjODAwMDAwIixtZWRpdW1hcXVhbWFyaW5lOiIjNjZjZGFhIixtZWRpdW1ibHVlOiIjMDAwMGNkIixtZWRpdW1vcmNoaWQ6IiNiYTU1ZDMiLG1lZGl1bXB1cnBsZToiIzkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IiMzY2IzNzEiLG1lZGl1bXNsYXRlYmx1ZToiIzdiNjhlZSIsbWVkaXVtc3ByaW5nZ3JlZW46IiMwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiIzQ4ZDFjYyIsbWVkaXVtdmlvbGV0cmVkOiIjYzcxNTg1IixtaWRuaWdodGJsdWU6IiMxOTE5NzAiLG1pbnRjcmVhbToiI2Y1ZmZmYSIsbWlzdHlyb3NlOiIjZmZlNGUxIixtb2NjYXNpbjoiI2ZmZTRiNSIsbmF2YWpvd2hpdGU6IiNmZmRlYWQiLG5hdnk6IiMwMDAwODAiLG9sZGxhY2U6IiNmZGY1ZTYiLG9saXZlOiIjODA4MDAwIixvbGl2ZWRyYWI6IiM2YjhlMjMiLG9yYW5nZToiI2ZmYTUwMCIsb3JhbmdlcmVkOiIjZmY0NTAwIixvcmNoaWQ6IiNkYTcwZDYiLHBhbGVnb2xkZW5yb2Q6IiNlZWU4YWEiLHBhbGVncmVlbjoiIzk4ZmI5OCIscGFsZXR1cnF1b2lzZToiI2FmZWVlZSIscGFsZXZpb2xldHJlZDoiI2RiNzA5MyIscGFwYXlhd2hpcDoiI2ZmZWZkNSIscGVhY2hwdWZmOiIjZmZkYWI5IixwZXJ1OiIjY2Q4NTNmIixwaW5rOiIjZmZjMGNiIixwbHVtOiIjZGRhMGRkIixwb3dkZXJibHVlOiIjYjBlMGU2IixwdXJwbGU6IiM4MDAwODAiLHJlYmVjY2FwdXJwbGU6IiM2NjMzOTkiLHJlZDoiI2ZmMDAwMCIscm9zeWJyb3duOiIjYmM4ZjhmIixyb3lhbGJsdWU6IiM0MTY5ZTEiLHNhZGRsZWJyb3duOiIjOGI0NTEzIixzYWxtb246IiNmYTgwNzIiLHNhbmR5YnJvd246IiNmNGE0NjAiLHNlYWdyZWVuOiIjMmU4YjU3IixzZWFzaGVsbDoiI2ZmZjVlZSIsc2llbm5hOiIjYTA1MjJkIixzaWx2ZXI6IiNjMGMwYzAiLHNreWJsdWU6IiM4N2NlZWIiLHNsYXRlYmx1ZToiIzZhNWFjZCIsc2xhdGVncmF5OiIjNzA4MDkwIixzbGF0ZWdyZXk6IiM3MDgwOTAiLHNub3c6IiNmZmZhZmEiLHNwcmluZ2dyZWVuOiIjMDBmZjdmIix0YW46IiNkMmI0OGMiLHRlYWw6IiMwMDgwODAiLHRoaXN0bGU6IiNkOGJmZDgiLHRyYW5zcGFyZW50OiIjMDAwMDAwMDAiLHR1cnF1b2lzZToiIzQwZTBkMCIsdmlvbGV0OiIjZWU4MmVlIix3aGVhdDoiI2Y1ZGViMyIsd2hpdGU6IiNmZmZmZmYiLHdoaXRlc21va2U6IiNmNWY1ZjUiLHllbGxvdzoiI2ZmZmYwMCIseWVsbG93Z3JlZW46IiM5YWNkMzIifSxwYXJzZTpmdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTt2YXIgZT1pLmNvbG9yc1t0XTtpZihlKXJldHVybiByLmRlZmF1bHQucGFyc2UoZSl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXt2YXIgZT1yLmRlZmF1bHQuc3RyaW5naWZ5KHQpO2Zvcih2YXIgbiBpbiBpLmNvbG9ycylpZihpLmNvbG9yc1tuXT09PWUpcmV0dXJuIG59fTtlLmRlZmF1bHQ9aX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMCksaT1uKDQ2KSxhPXtyZTovXnJnYmE/XChccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkoPzpccyo/KD86LHxcLylccyo/XCs/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZVxkKyk/KCU/KSkpP1xzKj9cKSQvaSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10LmNoYXJDb2RlQXQoMCk7aWYoMTE0PT09ZXx8ODI9PT1lKXt2YXIgbj10Lm1hdGNoKGEucmUpO2lmKG4pe3ZhciBvPW5bMV0scz1uWzJdLGM9blszXSx1PW5bNF0sbD1uWzVdLGg9bls2XSxmPW5bN10sZD1uWzhdO3JldHVybiBpLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIocz8yLjU1KnBhcnNlRmxvYXQobyk6cGFyc2VGbG9hdChvKSksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKHU/Mi41NSpwYXJzZUZsb2F0KGMpOnBhcnNlRmxvYXQoYykpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihoPzIuNTUqcGFyc2VGbG9hdChsKTpwYXJzZUZsb2F0KGwpKSxhOmY/ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYShkP3BhcnNlRmxvYXQoZikvMTAwOnBhcnNlRmxvYXQoZikpOjF9LHQpfX19LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4gdC5hPDE/InJnYmEoIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LnIpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5nKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuYikrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmEpKyIpIjoicmdiKCIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5yKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuZykrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LmIpKyIpIn19O2UuZGVmYXVsdD1hfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDEwKSxpPW4oNDYpLGE9e3JlOi9eaHNsYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXHMqPyg/Oix8XHMpXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/JSlccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyglKT8pKT9ccyo/XCkkL2ksaHVlUmU6L14oLis/KShkZWd8Z3JhZHxyYWR8dHVybikkL2ksX2h1ZTJkZWc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChhLmh1ZVJlKTtpZihlKXt2YXIgbj1lWzFdO3N3aXRjaChlWzJdKXtjYXNlImdyYWQiOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKC45KnBhcnNlRmxvYXQobikpO2Nhc2UicmFkIjpyZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaCgxODAqcGFyc2VGbG9hdChuKS9NYXRoLlBJKTtjYXNlInR1cm4iOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKDM2MCpwYXJzZUZsb2F0KG4pKX19cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgocGFyc2VGbG9hdCh0KSl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKTtpZigxMDQ9PT1lfHw3Mj09PWUpe3ZhciBuPXQubWF0Y2goYS5yZSk7aWYobil7dmFyIG89blsxXSxzPW5bMl0sYz1uWzNdLHU9bls0XSxsPW5bNV07cmV0dXJuIGkuZGVmYXVsdC5zZXQoe2g6YS5faHVlMmRlZyhvKSxzOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnMocGFyc2VGbG9hdChzKSksbDpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5sKHBhcnNlRmxvYXQoYykpLGE6dT9yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKGw/cGFyc2VGbG9hdCh1KS8xMDA6cGFyc2VGbG9hdCh1KSk6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3JldHVybiB0LmE8MT8iaHNsYSgiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQuaCkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZCh0LnMpKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQubCkrIiUsICIrdC5hKyIpIjoiaHNsKCIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5oKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKHQucykrIiUsICIrci5kZWZhdWx0Lmxhbmcucm91bmQodC5sKSsiJSkifX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInIiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImciKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImIiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImgiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsInMiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImwiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTAzKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIXIuZGVmYXVsdCh0KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTYpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHIuZGVmYXVsdC5wYXJzZSh0KSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsInMiLGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJzIiwtZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImwiLGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIiwtZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdCh0LCJoIiwxODApfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1Myk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCx7czowfSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDE2KSxpPW4oMTA3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0xMDApO3ZhciBuPXIuZGVmYXVsdC5wYXJzZSh0KTtyZXR1cm4gbi5yPTI1NS1uLnIsbi5nPTI1NS1uLmcsbi5iPTI1NS1uLmIsaS5kZWZhdWx0KG4sdCxlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTApLGk9bigxNiksYT1uKDEwNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbyxzLGM9aS5kZWZhdWx0LnBhcnNlKHQpLHU9e307Zm9yKHZhciBsIGluIGUpdVtsXT0obj1jW2xdLG89ZVtsXSxzPXIuZGVmYXVsdC5jaGFubmVsLm1heFtsXSxvPjA/KHMtbikqby8xMDA6bipvLzEwMCk7cmV0dXJuIGEuZGVmYXVsdCh0LHUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPXsiLi9sb2NhbGUiOjEwOCwiLi9sb2NhbGUuanMiOjEwOH07ZnVuY3Rpb24gaSh0KXt2YXIgZT1hKHQpO3JldHVybiBuKGUpfWZ1bmN0aW9uIGEodCl7aWYoIW4ubyhyLHQpKXt2YXIgZT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIit0KyInIik7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfXJldHVybiByW3RdfWkua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhyKX0saS5yZXNvbHZlPWEsdC5leHBvcnRzPWksaS5pZD0xOTh9LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9e0dyYXBoOm4oNzcpLHZlcnNpb246bigzMDEpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCw0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KSxpPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj1yKGUsdCk7cmV0dXJuIShuPDApJiYobj09ZS5sZW5ndGgtMT9lLnBvcCgpOmkuY2FsbChlLG4sMSksLS10aGlzLnNpemUsITApfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49cihlLHQpO3JldHVybiBuPDA/dm9pZCAwOmVbbl1bMV19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMuX19kYXRhX18sdCk+LTF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXyxpPXIobix0KTtyZXR1cm4gaTwwPygrK3RoaXMuc2l6ZSxuLnB1c2goW3QsZV0pKTpuW2ldWzFdPWUsdGhpc319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyByLHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPWUuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ZS5zaXplLG59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NSksaT1uKDc4KSxhPW4oNzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187aWYobiBpbnN0YW5jZW9mIHIpe3ZhciBvPW4uX19kYXRhX187aWYoIWl8fG8ubGVuZ3RoPDE5OSlyZXR1cm4gby5wdXNoKFt0LGVdKSx0aGlzLnNpemU9KytuLnNpemUsdGhpcztuPXRoaXMuX19kYXRhX189bmV3IGEobyl9cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplPW4uc2l6ZSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpLGk9bigyMTUpLGE9bigxMyksbz1uKDExMSkscz0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxjPUZ1bmN0aW9uLnByb3RvdHlwZSx1PU9iamVjdC5wcm90b3R5cGUsbD1jLnRvU3RyaW5nLGg9dS5oYXNPd25Qcm9wZXJ0eSxmPVJlZ0V4cCgiXiIrbC5jYWxsKGgpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hKCFhKHQpfHxpKHQpKSYmKHIodCk/ZjpzKS50ZXN0KG8odCkpfX0sZnVuY3Rpb24odCxlKXt2YXIgbjtuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e249bnx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2godCl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihuPXdpbmRvdyl9dC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPU9iamVjdC5wcm90b3R5cGUsYT1pLmhhc093blByb3BlcnR5LG89aS50b1N0cmluZyxzPXI/ci50b1N0cmluZ1RhZzp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEuY2FsbCh0LHMpLG49dFtzXTt0cnl7dFtzXT12b2lkIDA7dmFyIHI9ITB9Y2F0Y2godCl7fXZhciBpPW8uY2FsbCh0KTtyZXR1cm4gciYmKGU/dFtzXT1uOmRlbGV0ZSB0W3NdKSxpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9bigyMTYpLGE9KHI9L1teLl0rJC8uZXhlYyhpJiZpLmtleXMmJmkua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK3I6IiI7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhYSYmYSBpbiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTkpWyJfX2NvcmUtanNfc2hhcmVkX18iXTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD92b2lkIDA6dFtlXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIxOSksaT1uKDU1KSxhPW4oNzgpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuc2l6ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IHIsbWFwOm5ldyhhfHxpKSxzdHJpbmc6bmV3IHJ9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjIwKSxpPW4oMjIxKSxhPW4oMjIyKSxvPW4oMjIzKSxzPW4oMjI0KTtmdW5jdGlvbiBjKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytlPG47KXt2YXIgcj10W2VdO3RoaXMuc2V0KHJbMF0sclsxXSl9fWMucHJvdG90eXBlLmNsZWFyPXIsYy5wcm90b3R5cGUuZGVsZXRlPWksYy5wcm90b3R5cGUuZ2V0PWEsYy5wcm90b3R5cGUuaGFzPW8sYy5wcm90b3R5cGUuc2V0PXMsdC5leHBvcnRzPWN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU3KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXI/cihudWxsKTp7fSx0aGlzLnNpemU9MH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaGFzKHQpJiZkZWxldGUgdGhpcy5fX2RhdGFfX1t0XTtyZXR1cm4gdGhpcy5zaXplLT1lPzE6MCxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztpZihyKXt2YXIgbj1lW3RdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PW4/dm9pZCAwOm59cmV0dXJuIGkuY2FsbChlLHQpP2VbdF06dm9pZCAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpLGk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXztyZXR1cm4gcj92b2lkIDAhPT1lW3RdOmkuY2FsbChlLHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXModCk/MDoxLG5bdF09ciYmdm9pZCAwPT09ZT8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6ZSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHRoaXMsdCkuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4ic3RyaW5nIj09ZXx8Im51bWJlciI9PWV8fCJzeW1ib2wiPT1lfHwiYm9vbGVhbiI9PWU/Il9fcHJvdG9fXyIhPT10Om51bGw9PT10fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQpLmdldCh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcyx0KS5oYXModCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49cih0aGlzLHQpLGk9bi5zaXplO3JldHVybiBuLnNldCh0LGUpLHRoaXMuc2l6ZSs9bi5zaXplPT1pPzA6MSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDcpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIoZSxpKGUpLHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1BcnJheSh0KTsrK248dDspcltuXT1lKG4pO3JldHVybiByfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBBcmd1bWVudHNdIj09cih0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDgxKSxhPW4oMjEpLG89e307b1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09b1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09b1siW29iamVjdCBJbnQ4QXJyYXldIl09b1siW29iamVjdCBJbnQxNkFycmF5XSJdPW9bIltvYmplY3QgSW50MzJBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09b1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPW9bIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsb1siW29iamVjdCBBcmd1bWVudHNdIl09b1siW29iamVjdCBBcnJheV0iXT1vWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPW9bIltvYmplY3QgQm9vbGVhbl0iXT1vWyJbb2JqZWN0IERhdGFWaWV3XSJdPW9bIltvYmplY3QgRGF0ZV0iXT1vWyJbb2JqZWN0IEVycm9yXSJdPW9bIltvYmplY3QgRnVuY3Rpb25dIl09b1siW29iamVjdCBNYXBdIl09b1siW29iamVjdCBOdW1iZXJdIl09b1siW29iamVjdCBPYmplY3RdIl09b1siW29iamVjdCBSZWdFeHBdIl09b1siW29iamVjdCBTZXRdIl09b1siW29iamVjdCBTdHJpbmddIl09b1siW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KSYmaSh0Lmxlbmd0aCkmJiEhb1tyKHQpXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExNCkoT2JqZWN0LmtleXMsT2JqZWN0KTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDcpLGk9big0MSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJnIoZSxpKGUpLHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMpLGk9big2MyksYT1uKDIzOCksbz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSlyZXR1cm4gYSh0KTt2YXIgZT1pKHQpLG49W107Zm9yKHZhciBzIGluIHQpKCJjb25zdHJ1Y3RvciIhPXN8fCFlJiZvLmNhbGwodCxzKSkmJm4ucHVzaChzKTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2lmKG51bGwhPXQpZm9yKHZhciBuIGluIE9iamVjdCh0KSllLnB1c2gobik7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGkodCksZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDExOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxpKHQpLGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIxKSxpPW4oMTE5KSxhPW4oNDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGEsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxOSksIkRhdGFWaWV3Iik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiUHJvbWlzZSIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMykobigxOSksIldlYWtNYXAiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxyPW5ldyB0LmNvbnN0cnVjdG9yKGUpO3JldHVybiBlJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJm4uY2FsbCh0LCJpbmRleCIpJiYoci5pbmRleD10LmluZGV4LHIuaW5wdXQ9dC5pbnB1dCkscn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2KSxpPW4oMjQ3KSxhPW4oMjQ4KSxvPW4oMjQ5KSxzPW4oMTI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXQuY29uc3RydWN0b3I7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiByKHQpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGMoK3QpO2Nhc2UiW29iamVjdCBEYXRhVmlld10iOnJldHVybiBpKHQsbik7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOmNhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpjYXNlIltvYmplY3QgSW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuIHModCxuKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBjO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBjKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gYSh0KTtjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBjO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gbyh0KX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZT9yKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3Iobix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49L1x3KiQvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgdC5jb25zdHJ1Y3Rvcih0LnNvdXJjZSxuLmV4ZWModCkpO3JldHVybiBlLmxhc3RJbmRleD10Lmxhc3RJbmRleCxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzkpLGk9cj9yLnByb3RvdHlwZTp2b2lkIDAsYT1pP2kudmFsdWVPZjp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhP09iamVjdChhLmNhbGwodCkpOnt9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUxKSxpPW4oNjIpLGE9big4Miksbz1hJiZhLmlzTWFwLHM9bz9pKG8pOnI7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQyKSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmIltvYmplY3QgTWFwXSI9PXIodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTMpLGk9big2MiksYT1uKDgyKSxvPWEmJmEuaXNTZXQscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDIpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBTZXRdIj09cih0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7Zm9yKHZhciBpPS0xLGE9T2JqZWN0KGUpLG89cihlKSxzPW8ubGVuZ3RoO3MtLTspe3ZhciBjPW9bdD9zOisraV07aWYoITE9PT1uKGFbY10sYyxhKSlicmVha31yZXR1cm4gZX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4saSl7aWYobnVsbD09bilyZXR1cm4gbjtpZighcihuKSlyZXR1cm4gdChuLGkpO2Zvcih2YXIgYT1uLmxlbmd0aCxvPWU/YTotMSxzPU9iamVjdChuKTsoZT9vLS06KytvPGEpJiYhMSE9PWkoc1tvXSxvLHMpOyk7cmV0dXJuIG59fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPVtdO3JldHVybiByKHQsKGZ1bmN0aW9uKHQscixpKXtlKHQscixpKSYmbi5wdXNoKHQpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTgpLGk9bigyNjYpLGE9bigxMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKHQpO3JldHVybiAxPT1lLmxlbmd0aCYmZVswXVsyXT9hKGVbMF1bMF0sZVswXVsxXSk6ZnVuY3Rpb24obil7cmV0dXJuIG49PT10fHxyKG4sdCxlKX19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDEzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW4ubGVuZ3RoLHM9byxjPSFhO2lmKG51bGw9PXQpcmV0dXJuIXM7Zm9yKHQ9T2JqZWN0KHQpO28tLTspe3ZhciB1PW5bb107aWYoYyYmdVsyXT91WzFdIT09dFt1WzBdXTohKHVbMF1pbiB0KSlyZXR1cm4hMX1mb3IoOysrbzxzOyl7dmFyIGw9KHU9bltvXSlbMF0saD10W2xdLGY9dVsxXTtpZihjJiZ1WzJdKXtpZih2b2lkIDA9PT1oJiYhKGwgaW4gdCkpcmV0dXJuITF9ZWxzZXt2YXIgZD1uZXcgcjtpZihhKXZhciBwPWEoaCxmLGwsdCxlLGQpO2lmKCEodm9pZCAwPT09cD9pKGYsaCwzLGEsZCk6cCkpcmV0dXJuITF9fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTQpLGk9bigxMzEpLGE9bigyNjMpLG89bigyNjUpLHM9big0MiksYz1uKDUpLHU9big0MCksbD1uKDQ5KSxoPSJbb2JqZWN0IE9iamVjdF0iLGY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sZCxwLHkpe3ZhciBnPWModCksdj1jKGUpLG09Zz8iW29iamVjdCBBcnJheV0iOnModCksYj12PyJbb2JqZWN0IEFycmF5XSI6cyhlKSx4PShtPSJbb2JqZWN0IEFyZ3VtZW50c10iPT1tP2g6bSk9PWgsXz0oYj0iW29iamVjdCBBcmd1bWVudHNdIj09Yj9oOmIpPT1oLGs9bT09YjtpZihrJiZ1KHQpKXtpZighdShlKSlyZXR1cm4hMTtnPSEwLHg9ITF9aWYoayYmIXgpcmV0dXJuIHl8fCh5PW5ldyByKSxnfHxsKHQpP2kodCxlLG4sZCxwLHkpOmEodCxlLG0sbixkLHAseSk7aWYoISgxJm4pKXt2YXIgdz14JiZmLmNhbGwodCwiX193cmFwcGVkX18iKSxFPV8mJmYuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKHd8fEUpe3ZhciBUPXc/dC52YWx1ZSgpOnQsQz1FP2UudmFsdWUoKTplO3JldHVybiB5fHwoeT1uZXcgcikscChULEMsbixkLHkpfX1yZXR1cm4hIWsmJih5fHwoeT1uZXcgciksbyh0LGUsbixkLHAseSkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGg7KytuPHI7KWlmKGUodFtuXSxuLHQpKXJldHVybiEwO3JldHVybiExfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzkpLGk9bigxMjMpLGE9bigzNyksbz1uKDEzMSkscz1uKDI2NCksYz1uKDkxKSx1PXI/ci5wcm90b3R5cGU6dm9pZCAwLGw9dT91LnZhbHVlT2Y6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixyLHUsaCxmKXtzd2l0Y2gobil7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6aWYodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fHQuYnl0ZU9mZnNldCE9ZS5ieXRlT2Zmc2V0KXJldHVybiExO3Q9dC5idWZmZXIsZT1lLmJ1ZmZlcjtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4hKHQuYnl0ZUxlbmd0aCE9ZS5ieXRlTGVuZ3RofHwhaChuZXcgaSh0KSxuZXcgaShlKSkpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuIGEoK3QsK2UpO2Nhc2UiW29iamVjdCBFcnJvcl0iOnJldHVybiB0Lm5hbWU9PWUubmFtZSYmdC5tZXNzYWdlPT1lLm1lc3NhZ2U7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gdD09ZSsiIjtjYXNlIltvYmplY3QgTWFwXSI6dmFyIGQ9cztjYXNlIltvYmplY3QgU2V0XSI6dmFyIHA9MSZyO2lmKGR8fChkPWMpLHQuc2l6ZSE9ZS5zaXplJiYhcClyZXR1cm4hMTt2YXIgeT1mLmdldCh0KTtpZih5KXJldHVybiB5PT1lO3J8PTIsZi5zZXQodCxlKTt2YXIgZz1vKGQodCksZChlKSxyLHUsaCxmKTtyZXR1cm4gZi5kZWxldGUodCksZztjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYobClyZXR1cm4gbC5jYWxsKHQpPT1sLmNhbGwoZSl9cmV0dXJuITF9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0tMSxuPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtuWysrZV09W3IsdF19KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMCksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhLG8scyl7dmFyIGM9MSZuLHU9cih0KSxsPXUubGVuZ3RoO2lmKGwhPXIoZSkubGVuZ3RoJiYhYylyZXR1cm4hMTtmb3IodmFyIGg9bDtoLS07KXt2YXIgZj11W2hdO2lmKCEoYz9mIGluIGU6aS5jYWxsKGUsZikpKXJldHVybiExfXZhciBkPXMuZ2V0KHQpO2lmKGQmJnMuZ2V0KGUpKXJldHVybiBkPT1lO3ZhciBwPSEwO3Muc2V0KHQsZSkscy5zZXQoZSx0KTtmb3IodmFyIHk9YzsrK2g8bDspe3ZhciBnPXRbZj11W2hdXSx2PWVbZl07aWYoYSl2YXIgbT1jP2EodixnLGYsZSx0LHMpOmEoZyx2LGYsdCxlLHMpO2lmKCEodm9pZCAwPT09bT9nPT09dnx8byhnLHYsbixhLHMpOm0pKXtwPSExO2JyZWFrfXl8fCh5PSJjb25zdHJ1Y3RvciI9PWYpfWlmKHAmJiF5KXt2YXIgYj10LmNvbnN0cnVjdG9yLHg9ZS5jb25zdHJ1Y3RvcjtiIT14JiYiY29uc3RydWN0b3IiaW4gdCYmImNvbnN0cnVjdG9yImluIGUmJiEoImZ1bmN0aW9uIj09dHlwZW9mIGImJmIgaW5zdGFuY2VvZiBiJiYiZnVuY3Rpb24iPT10eXBlb2YgeCYmeCBpbnN0YW5jZW9mIHgpJiYocD0hMSl9cmV0dXJuIHMuZGVsZXRlKHQpLHMuZGVsZXRlKGUpLHB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzQpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHQpLG49ZS5sZW5ndGg7bi0tOyl7dmFyIGE9ZVtuXSxvPXRbYV07ZVtuXT1bYSxvLHIobyldfXJldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMwKSxpPW4oMjY4KSxhPW4oMTM3KSxvPW4oOTMpLHM9bigxMzQpLGM9bigxMzUpLHU9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCkmJnMoZSk/Yyh1KHQpLGUpOmZ1bmN0aW9uKG4pe3ZhciBvPWkobix0KTtyZXR1cm4gdm9pZCAwPT09byYmbz09PWU/YShuLHQpOnIoZSxvLDMpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW51bGw9PXQ/dm9pZCAwOnIodCxlKTtyZXR1cm4gdm9pZCAwPT09aT9uOml9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzApLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csYT0vXFwoXFwpPy9nLG89cigoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShpLChmdW5jdGlvbih0LG4scixpKXtlLnB1c2gocj9pLnJlcGxhY2UoYSwiJDEiKTpufHx0KX0pKSxlfSkpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDc5KTtmdW5jdGlvbiBpKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLHIpOnJbMF0sYT1uLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgbz10LmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9YS5zZXQoaSxvKXx8YSxvfTtyZXR1cm4gbi5jYWNoZT1uZXcoaS5DYWNoZXx8ciksbn1pLkNhY2hlPXIsdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPW4oNjcpLGE9big1KSxvPW4oNDMpLHM9cj9yLnByb3RvdHlwZTp2b2lkIDAsYz1zP3MudG9TdHJpbmc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihhKGUpKXJldHVybiBpKGUsdCkrIiI7aWYobyhlKSlyZXR1cm4gYz9jLmNhbGwoZSk6IiI7dmFyIG49ZSsiIjtyZXR1cm4iMCI9PW4mJjEvZT09LTEvMD8iLTAiOm59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZlIGluIE9iamVjdCh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzOSksaT1uKDI3NSksYT1uKDkzKSxvPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKG8odCkpOmkodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcihlLHQpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmbi5jYWxsKHQsZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MyksaT1uKDQyKSxhPW4oNDgpLG89big1KSxzPW4oMjUpLGM9big0MCksdT1uKDYzKSxsPW4oNDkpLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4hMDtpZihzKHQpJiYobyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fGModCl8fGwodCl8fGEodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1pKHQpO2lmKCJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZSlyZXR1cm4hdC5zaXplO2lmKHUodCkpcmV0dXJuIXIodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKGguY2FsbCh0LG4pKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9LTEsYT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHImJmEmJihuPXRbKytpXSk7KytpPGE7KW49ZShuLHRbaV0saSx0KTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxpLGEpe249cj8ocj0hMSx0KTplKG4sdCxpLGEpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MyksaT1uKDQyKSxhPW4oMjUpLG89bigyODEpLHM9bigyODIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGEodCkpcmV0dXJuIG8odCk/cyh0KTp0Lmxlbmd0aDt2YXIgZT1pKHQpO3JldHVybiJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZT90LnNpemU6cih0KS5sZW5ndGh9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDUpLGE9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWkodCkmJmEodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjgzKSxpPW4oMjg0KSxhPW4oMjg1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/YSh0KTpyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM5KSgibGVuZ3RoIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZlxcdWZlMGVcXHVmZTBmXSIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi50ZXN0KHQpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj0iW1xcdWQ4MDAtXFx1ZGZmZl0iLHI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixpPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGE9IlteXFx1ZDgwMC1cXHVkZmZmXSIsbz0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIscz0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsYz0iKD86IityKyJ8IitpKyIpIisiPyIsdT0iW1xcdWZlMGVcXHVmZTBmXT8iK2MrKCIoPzpcXHUyMDBkKD86IitbYSxvLHNdLmpvaW4oInwiKSsiKVtcXHVmZTBlXFx1ZmUwZl0/IitjKyIpKiIpLGw9Iig/OiIrW2ErcisiPyIscixvLHMsbl0uam9pbigifCIpKyIpIixoPVJlZ0V4cChpKyIoPz0iK2krIil8IitsK3UsImciKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgubGFzdEluZGV4PTA7aC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MCksaT1uKDEyNiksYT1uKDg5KSxvPW4oMjYpLHM9big2NCksYz1uKDUpLHU9big0MCksbD1uKDM4KSxoPW4oMTMpLGY9big0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgZD1jKHQpLHA9ZHx8dSh0KXx8Zih0KTtpZihlPW8oZSw0KSxudWxsPT1uKXt2YXIgeT10JiZ0LmNvbnN0cnVjdG9yO249cD9kP25ldyB5OltdOmgodCkmJmwoeSk/aShzKHQpKTp7fX1yZXR1cm4ocD9yOmEpKHQsKGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gZShuLHQscixpKX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTUpLGk9big2OCksYT1uKDI5Miksbz1uKDE0Nykscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQsMSxvLCEwKSl9KSk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM5KSxpPW4oNDgpLGE9big1KSxvPXI/ci5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KXx8aSh0KXx8ISEobyYmdCYmdFtvXSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQuY2FsbChlKTtjYXNlIDE6cmV0dXJuIHQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gdC5hcHBseShlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODcpLGk9bigxMTIpLGE9bigzNSksbz1pP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpyKGUpLHdyaXRhYmxlOiEwfSl9OmE7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSl7dmFyIG49RGF0ZS5ub3c7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPW4oKSxhPTE2LShpLXIpO2lmKHI9aSxhPjApe2lmKCsrZT49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMyKSxpPW4oMjkzKSxhPW4oMjk3KSxvPW4oMTMzKSxzPW4oMjk4KSxjPW4oOTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHU9LTEsbD1pLGg9dC5sZW5ndGgsZj0hMCxkPVtdLHA9ZDtpZihuKWY9ITEsbD1hO2Vsc2UgaWYoaD49MjAwKXt2YXIgeT1lP251bGw6cyh0KTtpZih5KXJldHVybiBjKHkpO2Y9ITEsbD1vLHA9bmV3IHJ9ZWxzZSBwPWU/W106ZDt0OmZvcig7Kyt1PGg7KXt2YXIgZz10W3VdLHY9ZT9lKGcpOmc7aWYoZz1ufHwwIT09Zz9nOjAsZiYmdj09dil7Zm9yKHZhciBtPXAubGVuZ3RoO20tLTspaWYocFttXT09PXYpY29udGludWUgdDtlJiZwLnB1c2godiksZC5wdXNoKGcpfWVsc2UgbChwLHYsbil8fChwIT09ZCYmcC5wdXNoKHYpLGQucHVzaChnKSl9cmV0dXJuIGR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyOTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEhKG51bGw9PXQ/MDp0Lmxlbmd0aCkmJnIodCxlLDApPi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQ2KSxpPW4oMjk1KSxhPW4oMjk2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPT1lP2EodCxlLG4pOnIodCxpLG4pfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPW4tMSxpPXQubGVuZ3RoOysrcjxpOylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytyPGk7KWlmKG4oZSx0W3JdKSlyZXR1cm4hMDtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMiksaT1uKDI5OSksYT1uKDkxKSxvPXImJjEvYShuZXcgcihbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByKHQpfTppO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihlLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIyLjEuOCJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKSxpPW4oNzcpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLGk9dC5wYXJlbnQoZSksYT17djplfTtyZXR1cm4gci5pc1VuZGVmaW5lZChuKXx8KGEudmFsdWU9biksci5pc1VuZGVmaW5lZChpKXx8KGEucGFyZW50PWkpLGF9KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5tYXAodC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSksaT17djplLnYsdzplLnd9O3JldHVybiByLmlzVW5kZWZpbmVkKGUubmFtZSl8fChpLm5hbWU9ZS5uYW1lKSxyLmlzVW5kZWZpbmVkKG4pfHwoaS52YWx1ZT1uKSxpfSkpfXQuZXhwb3J0cz17d3JpdGU6ZnVuY3Rpb24odCl7dmFyIGU9e29wdGlvbnM6e2RpcmVjdGVkOnQuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDp0LmlzQ29tcG91bmQoKX0sbm9kZXM6YSh0KSxlZGdlczpvKHQpfTtyLmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPXIuY2xvbmUodC5ncmFwaCgpKSk7cmV0dXJuIGV9LHJlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGkodC5vcHRpb25zKS5zZXRHcmFwaCh0LnZhbHVlKTtyZXR1cm4gci5lYWNoKHQubm9kZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0Tm9kZSh0LnYsdC52YWx1ZSksdC5wYXJlbnQmJmUuc2V0UGFyZW50KHQudix0LnBhcmVudCl9KSksci5lYWNoKHQuZWRnZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0RWRnZSh7djp0LnYsdzp0LncsbmFtZTp0Lm5hbWV9LHQudmFsdWUpfSkpLGV9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Y29tcG9uZW50czpuKDMwNCksZGlqa3N0cmE6bigxNDkpLGRpamtzdHJhQWxsOm4oMzA1KSxmaW5kQ3ljbGVzOm4oMzA2KSxmbG95ZFdhcnNoYWxsOm4oMzA3KSxpc0FjeWNsaWM6bigzMDgpLHBvc3RvcmRlcjpuKDMwOSkscHJlb3JkZXI6bigzMTApLHByaW06bigzMTEpLHRhcmphbjpuKDE1MSksdG9wc29ydDpuKDE1Mil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiBhKGkpe3IuaGFzKG4saSl8fChuW2ldPSEwLGUucHVzaChpKSxyLmVhY2godC5zdWNjZXNzb3JzKGkpLGEpLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxhKSl9cmV0dXJuIHIuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2U9W10sYSh0KSxlLmxlbmd0aCYmaS5wdXNoKGUpfSkpLGl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDkpLGk9bigxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLGEpe2lbYV09cih0LGEsZSxuKX0pLHt9KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKSxpPW4oMTUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZmlsdGVyKGkodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fSxpPXQubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3RdPXt9LHJbdF1bdF09e2Rpc3RhbmNlOjB9LGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCE9PWUmJihyW3RdW2VdPXtkaXN0YW5jZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9KX0pKSxuKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW4udj09PXQ/bi53Om4udixhPWUobik7clt0XVtpXT17ZGlzdGFuY2U6YSxwcmVkZWNlc3Nvcjp0fX0pKX0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgYT1yW25dO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9YVt0XSxpPWVbbl0sbz1hW25dLHM9ci5kaXN0YW5jZStpLmRpc3RhbmNlO3M8by5kaXN0YW5jZSYmKG8uZGlzdGFuY2U9cyxvLnByZWRlY2Vzc29yPWkucHJlZGVjZXNzb3IpfSkpfSkpfSkpLHJ9KHQsZXx8aSxufHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgaT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cih0KX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2Ygci5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsInBvc3QiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwcmUiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyKSxpPW4oNzcpLGE9bigxNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89bmV3IGkscz17fSxjPW5ldyBhO2Z1bmN0aW9uIHUodCl7dmFyIHI9dC52PT09bj90Lnc6dC52LGk9Yy5wcmlvcml0eShyKTtpZih2b2lkIDAhPT1pKXt2YXIgYT1lKHQpO2E8aSYmKHNbcl09bixjLmRlY3JlYXNlKHIsYSkpfX1pZigwPT09dC5ub2RlQ291bnQoKSlyZXR1cm4gbztyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtjLmFkZCh0LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksby5zZXROb2RlKHQpfSkpLGMuZGVjcmVhc2UodC5ub2RlcygpWzBdLDApO3ZhciBsPSExO2Zvcig7Yy5zaXplKCk+MDspe2lmKG49Yy5yZW1vdmVNaW4oKSxyLmhhcyhzLG4pKW8uc2V0RWRnZShuLHNbbl0pO2Vsc2V7aWYobCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IGdyYXBoIGlzIG5vdCBjb25uZWN0ZWQ6ICIrdCk7bD0hMH10Lm5vZGVFZGdlcyhuKS5mb3JFYWNoKHUpfXJldHVybiBvfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMyl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMzQ2KSxhPW4oMzQ5KSxvPW4oMzUwKSxzPW4oOCkubm9ybWFsaXplUmFua3MsYz1uKDM1MiksdT1uKDgpLnJlbW92ZUVtcHR5UmFua3MsbD1uKDM1MyksaD1uKDM1NCksZj1uKDM1NSksZD1uKDM1NikscD1uKDM2NSkseT1uKDgpLGc9bigyMCkuR3JhcGg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmZS5kZWJ1Z1RpbWluZz95LnRpbWU6eS5ub3RpbWU7bigibGF5b3V0IiwoZnVuY3Rpb24oKXt2YXIgZT1uKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1uZXcgZyh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLG49Qyh0LmdyYXBoKCkpO3JldHVybiBlLnNldEdyYXBoKHIubWVyZ2Uoe30sbSxUKG4sdiksci5waWNrKG4sYikpKSxyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQubm9kZShuKSk7ZS5zZXROb2RlKG4sci5kZWZhdWx0cyhUKGkseCksXykpLGUuc2V0UGFyZW50KG4sdC5wYXJlbnQobikpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPUModC5lZGdlKG4pKTtlLnNldEVkZ2UobixyLm1lcmdlKHt9LHcsVChpLGspLHIucGljayhpLEUpKSl9KSksZX0odCl9KSk7bigiICBydW5MYXlvdXQiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe2UoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpO2UucmFua3NlcC89MixyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj10LmVkZ2Uobik7ci5taW5sZW4qPTIsImMiIT09ci5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpJiYoIlRCIj09PWUucmFua2Rpcnx8IkJUIj09PWUucmFua2Rpcj9yLndpZHRoKz1yLmxhYmVsb2Zmc2V0OnIuaGVpZ2h0Kz1yLmxhYmVsb2Zmc2V0KX0pKX0odCl9KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe2lmKGUudj09PWUudyl7dmFyIG49dC5ub2RlKGUudik7bi5zZWxmRWRnZXN8fChuLnNlbGZFZGdlcz1bXSksbi5zZWxmRWRnZXMucHVzaCh7ZTplLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KSl9KHQpfSkpLGUoIiAgICBhY3ljbGljIiwoZnVuY3Rpb24oKXtpLnJ1bih0KX0pKSxlKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsKGZ1bmN0aW9uKCl7bC5ydW4odCl9KSksZSgiICAgIHJhbmsiLChmdW5jdGlvbigpe28oeS5hc05vbkNvbXBvdW5kR3JhcGgodCkpfSkpLGUoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKG4ud2lkdGgmJm4uaGVpZ2h0KXt2YXIgcj10Lm5vZGUoZS52KSxpPXtyYW5rOih0Lm5vZGUoZS53KS5yYW5rLXIucmFuaykvMityLnJhbmssZTplfTt5LmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXt1KHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7bC5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXkuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXt5LmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdSh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt1KHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmdShuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KHkuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKHkuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgdj1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sbT17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxiPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0seD1bIndpZHRoIiwiaGVpZ2h0Il0sXz17d2lkdGg6MCxoZWlnaHQ6MH0saz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSx3PXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sRT1bImxhYmVscG9zIl07ZnVuY3Rpb24gVCh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LDUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzE2KShuKDMxNykpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNiksaT1uKDI1KSxhPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3ZhciBzPU9iamVjdChlKTtpZighaShlKSl7dmFyIGM9cihuLDMpO2U9YShlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBjKHNbdF0sdCxzKX19dmFyIHU9dChlLG4sbyk7cmV0dXJuIHU+LTE/c1tjP2VbdV06dV06dm9pZCAwfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0NiksaT1uKDI2KSxhPW4oMzE4KSxvPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHM9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFzKXJldHVybi0xO3ZhciBjPW51bGw9PW4/MDphKG4pO3JldHVybiBjPDAmJihjPW8ocytjLDApKSxyKHQsaShlLDMpLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPWUlMTtyZXR1cm4gZT09ZT9uP2UtbjplOjB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyksaT1uKDQzKSxhPS9eXHMrfFxzKyQvZyxvPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHM9L14wYlswMV0rJC9pLGM9L14wb1swLTddKyQvaSx1PXBhcnNlSW50O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoaSh0KSlyZXR1cm4gTmFOO2lmKHIodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PXIoZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PXQucmVwbGFjZShhLCIiKTt2YXIgbj1zLnRlc3QodCk7cmV0dXJuIG58fGMudGVzdCh0KT91KHQuc2xpY2UoMiksbj8yOjgpOm8udGVzdCh0KT9OYU46K3R9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MCksaT1uKDEyOCksYT1uKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD90OnIodCxpKGUpLGEpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MCksaT1uKDg5KSxhPW4oMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlPWEoZSwzKSxpKHQsKGZ1bmN0aW9uKHQsaSxhKXtyKG4saSxlKHQsaSxhKSl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMzI0KSxhPW4oMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGEsaSk6dm9pZCAwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzI2KSxpPW4oMzI5KSgoZnVuY3Rpb24odCxlLG4pe3IodCxlLG4pfSkpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDE1OCksYT1uKDkwKSxvPW4oMzI3KSxzPW4oMTMpLGM9big0MSksdT1uKDE2MCk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGwsaCxmKXtlIT09biYmYShuLChmdW5jdGlvbihhLGMpe2lmKGZ8fChmPW5ldyByKSxzKGEpKW8oZSxuLGMsbCx0LGgsZik7ZWxzZXt2YXIgZD1oP2godShlLGMpLGEsYysiIixlLG4sZik6dm9pZCAwO3ZvaWQgMD09PWQmJihkPWEpLGkoZSxjLGQpfX0pLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU4KSxpPW4oMTE1KSxhPW4oMTI0KSxvPW4oMTE2KSxzPW4oMTI1KSxjPW4oNDgpLHU9big1KSxsPW4oMTQ3KSxoPW4oNDApLGY9bigzOCksZD1uKDEzKSxwPW4oMTU5KSx5PW4oNDkpLGc9bigxNjApLHY9bigzMjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixtLGIseCxfKXt2YXIgaz1nKHQsbiksdz1nKGUsbiksRT1fLmdldCh3KTtpZihFKXIodCxuLEUpO2Vsc2V7dmFyIFQ9eD94KGssdyxuKyIiLHQsZSxfKTp2b2lkIDAsQz12b2lkIDA9PT1UO2lmKEMpe3ZhciBTPXUodyksQT0hUyYmaCh3KSxNPSFTJiYhQSYmeSh3KTtUPXcsU3x8QXx8TT91KGspP1Q9azpsKGspP1Q9byhrKTpBPyhDPSExLFQ9aSh3LCEwKSk6TT8oQz0hMSxUPWEodywhMCkpOlQ9W106cCh3KXx8Yyh3KT8oVD1rLGMoayk/VD12KGspOmQoaykmJiFmKGspfHwoVD1zKHcpKSk6Qz0hMX1DJiYoXy5zZXQodyxUKSxiKFQsdyxtLHgsXyksXy5kZWxldGUodykpLHIodCxuLFQpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oNDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGkodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjgpLGk9big2OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbihlLG4pe3ZhciByPS0xLGE9bi5sZW5ndGgsbz1hPjE/blthLTFdOnZvaWQgMCxzPWE+Mj9uWzJdOnZvaWQgMDtmb3Iobz10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygbz8oYS0tLG8pOnZvaWQgMCxzJiZpKG5bMF0sblsxXSxzKSYmKG89YTwzP3ZvaWQgMDpvLGE9MSksZT1PYmplY3QoZSk7KytyPGE7KXt2YXIgYz1uW3JdO2MmJnQoZSxjLHIsbyl9cmV0dXJuIGV9KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NiksaT1uKDE2MSksYT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoP3IodCxhLGkpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMjYpLGE9bigxNjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsaShlLDIpLGEpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5EYXRlLm5vdygpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzM0KSxpPW4oMTM3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkodCxuKX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkyKSxpPW4oMzM1KSxhPW4oNjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPS0xLHM9ZS5sZW5ndGgsYz17fTsrK288czspe3ZhciB1PWVbb10sbD1yKHQsdSk7bihsLHUpJiZpKGMsYSh1LHQpLGwpfXJldHVybiBjfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9big2NiksYT1uKDYxKSxvPW4oMTMpLHM9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe2lmKCFvKHQpKXJldHVybiB0O2Zvcih2YXIgdT0tMSxsPShlPWkoZSx0KSkubGVuZ3RoLGg9bC0xLGY9dDtudWxsIT1mJiYrK3U8bDspe3ZhciBkPXMoZVt1XSkscD1uO2lmKHUhPWgpe3ZhciB5PWZbZF07dm9pZCAwPT09KHA9Yz9jKHksZCxmKTp2b2lkIDApJiYocD1vKHkpP3k6YShlW3UrMV0pP1tdOnt9KX1yKGYsZCxwKSxmPWZbZF19cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTcpLGk9bigxNDQpLGE9bigxNDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYShpKHQsdm9pZCAwLHIpLHQrIiIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzM4KSxpPW4oNjkpLGE9bigxNTYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3JldHVybiBvJiYibnVtYmVyIiE9dHlwZW9mIG8mJmkoZSxuLG8pJiYobj1vPXZvaWQgMCksZT1hKGUpLHZvaWQgMD09PW4/KG49ZSxlPTApOm49YShuKSxvPXZvaWQgMD09PW8/ZTxuPzE6LTE6YShvKSxyKGUsbixvLHQpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5jZWlsLHI9TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxpLGEpe2Zvcih2YXIgbz0tMSxzPXIobigoZS10KS8oaXx8MSkpLDApLGM9QXJyYXkocyk7cy0tOyljW2E/czorK29dPXQsdCs9aTtyZXR1cm4gY319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk1KSxpPW4oMzQwKSxhPW4oNjgpLG89big2OSkscz1hKChmdW5jdGlvbih0LGUpe2lmKG51bGw9PXQpcmV0dXJuW107dmFyIG49ZS5sZW5ndGg7cmV0dXJuIG4+MSYmbyh0LGVbMF0sZVsxXSk/ZT1bXTpuPjImJm8oZVswXSxlWzFdLGVbMl0pJiYoZT1bZVswXV0pLGkodCxyKGUsMSksW10pfSkpO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NyksaT1uKDI2KSxhPW4oMTQyKSxvPW4oMzQxKSxzPW4oNjIpLGM9bigzNDIpLHU9bigzNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbD0tMTtlPXIoZS5sZW5ndGg/ZTpbdV0scyhpKSk7dmFyIGg9YSh0LChmdW5jdGlvbih0LG4saSl7cmV0dXJue2NyaXRlcmlhOnIoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSksaW5kZXg6KytsLHZhbHVlOnR9fSkpO3JldHVybiBvKGgsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGModCxlLG4pfSkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmxlbmd0aDtmb3IodC5zb3J0KGUpO24tLTspdFtuXT10W25dLnZhbHVlO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaT0tMSxhPXQuY3JpdGVyaWEsbz1lLmNyaXRlcmlhLHM9YS5sZW5ndGgsYz1uLmxlbmd0aDsrK2k8czspe3ZhciB1PXIoYVtpXSxvW2ldKTtpZih1KXJldHVybiBpPj1jP3U6dSooImRlc2MiPT1uW2ldPy0xOjEpfXJldHVybiB0LmluZGV4LWUuaW5kZXh9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodCE9PWUpe3ZhciBuPXZvaWQgMCE9PXQsaT1udWxsPT09dCxhPXQ9PXQsbz1yKHQpLHM9dm9pZCAwIT09ZSxjPW51bGw9PT1lLHU9ZT09ZSxsPXIoZSk7aWYoIWMmJiFsJiYhbyYmdD5lfHxvJiZzJiZ1JiYhYyYmIWx8fGkmJnMmJnV8fCFuJiZ1fHwhYSlyZXR1cm4gMTtpZighaSYmIW8mJiFsJiZ0PGV8fGwmJm4mJmEmJiFpJiYhb3x8YyYmbiYmYXx8IXMmJmF8fCF1KXJldHVybi0xfXJldHVybiAwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9bigzNDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBpKHR8fFtdLGV8fFtdLHIpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0tMSxpPXQubGVuZ3RoLGE9ZS5sZW5ndGgsbz17fTsrK3I8aTspe3ZhciBzPXI8YT9lW3JdOnZvaWQgMDtuKG8sdFtyXSxzKX1yZXR1cm4gb319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMzQ3KTt0LmV4cG9ydHM9e3J1bjpmdW5jdGlvbih0KXt2YXIgZT0iZ3JlZWR5Ij09PXQuZ3JhcGgoKS5hY3ljbGljZXI/aSh0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLndlaWdodH19KHQpKTpmdW5jdGlvbih0KXt2YXIgZT1bXSxuPXt9LGk9e307ZnVuY3Rpb24gYShvKXtyLmhhcyhpLG8pfHwoaVtvXT0hMCxuW29dPSEwLHIuZm9yRWFjaCh0Lm91dEVkZ2VzKG8pLChmdW5jdGlvbih0KXtyLmhhcyhuLHQudyk/ZS5wdXNoKHQpOmEodC53KX0pKSxkZWxldGUgbltvXSl9cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksYSksZX0odCk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTt0LnJlbW92ZUVkZ2UoZSksbi5mb3J3YXJkTmFtZT1lLm5hbWUsbi5yZXZlcnNlZD0hMCx0LnNldEVkZ2UoZS53LGUudixuLHIudW5pcXVlSWQoInJldiIpKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7aWYobi5yZXZlcnNlZCl7dC5yZW1vdmVFZGdlKGUpO3ZhciByPW4uZm9yd2FyZE5hbWU7ZGVsZXRlIG4ucmV2ZXJzZWQsZGVsZXRlIG4uZm9yd2FyZE5hbWUsdC5zZXRFZGdlKGUudyxlLnYsbixyKX19KSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDIwKS5HcmFwaCxhPW4oMzQ4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0Lm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IGksbz0wLHM9MDtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtuLnNldE5vZGUodCx7djp0LGluOjAsb3V0OjB9KX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbih0KXt2YXIgcj1uLmVkZ2UodC52LHQudyl8fDAsaT1lKHQpLGE9citpO24uc2V0RWRnZSh0LnYsdC53LGEpLHM9TWF0aC5tYXgocyxuLm5vZGUodC52KS5vdXQrPWkpLG89TWF0aC5tYXgobyxuLm5vZGUodC53KS5pbis9aSl9KSk7dmFyIHU9ci5yYW5nZShzK28rMykubWFwKChmdW5jdGlvbigpe3JldHVybiBuZXcgYX0pKSxsPW8rMTtyZXR1cm4gci5mb3JFYWNoKG4ubm9kZXMoKSwoZnVuY3Rpb24odCl7Yyh1LGwsbi5ub2RlKHQpKX0pKSx7Z3JhcGg6bixidWNrZXRzOnUsemVyb0lkeDpsfX0odCxlfHxvKSx1PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpPVtdLGE9ZVtlLmxlbmd0aC0xXSxvPWVbMF07Zm9yKDt0Lm5vZGVDb3VudCgpOyl7Zm9yKDtyPW8uZGVxdWV1ZSgpOylzKHQsZSxuLHIpO2Zvcig7cj1hLmRlcXVldWUoKTspcyh0LGUsbixyKTtpZih0Lm5vZGVDb3VudCgpKWZvcih2YXIgYz1lLmxlbmd0aC0yO2M+MDstLWMpaWYocj1lW2NdLmRlcXVldWUoKSl7aT1pLmNvbmNhdChzKHQsZSxuLHIsITApKTticmVha319cmV0dXJuIGl9KG4uZ3JhcGgsbi5idWNrZXRzLG4uemVyb0lkeCk7cmV0dXJuIHIuZmxhdHRlbihyLm1hcCh1LChmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlLnYsZS53KX0pKSwhMCl9O3ZhciBvPXIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gcyh0LGUsbixpLGEpe3ZhciBvPWE/W106dm9pZCAwO3JldHVybiByLmZvckVhY2godC5pbkVkZ2VzKGkudiksKGZ1bmN0aW9uKHIpe3ZhciBpPXQuZWRnZShyKSxzPXQubm9kZShyLnYpO2EmJm8ucHVzaCh7djpyLnYsdzpyLnd9KSxzLm91dC09aSxjKGUsbixzKX0pKSxyLmZvckVhY2godC5vdXRFZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2UociksYT1yLncsbz10Lm5vZGUoYSk7by5pbi09aSxjKGUsbixvKX0pKSx0LnJlbW92ZU5vZGUoaS52KSxvfWZ1bmN0aW9uIGModCxlLG4pe24ub3V0P24uaW4/dFtuLm91dC1uLmluK2VdLmVucXVldWUobik6dFt0Lmxlbmd0aC0xXS5lbnF1ZXVlKG4pOnRbMF0uZW5xdWV1ZShuKX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbigpe3ZhciB0PXt9O3QuX25leHQ9dC5fcHJldj10LHRoaXMuX3NlbnRpbmVsPXR9ZnVuY3Rpb24gcih0KXt0Ll9wcmV2Ll9uZXh0PXQuX25leHQsdC5fbmV4dC5fcHJldj10Ll9wcmV2LGRlbGV0ZSB0Ll9uZXh0LGRlbGV0ZSB0Ll9wcmV2fWZ1bmN0aW9uIGkodCxlKXtpZigiX25leHQiIT09dCYmIl9wcmV2IiE9PXQpcmV0dXJuIGV9dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVxdWV1ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3NlbnRpbmVsLGU9dC5fcHJldjtpZihlIT09dClyZXR1cm4gcihlKSxlfSxuLnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3NlbnRpbmVsO3QuX3ByZXYmJnQuX25leHQmJnIodCksdC5fbmV4dD1lLl9uZXh0LGUuX25leHQuX3ByZXY9dCxlLl9uZXh0PXQsdC5fcHJldj1lfSxuLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMuX3NlbnRpbmVsLG49ZS5fcHJldjtuIT09ZTspdC5wdXNoKEpTT04uc3RyaW5naWZ5KG4saSkpLG49bi5fcHJldjtyZXR1cm4iWyIrdC5qb2luKCIsICIpKyJdIn19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oOCk7dC5leHBvcnRzPXtydW46ZnVuY3Rpb24odCl7dC5ncmFwaCgpLmR1bW15Q2hhaW5zPVtdLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHIsYSxvPWUudixzPXQubm9kZShvKS5yYW5rLGM9ZS53LHU9dC5ub2RlKGMpLnJhbmssbD1lLm5hbWUsaD10LmVkZ2UoZSksZj1oLmxhYmVsUmFuaztpZih1PT09cysxKXJldHVybjtmb3IodC5yZW1vdmVFZGdlKGUpLGE9MCwrK3M7czx1OysrYSwrK3MpaC5wb2ludHM9W10scj17d2lkdGg6MCxoZWlnaHQ6MCxlZGdlTGFiZWw6aCxlZGdlT2JqOmUscmFuazpzfSxuPWkuYWRkRHVtbXlOb2RlKHQsImVkZ2UiLHIsIl9kIikscz09PWYmJihyLndpZHRoPWgud2lkdGgsci5oZWlnaHQ9aC5oZWlnaHQsci5kdW1teT0iZWRnZS1sYWJlbCIsci5sYWJlbHBvcz1oLmxhYmVscG9zKSx0LnNldEVkZ2UobyxuLHt3ZWlnaHQ6aC53ZWlnaHR9LGwpLDA9PT1hJiZ0LmdyYXBoKCkuZHVtbXlDaGFpbnMucHVzaChuKSxvPW47dC5zZXRFZGdlKG8sYyx7d2VpZ2h0Omgud2VpZ2h0fSxsKX0odCxlKX0pKX0sdW5kbzpmdW5jdGlvbih0KXtyLmZvckVhY2godC5ncmFwaCgpLmR1bW15Q2hhaW5zLChmdW5jdGlvbihlKXt2YXIgbixyPXQubm9kZShlKSxpPXIuZWRnZUxhYmVsO2Zvcih0LnNldEVkZ2Uoci5lZGdlT2JqLGkpO3IuZHVtbXk7KW49dC5zdWNjZXNzb3JzKGUpWzBdLHQucmVtb3ZlTm9kZShlKSxpLnBvaW50cy5wdXNoKHt4OnIueCx5OnIueX0pLCJlZGdlLWxhYmVsIj09PXIuZHVtbXkmJihpLng9ci54LGkueT1yLnksaS53aWR0aD1yLndpZHRoLGkuaGVpZ2h0PXIuaGVpZ2h0KSxlPW4scj10Lm5vZGUoZSl9KSl9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDcwKS5sb25nZXN0UGF0aCxpPW4oMTY1KSxhPW4oMzUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7c3dpdGNoKHQuZ3JhcGgoKS5yYW5rZXIpe2Nhc2UibmV0d29yay1zaW1wbGV4IjpzKHQpO2JyZWFrO2Nhc2UidGlnaHQtdHJlZSI6IWZ1bmN0aW9uKHQpe3IodCksaSh0KX0odCk7YnJlYWs7Y2FzZSJsb25nZXN0LXBhdGgiOm8odCk7YnJlYWs7ZGVmYXVsdDpzKHQpfX07dmFyIG89cjtmdW5jdGlvbiBzKHQpe2EodCl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDE2NSksYT1uKDcwKS5zbGFjayxvPW4oNzApLmxvbmdlc3RQYXRoLHM9bigyMCkuYWxnLnByZW9yZGVyLGM9bigyMCkuYWxnLnBvc3RvcmRlcix1PW4oOCkuc2ltcGxpZnk7ZnVuY3Rpb24gbCh0KXt0PXUodCksbyh0KTt2YXIgZSxuPWkodCk7Zm9yKGQobiksaChuLHQpO2U9eShuKTspdihuLHQsZSxnKG4sdCxlKSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciBuPWModCx0Lm5vZGVzKCkpO249bi5zbGljZSgwLG4ubGVuZ3RoLTEpLHIuZm9yRWFjaChuLChmdW5jdGlvbihuKXshZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubm9kZShuKS5wYXJlbnQ7dC5lZGdlKG4scikuY3V0dmFsdWU9Zih0LGUsbil9KHQsZSxuKX0pKX1mdW5jdGlvbiBmKHQsZSxuKXt2YXIgaT10Lm5vZGUobikucGFyZW50LGE9ITAsbz1lLmVkZ2UobixpKSxzPTA7cmV0dXJuIG98fChhPSExLG89ZS5lZGdlKGksbikpLHM9by53ZWlnaHQsci5mb3JFYWNoKGUubm9kZUVkZ2VzKG4pLChmdW5jdGlvbihyKXt2YXIgbyxjLHU9ci52PT09bixsPXU/ci53OnIudjtpZihsIT09aSl7dmFyIGg9dT09PWEsZj1lLmVkZ2Uocikud2VpZ2h0O2lmKHMrPWg/ZjotZixvPW4sYz1sLHQuaGFzRWRnZShvLGMpKXt2YXIgZD10LmVkZ2UobixsKS5jdXR2YWx1ZTtzKz1oPy1kOmR9fX0pKSxzfWZ1bmN0aW9uIGQodCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPXQubm9kZXMoKVswXSkscCh0LHt9LDEsZSl9ZnVuY3Rpb24gcCh0LGUsbixpLGEpe3ZhciBvPW4scz10Lm5vZGUoaSk7cmV0dXJuIGVbaV09ITAsci5mb3JFYWNoKHQubmVpZ2hib3JzKGkpLChmdW5jdGlvbihhKXtyLmhhcyhlLGEpfHwobj1wKHQsZSxuLGEsaSkpfSkpLHMubG93PW8scy5saW09bisrLGE/cy5wYXJlbnQ9YTpkZWxldGUgcy5wYXJlbnQsbn1mdW5jdGlvbiB5KHQpe3JldHVybiByLmZpbmQodC5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5lZGdlKGUpLmN1dHZhbHVlPDB9KSl9ZnVuY3Rpb24gZyh0LGUsbil7dmFyIGk9bi52LG89bi53O2UuaGFzRWRnZShpLG8pfHwoaT1uLncsbz1uLnYpO3ZhciBzPXQubm9kZShpKSxjPXQubm9kZShvKSx1PXMsbD0hMTtzLmxpbT5jLmxpbSYmKHU9YyxsPSEwKTt2YXIgaD1yLmZpbHRlcihlLmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3JldHVybiBsPT09bSh0LHQubm9kZShlLnYpLHUpJiZsIT09bSh0LHQubm9kZShlLncpLHUpfSkpO3JldHVybiByLm1pbkJ5KGgsKGZ1bmN0aW9uKHQpe3JldHVybiBhKGUsdCl9KSl9ZnVuY3Rpb24gdih0LGUsbixpKXt2YXIgYT1uLnYsbz1uLnc7dC5yZW1vdmVFZGdlKGEsbyksdC5zZXRFZGdlKGkudixpLncse30pLGQodCksaCh0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5maW5kKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIWUubm9kZSh0KS5wYXJlbnR9KSksaT1zKHQsbik7aT1pLnNsaWNlKDEpLHIuZm9yRWFjaChpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobikucGFyZW50LGk9ZS5lZGdlKG4sciksYT0hMTtpfHwoaT1lLmVkZ2UocixuKSxhPSEwKSxlLm5vZGUobikucmFuaz1lLm5vZGUocikucmFuaysoYT9pLm1pbmxlbjotaS5taW5sZW4pfSkpfSh0LGUpfWZ1bmN0aW9uIG0odCxlLG4pe3JldHVybiBuLmxvdzw9ZS5saW0mJmUubGltPD1uLmxpbX10LmV4cG9ydHM9bCxsLmluaXRMb3dMaW1WYWx1ZXM9ZCxsLmluaXRDdXRWYWx1ZXM9aCxsLmNhbGNDdXRWYWx1ZT1mLGwubGVhdmVFZGdlPXksbC5lbnRlckVkZ2U9ZyxsLmV4Y2hhbmdlRWRnZXM9dn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LG49MDtmdW5jdGlvbiBpKGEpe3ZhciBvPW47ci5mb3JFYWNoKHQuY2hpbGRyZW4oYSksaSksZVthXT17bG93Om8sbGltOm4rK319cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksaSksZX0odCk7ci5mb3JFYWNoKHQuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24obil7Zm9yKHZhciByPXQubm9kZShuKSxpPXIuZWRnZU9iaixhPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEsbz1bXSxzPVtdLGM9TWF0aC5taW4oZVtuXS5sb3csZVtyXS5sb3cpLHU9TWF0aC5tYXgoZVtuXS5saW0sZVtyXS5saW0pO2k9bjtkb3tpPXQucGFyZW50KGkpLG8ucHVzaChpKX13aGlsZShpJiYoZVtpXS5sb3c+Y3x8dT5lW2ldLmxpbSkpO2E9aSxpPXI7Zm9yKDsoaT10LnBhcmVudChpKSkhPT1hOylzLnB1c2goaSk7cmV0dXJue3BhdGg6by5jb25jYXQocy5yZXZlcnNlKCkpLGxjYTphfX0odCxlLGkudixpLncpLG89YS5wYXRoLHM9YS5sY2EsYz0wLHU9b1tjXSxsPSEwO24hPT1pLnc7KXtpZihyPXQubm9kZShuKSxsKXtmb3IoOyh1PW9bY10pIT09cyYmdC5ub2RlKHUpLm1heFJhbms8ci5yYW5rOyljKys7dT09PXMmJihsPSExKX1pZighbCl7Zm9yKDtjPG8ubGVuZ3RoLTEmJnQubm9kZSh1PW9bYysxXSkubWluUmFuazw9ci5yYW5rOyljKys7dT1vW2NdfXQuc2V0UGFyZW50KG4sdSksbj10LnN1Y2Nlc3NvcnMobilbMF19fSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDgpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3ZhciBlPWkuYWRkRHVtbXlOb2RlKHQsInJvb3QiLHt9LCJfcm9vdCIpLG49ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uKG4peyFmdW5jdGlvbiBuKGksYSl7dmFyIG89dC5jaGlsZHJlbihpKTtvJiZvLmxlbmd0aCYmci5mb3JFYWNoKG8sKGZ1bmN0aW9uKHQpe24odCxhKzEpfSkpO2VbaV09YX0obiwxKX0pKSxlfSh0KSxhPXIubWF4KHIudmFsdWVzKG4pKS0xLG89MiphKzE7dC5ncmFwaCgpLm5lc3RpbmdSb290PWUsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm1pbmxlbio9b30pKTt2YXIgcz1mdW5jdGlvbih0KXtyZXR1cm4gci5yZWR1Y2UodC5lZGdlcygpLChmdW5jdGlvbihlLG4pe3JldHVybiBlK3QuZWRnZShuKS53ZWlnaHR9KSwwKX0odCkrMTtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihjKXshZnVuY3Rpb24gdChlLG4sYSxvLHMsYyx1KXt2YXIgbD1lLmNoaWxkcmVuKHUpO2lmKCFsLmxlbmd0aClyZXR1cm4gdm9pZCh1IT09biYmZS5zZXRFZGdlKG4sdSx7d2VpZ2h0OjAsbWlubGVuOmF9KSk7dmFyIGg9aS5hZGRCb3JkZXJOb2RlKGUsIl9idCIpLGY9aS5hZGRCb3JkZXJOb2RlKGUsIl9iYiIpLGQ9ZS5ub2RlKHUpO2Uuc2V0UGFyZW50KGgsdSksZC5ib3JkZXJUb3A9aCxlLnNldFBhcmVudChmLHUpLGQuYm9yZGVyQm90dG9tPWYsci5mb3JFYWNoKGwsKGZ1bmN0aW9uKHIpe3QoZSxuLGEsbyxzLGMscik7dmFyIGk9ZS5ub2RlKHIpLGw9aS5ib3JkZXJUb3A/aS5ib3JkZXJUb3A6cixkPWkuYm9yZGVyQm90dG9tP2kuYm9yZGVyQm90dG9tOnIscD1pLmJvcmRlclRvcD9vOjIqbyx5PWwhPT1kPzE6cy1jW3VdKzE7ZS5zZXRFZGdlKGgsbCx7d2VpZ2h0OnAsbWlubGVuOnksbmVzdGluZ0VkZ2U6ITB9KSxlLnNldEVkZ2UoZCxmLHt3ZWlnaHQ6cCxtaW5sZW46eSxuZXN0aW5nRWRnZTohMH0pfSkpLGUucGFyZW50KHUpfHxlLnNldEVkZ2UobixoLHt3ZWlnaHQ6MCxtaW5sZW46cytjW3VdfSl9KHQsZSxvLHMsYSxuLGMpfSkpLHQuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1vfSxjbGVhbnVwOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ3JhcGgoKTt0LnJlbW92ZU5vZGUoZS5uZXN0aW5nUm9vdCksZGVsZXRlIGUubmVzdGluZ1Jvb3Qsci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dC5lZGdlKGUpLm5lc3RpbmdFZGdlJiZ0LnJlbW92ZUVkZ2UoZSl9KSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDgpO2Z1bmN0aW9uIGEodCxlLG4scixhLG8pe3ZhciBzPXt3aWR0aDowLGhlaWdodDowLHJhbms6byxib3JkZXJUeXBlOmV9LGM9YVtlXVtvLTFdLHU9aS5hZGREdW1teU5vZGUodCwiYm9yZGVyIixzLG4pO2FbZV1bb109dSx0LnNldFBhcmVudCh1LHIpLGMmJnQuc2V0RWRnZShjLHUse3dlaWdodDoxfSl9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmNoaWxkcmVuKCksKGZ1bmN0aW9uIGUobil7dmFyIGk9dC5jaGlsZHJlbihuKSxvPXQubm9kZShuKTtpZihpLmxlbmd0aCYmci5mb3JFYWNoKGksZSksci5oYXMobywibWluUmFuayIpKXtvLmJvcmRlckxlZnQ9W10sby5ib3JkZXJSaWdodD1bXTtmb3IodmFyIHM9by5taW5SYW5rLGM9by5tYXhSYW5rKzE7czxjOysrcylhKHQsImJvcmRlckxlZnQiLCJfYmwiLG4sbyxzKSxhKHQsImJvcmRlclJpZ2h0IiwiX2JyIixuLG8scyl9fSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO2Z1bmN0aW9uIGkodCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7YSh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe2EodC5lZGdlKGUpKX0pKX1mdW5jdGlvbiBhKHQpe3ZhciBlPXQud2lkdGg7dC53aWR0aD10LmhlaWdodCx0LmhlaWdodD1lfWZ1bmN0aW9uIG8odCl7dC55PS10Lnl9ZnVuY3Rpb24gcyh0KXt2YXIgZT10Lng7dC54PXQueSx0Lnk9ZX10LmV4cG9ydHM9e2FkanVzdDpmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJsciIhPT1lJiYicmwiIT09ZXx8aSh0KX0sdW5kbzpmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyJidCIhPT1lJiYicmwiIT09ZXx8ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7byh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMsbyksci5oYXMobiwieSIpJiZvKG4pfSkpfSh0KTsibHIiIT09ZSYmInJsIiE9PWV8fCghZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cyh0Lm5vZGUoZSkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmZvckVhY2gobi5wb2ludHMscyksci5oYXMobiwieCIpJiZzKG4pfSkpfSh0KSxpKHQpKX19fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDM1NyksYT1uKDM1OCksbz1uKDM1OSkscz1uKDM2MyksYz1uKDM2NCksdT1uKDIwKS5HcmFwaCxsPW4oOCk7ZnVuY3Rpb24gaCh0LGUsbil7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBzKHQsZSxuKX0pKX1mdW5jdGlvbiBmKHQsZSl7dmFyIG49bmV3IHU7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ3JhcGgoKS5yb290LGE9byh0LGksbixlKTtyLmZvckVhY2goYS52cywoZnVuY3Rpb24oZSxuKXt0Lm5vZGUoZSkub3JkZXI9bn0pKSxjKHQsbixhLnZzKX0pKX1mdW5jdGlvbiBkKHQsZSl7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3IuZm9yRWFjaChlLChmdW5jdGlvbihlLG4pe3Qubm9kZShlKS5vcmRlcj1ufSkpfSkpfXQuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1sLm1heFJhbmsodCksbj1oKHQsci5yYW5nZSgxLGUrMSksImluRWRnZXMiKSxvPWgodCxyLnJhbmdlKGUtMSwtMSwtMSksIm91dEVkZ2VzIikscz1pKHQpO2QodCxzKTtmb3IodmFyIGMsdT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscD0wLHk9MDt5PDQ7KytwLCsreSl7ZihwJTI/bjpvLHAlND49Mikscz1sLmJ1aWxkTGF5ZXJNYXRyaXgodCk7dmFyIGc9YSh0LHMpO2c8dSYmKHk9MCxjPXIuY2xvbmVEZWVwKHMpLHU9Zyl9ZCh0LGMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT17fSxuPXIuZmlsdGVyKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIXQuY2hpbGRyZW4oZSkubGVuZ3RofSkpLGk9ci5tYXgoci5tYXAobiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxhPXIubWFwKHIucmFuZ2UoaSsxKSwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTt2YXIgbz1yLnNvcnRCeShuLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSk7cmV0dXJuIHIuZm9yRWFjaChvLChmdW5jdGlvbiBuKGkpe2lmKHIuaGFzKGUsaSkpcmV0dXJuO2VbaV09ITA7dmFyIG89dC5ub2RlKGkpO2Fbby5yYW5rXS5wdXNoKGkpLHIuZm9yRWFjaCh0LnN1Y2Nlc3NvcnMoaSksbil9KSksYX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTtmdW5jdGlvbiBpKHQsZSxuKXtmb3IodmFyIGk9ci56aXBPYmplY3QobixyLm1hcChuLChmdW5jdGlvbih0LGUpe3JldHVybiBlfSkpKSxhPXIuZmxhdHRlbihyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gci5zb3J0Qnkoci5tYXAodC5vdXRFZGdlcyhlKSwoZnVuY3Rpb24oZSl7cmV0dXJue3BvczppW2Uud10sd2VpZ2h0OnQuZWRnZShlKS53ZWlnaHR9fSkpLCJwb3MiKX0pKSwhMCksbz0xO288bi5sZW5ndGg7KW88PD0xO3ZhciBzPTIqby0xO28tPTE7dmFyIGM9ci5tYXAobmV3IEFycmF5KHMpLChmdW5jdGlvbigpe3JldHVybiAwfSkpLHU9MDtyZXR1cm4gci5mb3JFYWNoKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5wb3MrbztjW2VdKz10LndlaWdodDtmb3IodmFyIG49MDtlPjA7KWUlMiYmKG4rPWNbZSsxXSksY1tlPWUtMT4+MV0rPXQud2VpZ2h0O3UrPXQud2VpZ2h0Km59KSkpLHV9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTAscj0xO3I8ZS5sZW5ndGg7KytyKW4rPWkodCxlW3ItMV0sZVtyXSk7cmV0dXJuIG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oMzYwKSxhPW4oMzYxKSxvPW4oMzYyKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4scyxjKXt2YXIgdT1lLmNoaWxkcmVuKG4pLGw9ZS5ub2RlKG4pLGg9bD9sLmJvcmRlckxlZnQ6dm9pZCAwLGY9bD9sLmJvcmRlclJpZ2h0OnZvaWQgMCxkPXt9O2gmJih1PXIuZmlsdGVyKHUsKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aCYmdCE9PWZ9KSkpO3ZhciBwPWkoZSx1KTtyLmZvckVhY2gocCwoZnVuY3Rpb24obil7aWYoZS5jaGlsZHJlbihuLnYpLmxlbmd0aCl7dmFyIGk9dChlLG4udixzLGMpO2Rbbi52XT1pLHIuaGFzKGksImJhcnljZW50ZXIiKSYmKGE9bixvPWksci5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpPyhhLmJhcnljZW50ZXI9by5iYXJ5Y2VudGVyLGEud2VpZ2h0PW8ud2VpZ2h0KTooYS5iYXJ5Y2VudGVyPShhLmJhcnljZW50ZXIqYS53ZWlnaHQrby5iYXJ5Y2VudGVyKm8ud2VpZ2h0KS8oYS53ZWlnaHQrby53ZWlnaHQpLGEud2VpZ2h0Kz1vLndlaWdodCkpfXZhciBhLG99KSk7dmFyIHk9YShwLHMpOyFmdW5jdGlvbih0LGUpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt0LnZzPXIuZmxhdHRlbih0LnZzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGVbdF0/ZVt0XS52czp0fSkpLCEwKX0pKX0oeSxkKTt2YXIgZz1vKHksYyk7aWYoaCYmKGcudnM9ci5mbGF0dGVuKFtoLGcudnMsZl0sITApLGUucHJlZGVjZXNzb3JzKGgpLmxlbmd0aCkpe3ZhciB2PWUubm9kZShlLnByZWRlY2Vzc29ycyhoKVswXSksbT1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoZilbMF0pO3IuaGFzKGcsImJhcnljZW50ZXIiKXx8KGcuYmFyeWNlbnRlcj0wLGcud2VpZ2h0PTApLGcuYmFyeWNlbnRlcj0oZy5iYXJ5Y2VudGVyKmcud2VpZ2h0K3Yub3JkZXIrbS5vcmRlcikvKGcud2VpZ2h0KzIpLGcud2VpZ2h0Kz0yfXJldHVybiBnfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIubWFwKGUsKGZ1bmN0aW9uKGUpe3ZhciBuPXQuaW5FZGdlcyhlKTtpZihuLmxlbmd0aCl7dmFyIGk9ci5yZWR1Y2UobiwoZnVuY3Rpb24oZSxuKXt2YXIgcj10LmVkZ2UobiksaT10Lm5vZGUobi52KTtyZXR1cm57c3VtOmUuc3VtK3Iud2VpZ2h0Kmkub3JkZXIsd2VpZ2h0OmUud2VpZ2h0K3Iud2VpZ2h0fX0pLHtzdW06MCx3ZWlnaHQ6MH0pO3JldHVybnt2OmUsYmFyeWNlbnRlcjppLnN1bS9pLndlaWdodCx3ZWlnaHQ6aS53ZWlnaHR9fXJldHVybnt2OmV9fSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiByLmZvckVhY2godCwoZnVuY3Rpb24odCxlKXt2YXIgaT1uW3Qudl09e2luZGVncmVlOjAsaW46W10sb3V0OltdLHZzOlt0LnZdLGk6ZX07ci5pc1VuZGVmaW5lZCh0LmJhcnljZW50ZXIpfHwoaS5iYXJ5Y2VudGVyPXQuYmFyeWNlbnRlcixpLndlaWdodD10LndlaWdodCl9KSksci5mb3JFYWNoKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIGU9blt0LnZdLGk9blt0LnddO3IuaXNVbmRlZmluZWQoZSl8fHIuaXNVbmRlZmluZWQoaSl8fChpLmluZGVncmVlKyssZS5vdXQucHVzaChuW3Qud10pKX0pKSxmdW5jdGlvbih0KXt2YXIgZT1bXTtmdW5jdGlvbiBuKHQpe3JldHVybiBmdW5jdGlvbihlKXtlLm1lcmdlZHx8KHIuaXNVbmRlZmluZWQoZS5iYXJ5Y2VudGVyKXx8ci5pc1VuZGVmaW5lZCh0LmJhcnljZW50ZXIpfHxlLmJhcnljZW50ZXI+PXQuYmFyeWNlbnRlcikmJmZ1bmN0aW9uKHQsZSl7dmFyIG49MCxyPTA7dC53ZWlnaHQmJihuKz10LmJhcnljZW50ZXIqdC53ZWlnaHQscis9dC53ZWlnaHQpO2Uud2VpZ2h0JiYobis9ZS5iYXJ5Y2VudGVyKmUud2VpZ2h0LHIrPWUud2VpZ2h0KTt0LnZzPWUudnMuY29uY2F0KHQudnMpLHQuYmFyeWNlbnRlcj1uL3IsdC53ZWlnaHQ9cix0Lmk9TWF0aC5taW4oZS5pLHQuaSksZS5tZXJnZWQ9ITB9KHQsZSl9fWZ1bmN0aW9uIGkoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe24uaW4ucHVzaChlKSwwPT0tLW4uaW5kZWdyZWUmJnQucHVzaChuKX19Zm9yKDt0Lmxlbmd0aDspe3ZhciBhPXQucG9wKCk7ZS5wdXNoKGEpLHIuZm9yRWFjaChhLmluLnJldmVyc2UoKSxuKGEpKSxyLmZvckVhY2goYS5vdXQsaShhKSl9cmV0dXJuIHIubWFwKHIuZmlsdGVyKGUsKGZ1bmN0aW9uKHQpe3JldHVybiF0Lm1lcmdlZH0pKSwoZnVuY3Rpb24odCl7cmV0dXJuIHIucGljayh0LFsidnMiLCJpIiwiYmFyeWNlbnRlciIsIndlaWdodCJdKX0pKX0oci5maWx0ZXIobiwoZnVuY3Rpb24odCl7cmV0dXJuIXQuaW5kZWdyZWV9KSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDgpO2Z1bmN0aW9uIGEodCxlLG4pe2Zvcih2YXIgaTtlLmxlbmd0aCYmKGk9ci5sYXN0KGUpKS5pPD1uOyllLnBvcCgpLHQucHVzaChpLnZzKSxuKys7cmV0dXJuIG59dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49aS5wYXJ0aXRpb24odCwoZnVuY3Rpb24odCl7cmV0dXJuIHIuaGFzKHQsImJhcnljZW50ZXIiKX0pKSxvPW4ubGhzLHM9ci5zb3J0Qnkobi5yaHMsKGZ1bmN0aW9uKHQpe3JldHVybi10Lml9KSksYz1bXSx1PTAsbD0wLGg9MDtvLnNvcnQoKGY9ISFlLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYmFyeWNlbnRlcjxlLmJhcnljZW50ZXI/LTE6dC5iYXJ5Y2VudGVyPmUuYmFyeWNlbnRlcj8xOmY/ZS5pLXQuaTp0LmktZS5pfSkpLGg9YShjLHMsaCksci5mb3JFYWNoKG8sKGZ1bmN0aW9uKHQpe2grPXQudnMubGVuZ3RoLGMucHVzaCh0LnZzKSx1Kz10LmJhcnljZW50ZXIqdC53ZWlnaHQsbCs9dC53ZWlnaHQsaD1hKGMscyxoKX0pKTt2YXIgZjt2YXIgZD17dnM6ci5mbGF0dGVuKGMsITApfTtsJiYoZC5iYXJ5Y2VudGVyPXUvbCxkLndlaWdodD1sKTtyZXR1cm4gZH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoO3QuaGFzTm9kZShlPXIudW5pcXVlSWQoIl9yb290IikpOyk7cmV0dXJuIGV9KHQpLG89bmV3IGkoe2NvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3Jvb3Q6YX0pLnNldERlZmF1bHROb2RlTGFiZWwoKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSl9KSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGkpe3ZhciBzPXQubm9kZShpKSxjPXQucGFyZW50KGkpOyhzLnJhbms9PT1lfHxzLm1pblJhbms8PWUmJmU8PXMubWF4UmFuaykmJihvLnNldE5vZGUoaSksby5zZXRQYXJlbnQoaSxjfHxhKSxyLmZvckVhY2godFtuXShpKSwoZnVuY3Rpb24oZSl7dmFyIG49ZS52PT09aT9lLnc6ZS52LGE9by5lZGdlKG4saSkscz1yLmlzVW5kZWZpbmVkKGEpPzA6YS53ZWlnaHQ7by5zZXRFZGdlKG4saSx7d2VpZ2h0OnQuZWRnZShlKS53ZWlnaHQrc30pfSkpLHIuaGFzKHMsIm1pblJhbmsiKSYmby5zZXROb2RlKGkse2JvcmRlckxlZnQ6cy5ib3JkZXJMZWZ0W2VdLGJvcmRlclJpZ2h0OnMuYm9yZGVyUmlnaHRbZV19KSl9KSksb319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGksYT17fTtyLmZvckVhY2gobiwoZnVuY3Rpb24obil7Zm9yKHZhciByLG8scz10LnBhcmVudChuKTtzOyl7aWYoKHI9dC5wYXJlbnQocykpPyhvPWFbcl0sYVtyXT1zKToobz1pLGk9cyksbyYmbyE9PXMpcmV0dXJuIHZvaWQgZS5zZXRFZGdlKG8scyk7cz1yfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oOCksYT1uKDM2NikucG9zaXRpb25YO3QuZXhwb3J0cz1mdW5jdGlvbih0KXsoZnVuY3Rpb24odCl7dmFyIGU9aS5idWlsZExheWVyTWF0cml4KHQpLG49dC5ncmFwaCgpLnJhbmtzZXAsYT0wO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgaT1yLm1heChyLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLmhlaWdodH0pKSk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS55PWEraS8yfSkpLGErPWkrbn0pKX0pKHQ9aS5hc05vbkNvbXBvdW5kR3JhcGgodCkpLHIuZm9yRWFjaChhKHQpLChmdW5jdGlvbihlLG4pe3Qubm9kZShuKS54PWV9KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDIwKS5HcmFwaCxhPW4oOCk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBuPXt9O3JldHVybiByLnJlZHVjZShlLChmdW5jdGlvbihlLGkpe3ZhciBhPTAsbz0wLHM9ZS5sZW5ndGgsdT1yLmxhc3QoaSk7cmV0dXJuIHIuZm9yRWFjaChpLChmdW5jdGlvbihlLGwpe3ZhciBoPWZ1bmN0aW9uKHQsZSl7aWYodC5ub2RlKGUpLmR1bW15KXJldHVybiByLmZpbmQodC5wcmVkZWNlc3NvcnMoZSksKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkuZHVtbXl9KSl9KHQsZSksZj1oP3Qubm9kZShoKS5vcmRlcjpzOyhofHxlPT09dSkmJihyLmZvckVhY2goaS5zbGljZShvLGwrMSksKGZ1bmN0aW9uKGUpe3IuZm9yRWFjaCh0LnByZWRlY2Vzc29ycyhlKSwoZnVuY3Rpb24ocil7dmFyIGk9dC5ub2RlKHIpLG89aS5vcmRlcjshKG88YXx8ZjxvKXx8aS5kdW1teSYmdC5ub2RlKGUpLmR1bW15fHxjKG4scixlKX0pKX0pKSxvPWwrMSxhPWYpfSkpLGl9KSksbn1mdW5jdGlvbiBzKHQsZSl7dmFyIG49e307ZnVuY3Rpb24gaShlLGksYSxvLHMpe3ZhciB1O3IuZm9yRWFjaChyLnJhbmdlKGksYSksKGZ1bmN0aW9uKGkpe3U9ZVtpXSx0Lm5vZGUodSkuZHVtbXkmJnIuZm9yRWFjaCh0LnByZWRlY2Vzc29ycyh1KSwoZnVuY3Rpb24oZSl7dmFyIHI9dC5ub2RlKGUpO3IuZHVtbXkmJihyLm9yZGVyPG98fHIub3JkZXI+cykmJmMobixlLHUpfSkpfSkpfXJldHVybiByLnJlZHVjZShlLChmdW5jdGlvbihlLG4pe3ZhciBhLG89LTEscz0wO3JldHVybiByLmZvckVhY2gobiwoZnVuY3Rpb24ocixjKXtpZigiYm9yZGVyIj09PXQubm9kZShyKS5kdW1teSl7dmFyIHU9dC5wcmVkZWNlc3NvcnMocik7dS5sZW5ndGgmJihhPXQubm9kZSh1WzBdKS5vcmRlcixpKG4scyxjLG8sYSkscz1jLG89YSl9aShuLHMsbi5sZW5ndGgsYSxlLmxlbmd0aCl9KSksbn0pKSxufWZ1bmN0aW9uIGModCxlLG4pe2lmKGU+bil7dmFyIHI9ZTtlPW4sbj1yfXZhciBpPXRbZV07aXx8KHRbZV09aT17fSksaVtuXT0hMH1mdW5jdGlvbiB1KHQsZSxuKXtpZihlPm4pe3ZhciBpPWU7ZT1uLG49aX1yZXR1cm4gci5oYXModFtlXSxuKX1mdW5jdGlvbiBsKHQsZSxuLGkpe3ZhciBhPXt9LG89e30scz17fTtyZXR1cm4gci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LChmdW5jdGlvbih0LGUpe2FbdF09dCxvW3RdPXQsc1t0XT1lfSkpfSkpLHIuZm9yRWFjaChlLChmdW5jdGlvbih0KXt2YXIgZT0tMTtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dmFyIGM9aSh0KTtpZihjLmxlbmd0aClmb3IodmFyIGw9KChjPXIuc29ydEJ5KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBzW3RdfSkpKS5sZW5ndGgtMSkvMixoPU1hdGguZmxvb3IobCksZj1NYXRoLmNlaWwobCk7aDw9ZjsrK2gpe3ZhciBkPWNbaF07b1t0XT09PXQmJmU8c1tkXSYmIXUobix0LGQpJiYob1tkXT10LG9bdF09YVt0XT1hW2RdLGU9c1tkXSl9fSkpfSkpLHtyb290OmEsYWxpZ246b319ZnVuY3Rpb24gaCh0LGUsbixhLG8pe3ZhciBzPXt9LGM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89bmV3IGkscz10LmdyYXBoKCksYz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcyxjPWkubm9kZShhKSx1PWkubm9kZShvKSxsPTA7aWYobCs9Yy53aWR0aC8yLHIuaGFzKGMsImxhYmVscG9zIikpc3dpdGNoKGMubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPS1jLndpZHRoLzI7YnJlYWs7Y2FzZSJyIjpzPWMud2lkdGgvMn1pZihzJiYobCs9bj9zOi1zKSxzPTAsbCs9KGMuZHVtbXk/ZTp0KS8yLGwrPSh1LmR1bW15P2U6dCkvMixsKz11LndpZHRoLzIsci5oYXModSwibGFiZWxwb3MiKSlzd2l0Y2godS5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOnM9dS53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz0tdS53aWR0aC8yfXJldHVybiBzJiYobCs9bj9zOi1zKSxzPTAsbH19KHMubm9kZXNlcCxzLmVkZ2VzZXAsYSk7cmV0dXJuIHIuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgaTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIHI9bltlXTtpZihvLnNldE5vZGUociksaSl7dmFyIGE9bltpXSxzPW8uZWRnZShhLHIpO28uc2V0RWRnZShhLHIsTWF0aC5tYXgoYyh0LGUsaSksc3x8MCkpfWk9ZX0pKX0pKSxvfSh0LGUsbixvKSx1PW8/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgbj1jLm5vZGVzKCkscj1uLnBvcCgpLGk9e307cjspaVtyXT90KHIpOihpW3JdPSEwLG4ucHVzaChyKSxuPW4uY29uY2F0KGUocikpKSxyPW4ucG9wKCl9cmV0dXJuIGwoKGZ1bmN0aW9uKHQpe3NbdF09Yy5pbkVkZ2VzKHQpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxzW2Uudl0rYy5lZGdlKGUpKX0pLDApfSksYy5wcmVkZWNlc3NvcnMuYmluZChjKSksbCgoZnVuY3Rpb24oZSl7dmFyIG49Yy5vdXRFZGdlcyhlKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWluKHQsc1tlLnddLWMuZWRnZShlKSl9KSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHI9dC5ub2RlKGUpO24hPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJnIuYm9yZGVyVHlwZSE9PXUmJihzW2VdPU1hdGgubWF4KHNbZV0sbikpfSksYy5zdWNjZXNzb3JzLmJpbmQoYykpLHIuZm9yRWFjaChhLChmdW5jdGlvbih0KXtzW3RdPXNbblt0XV19KSksc31mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHIubWluQnkoci52YWx1ZXMoZSksKGZ1bmN0aW9uKGUpe3ZhciBuPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtyZXR1cm4gci5mb3JJbihlLChmdW5jdGlvbihlLHIpe3ZhciBhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9kZShlKS53aWR0aH0odCxyKS8yO249TWF0aC5tYXgoZSthLG4pLGk9TWF0aC5taW4oZS1hLGkpfSkpLG4taX0pKX1mdW5jdGlvbiBkKHQsZSl7dmFyIG49ci52YWx1ZXMoZSksaT1yLm1pbihuKSxhPXIubWF4KG4pO3IuZm9yRWFjaChbInUiLCJkIl0sKGZ1bmN0aW9uKG4pe3IuZm9yRWFjaChbImwiLCJyIl0sKGZ1bmN0aW9uKG8pe3ZhciBzLGM9bitvLHU9dFtjXTtpZih1IT09ZSl7dmFyIGw9ci52YWx1ZXModSk7KHM9ImwiPT09bz9pLXIubWluKGwpOmEtci5tYXgobCkpJiYodFtjXT1yLm1hcFZhbHVlcyh1LChmdW5jdGlvbih0KXtyZXR1cm4gdCtzfSkpKX19KSl9KSl9ZnVuY3Rpb24gcCh0LGUpe3JldHVybiByLm1hcFZhbHVlcyh0LnVsLChmdW5jdGlvbihuLGkpe2lmKGUpcmV0dXJuIHRbZS50b0xvd2VyQ2FzZSgpXVtpXTt2YXIgYT1yLnNvcnRCeShyLm1hcCh0LGkpKTtyZXR1cm4oYVsxXSthWzJdKS8yfSkpfXQuZXhwb3J0cz17cG9zaXRpb25YOmZ1bmN0aW9uKHQpe3ZhciBlLG49YS5idWlsZExheWVyTWF0cml4KHQpLGk9ci5tZXJnZShvKHQsbikscyh0LG4pKSxjPXt9O3IuZm9yRWFjaChbInUiLCJkIl0sKGZ1bmN0aW9uKGEpe2U9InUiPT09YT9uOnIudmFsdWVzKG4pLnJldmVyc2UoKSxyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihuKXsiciI9PT1uJiYoZT1yLm1hcChlLChmdW5jdGlvbih0KXtyZXR1cm4gci52YWx1ZXModCkucmV2ZXJzZSgpfSkpKTt2YXIgbz0oInUiPT09YT90LnByZWRlY2Vzc29yczp0LnN1Y2Nlc3NvcnMpLmJpbmQodCkscz1sKHQsZSxpLG8pLHU9aCh0LGUscy5yb290LHMuYWxpZ24sInIiPT09bik7InIiPT09biYmKHU9ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSkpLGNbYStuXT11fSkpfSkpO3ZhciB1PWYodCxjKTtyZXR1cm4gZChjLHUpLHAoYyx0LmdyYXBoKCkuYWxpZ24pfSxmaW5kVHlwZTFDb25mbGljdHM6byxmaW5kVHlwZTJDb25mbGljdHM6cyxhZGRDb25mbGljdDpjLGhhc0NvbmZsaWN0OnUsdmVydGljYWxBbGlnbm1lbnQ6bCxob3Jpem9udGFsQ29tcGFjdGlvbjpoLGFsaWduQ29vcmRpbmF0ZXM6ZCxmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudDpmLGJhbGFuY2U6cH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big4KSxhPW4oMjApLkdyYXBoO3QuZXhwb3J0cz17ZGVidWdPcmRlcmluZzpmdW5jdGlvbih0KXt2YXIgZT1pLmJ1aWxkTGF5ZXJNYXRyaXgodCksbj1uZXcgYSh7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLnNldEdyYXBoKHt9KTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7bi5zZXROb2RlKGUse2xhYmVsOmV9KSxuLnNldFBhcmVudChlLCJsYXllciIrdC5ub2RlKGUpLnJhbmspfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKHQpe24uc2V0RWRnZSh0LnYsdC53LHt9LHQubmFtZSl9KSksci5mb3JFYWNoKGUsKGZ1bmN0aW9uKHQsZSl7dmFyIGk9ImxheWVyIitlO24uc2V0Tm9kZShpLHtyYW5rOiJzYW1lIn0pLHIucmVkdWNlKHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uc2V0RWRnZSh0LGUse3N0eWxlOiJpbnZpcyJ9KSxlfSkpfSkpLG59fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9IjAuOC41In0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17bm9kZTpuKDE2NiksY2lyY2xlOm4oMTY3KSxlbGxpcHNlOm4oOTcpLHBvbHlnb246bigxNjgpLHJlY3Q6bigxNjkpfX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQqZT4wfXQuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsYyx1LGwsaCxmLGQscCx5LGcsdjtpZihhPWUueS10Lnkscz10LngtZS54LHU9ZS54KnQueS10LngqZS55LGQ9YSpyLngrcypyLnkrdSxwPWEqaS54K3MqaS55K3UsMCE9PWQmJjAhPT1wJiZuKGQscCkpcmV0dXJuO2lmKG89aS55LXIueSxjPXIueC1pLngsbD1pLngqci55LXIueCppLnksaD1vKnQueCtjKnQueStsLGY9byplLngrYyplLnkrbCwwIT09aCYmMCE9PWYmJm4oaCxmKSlyZXR1cm47aWYoMD09PSh5PWEqYy1vKnMpKXJldHVybjtyZXR1cm4gZz1NYXRoLmFicyh5LzIpLHt4Oih2PXMqbC1jKnUpPDA/KHYtZykveTooditnKS95LHk6KHY9byp1LWEqbCk8MD8odi1nKS95Oih2K2cpL3l9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDQpLGk9bigzMSksYT1uKDE1NCkubGF5b3V0O3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4oMzcyKSxlPW4oMzc1KSxpPW4oMzc2KSx1PW4oMzc3KSxsPW4oMzc4KSxoPW4oMzc5KSxmPW4oMzgwKSxkPW4oMzgxKSxwPW4oMzgyKSx5PWZ1bmN0aW9uKG4seSl7IWZ1bmN0aW9uKHQpe3Qubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10Lm5vZGUoZSk7ci5oYXMobiwibGFiZWwiKXx8dC5jaGlsZHJlbihlKS5sZW5ndGh8fChuLmxhYmVsPWUpLHIuaGFzKG4sInBhZGRpbmdYIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ0xlZnQ6bi5wYWRkaW5nWCxwYWRkaW5nUmlnaHQ6bi5wYWRkaW5nWH0pLHIuaGFzKG4sInBhZGRpbmdZIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ1RvcDpuLnBhZGRpbmdZLHBhZGRpbmdCb3R0b206bi5wYWRkaW5nWX0pLHIuaGFzKG4sInBhZGRpbmciKSYmci5kZWZhdWx0cyhuLHtwYWRkaW5nTGVmdDpuLnBhZGRpbmcscGFkZGluZ1JpZ2h0Om4ucGFkZGluZyxwYWRkaW5nVG9wOm4ucGFkZGluZyxwYWRkaW5nQm90dG9tOm4ucGFkZGluZ30pLHIuZGVmYXVsdHMobixvKSxyLmVhY2goWyJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0sKGZ1bmN0aW9uKHQpe25bdF09TnVtYmVyKG5bdF0pfSkpLHIuaGFzKG4sIndpZHRoIikmJihuLl9wcmV2V2lkdGg9bi53aWR0aCksci5oYXMobiwiaGVpZ2h0IikmJihuLl9wcmV2SGVpZ2h0PW4uaGVpZ2h0KX0pKSx0LmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sImxhYmVsIil8fChuLmxhYmVsPSIiKSxyLmRlZmF1bHRzKG4scyl9KSl9KHkpO3ZhciBnPWMobiwib3V0cHV0Iiksdj1jKGcsImNsdXN0ZXJzIiksbT1jKGcsImVkZ2VQYXRocyIpLGI9aShjKGcsImVkZ2VMYWJlbHMiKSx5KSx4PXQoYyhnLCJub2RlcyIpLHksZCk7YSh5KSxsKHgseSksaChiLHkpLHUobSx5LHApO3ZhciBfPWUodix5KTtmKF8seSksZnVuY3Rpb24odCl7ci5lYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpO3IuaGFzKG4sIl9wcmV2V2lkdGgiKT9uLndpZHRoPW4uX3ByZXZXaWR0aDpkZWxldGUgbi53aWR0aCxyLmhhcyhuLCJfcHJldkhlaWdodCIpP24uaGVpZ2h0PW4uX3ByZXZIZWlnaHQ6ZGVsZXRlIG4uaGVpZ2h0LGRlbGV0ZSBuLl9wcmV2V2lkdGgsZGVsZXRlIG4uX3ByZXZIZWlnaHR9KSl9KHkpfTtyZXR1cm4geS5jcmVhdGVOb2Rlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLHkpOnR9LHkuY3JlYXRlQ2x1c3RlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCx5KTplfSx5LmNyZWF0ZUVkZ2VMYWJlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCx5KTppfSx5LmNyZWF0ZUVkZ2VQYXRocz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LHkpOnV9LHkuc2hhcGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPXQseSk6ZH0seS5hcnJvd3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dCx5KTpwfSx5fTt2YXIgbz17cGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLHBhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxyeDowLHJ5OjAsc2hhcGU6InJlY3QifSxzPXthcnJvd2hlYWQ6Im5vcm1hbCIsY3VydmU6aS5jdXJ2ZUxpbmVhcn07ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPXQuc2VsZWN0KCJnLiIrZSk7cmV0dXJuIG4uZW1wdHkoKSYmKG49dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsZSkpLG59fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDQpLGk9big5OCksYT1uKDE0KSxvPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHMsYz1lLm5vZGVzKCkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYS5pc1N1YmdyYXBoKGUsdCl9KSksdT10LnNlbGVjdEFsbCgiZy5ub2RlIikuZGF0YShjLChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTt1LmV4aXQoKS5yZW1vdmUoKSx1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJub2RlIikuc3R5bGUoIm9wYWNpdHkiLDApLCh1PXQuc2VsZWN0QWxsKCJnLm5vZGUiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHM9ZS5ub2RlKHQpLGM9by5zZWxlY3QodGhpcyk7YS5hcHBseUNsYXNzKGMscy5jbGFzcywoYy5jbGFzc2VkKCJ1cGRhdGUiKT8idXBkYXRlICI6IiIpKyJub2RlIiksYy5zZWxlY3QoImcubGFiZWwiKS5yZW1vdmUoKTt2YXIgdT1jLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxsPWkodSxzKSxoPW5bcy5zaGFwZV0sZj1yLnBpY2sobC5ub2RlKCkuZ2V0QkJveCgpLCJ3aWR0aCIsImhlaWdodCIpO3MuZWxlbT10aGlzLHMuaWQmJmMuYXR0cigiaWQiLHMuaWQpLHMubGFiZWxJZCYmdS5hdHRyKCJpZCIscy5sYWJlbElkKSxyLmhhcyhzLCJ3aWR0aCIpJiYoZi53aWR0aD1zLndpZHRoKSxyLmhhcyhzLCJoZWlnaHQiKSYmKGYuaGVpZ2h0PXMuaGVpZ2h0KSxmLndpZHRoKz1zLnBhZGRpbmdMZWZ0K3MucGFkZGluZ1JpZ2h0LGYuaGVpZ2h0Kz1zLnBhZGRpbmdUb3Arcy5wYWRkaW5nQm90dG9tLHUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHMucGFkZGluZ0xlZnQtcy5wYWRkaW5nUmlnaHQpLzIrIiwiKyhzLnBhZGRpbmdUb3Atcy5wYWRkaW5nQm90dG9tKS8yKyIpIik7dmFyIGQ9by5zZWxlY3QodGhpcyk7ZC5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKS5yZW1vdmUoKTt2YXIgcD1oKGQsZixzKS5jbGFzc2VkKCJsYWJlbC1jb250YWluZXIiLCEwKTthLmFwcGx5U3R5bGUocCxzLnN0eWxlKTt2YXIgeT1wLm5vZGUoKS5nZXRCQm94KCk7cy53aWR0aD15LndpZHRoLHMuaGVpZ2h0PXkuaGVpZ2h0fSkpLHM9dS5leGl0P3UuZXhpdCgpOnUuc2VsZWN0QWxsKG51bGwpO3JldHVybiBhLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSx1fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmFwcGVuZCgidGV4dCIpLGk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49IiIscj0hMSxpPTA7aTx0Lmxlbmd0aDsrK2kpaWYoZT10W2ldLHIpe3N3aXRjaChlKXtjYXNlIm4iOm4rPSJcbiI7YnJlYWs7ZGVmYXVsdDpuKz1lfXI9ITF9ZWxzZSJcXCI9PT1lP3I9ITA6bis9ZTtyZXR1cm4gbn0oZS5sYWJlbCkuc3BsaXQoIlxuIiksYT0wO2E8aS5sZW5ndGg7YSsrKW4uYXBwZW5kKCJ0c3BhbiIpLmF0dHIoInhtbDpzcGFjZSIsInByZXNlcnZlIikuYXR0cigiZHkiLCIxZW0iKS5hdHRyKCJ4IiwiMSIpLnRleHQoaVthXSk7cmV0dXJuIHIuYXBwbHlTdHlsZShuLGUubGFiZWxTdHlsZSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10O3JldHVybiBuLm5vZGUoKS5hcHBlbmRDaGlsZChlLmxhYmVsKSxyLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNCksaT1uKDMxKSxhPW4oOTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89ZS5ub2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNTdWJncmFwaChlLHQpfSkpLHM9dC5zZWxlY3RBbGwoImcuY2x1c3RlciIpLmRhdGEobywoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7cy5zZWxlY3RBbGwoIioiKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIikuYXR0cigiaWQiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLmlkfSkpLnN0eWxlKCJvcGFjaXR5IiwwKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKSxyLmFwcGx5VHJhbnNpdGlvbihzLGUpLnN0eWxlKCJvcGFjaXR5IiwxKSxzLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxyPWkuc2VsZWN0KHRoaXMpO2kuc2VsZWN0KHRoaXMpLmFwcGVuZCgicmVjdCIpO3ZhciBvPXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpO2EobyxuLG4uY2x1c3RlckxhYmVsUG9zKX0pKSxzLnNlbGVjdEFsbCgicmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUubm9kZSh0KSxhPWkuc2VsZWN0KHRoaXMpO3IuYXBwbHlTdHlsZShhLG4uc3R5bGUpfSkpLG49cy5leGl0P3MuZXhpdCgpOnMuc2VsZWN0QWxsKG51bGwpO3JldHVybiByLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0KSxpPW4oOTgpLGE9bigxNCksbz1uKDMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixzPXQuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpLmRhdGEoZS5lZGdlcygpLChmdW5jdGlvbih0KXtyZXR1cm4gYS5lZGdlVG9JZCh0KX0pKS5jbGFzc2VkKCJ1cGRhdGUiLCEwKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZWRnZUxhYmVsIiwhMCkuc3R5bGUoIm9wYWNpdHkiLDApLChzPXQuc2VsZWN0QWxsKCJnLmVkZ2VMYWJlbCIpKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKTtuLnNlbGVjdCgiLmxhYmVsIikucmVtb3ZlKCk7dmFyIGE9ZS5lZGdlKHQpLHM9aShuLGUuZWRnZSh0KSwwLDApLmNsYXNzZWQoImxhYmVsIiwhMCksYz1zLm5vZGUoKS5nZXRCQm94KCk7YS5sYWJlbElkJiZzLmF0dHIoImlkIixhLmxhYmVsSWQpLHIuaGFzKGEsIndpZHRoIil8fChhLndpZHRoPWMud2lkdGgpLHIuaGFzKGEsImhlaWdodCIpfHwoYS5oZWlnaHQ9Yy5oZWlnaHQpfSkpLG49cy5leGl0P3MuZXhpdCgpOnMuc2VsZWN0QWxsKG51bGwpO3JldHVybiBhLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKSxzfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0KSxpPW4oMTY2KSxhPW4oMTQpLG89bigzMSk7ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPShvLmxpbmV8fG8uc3ZnLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpO3JldHVybihuLmN1cnZlfHxuLmludGVycG9sYXRlKSh0LmN1cnZlKSxuKGUpfXQuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9dC5zZWxlY3RBbGwoImcuZWRnZVBhdGgiKS5kYXRhKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuZWRnZVRvSWQodCl9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCksdT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VQYXRoIikuc3R5bGUoIm9wYWNpdHkiLDApO3JldHVybiBuLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwicGF0aCIpLmF0dHIoImQiLChmdW5jdGlvbih0KXt2YXIgbj1lLmVkZ2UodCksaT1lLm5vZGUodC52KS5lbGVtO3JldHVybiBzKG4sci5yYW5nZShuLnBvaW50cy5sZW5ndGgpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gZT0odD1pKS5nZXRCQm94KCkse3g6KG49dC5vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpLm11bHRpcGx5KHQuZ2V0U2NyZWVuQ1RNKCkpLnRyYW5zbGF0ZShlLndpZHRoLzIsZS5oZWlnaHQvMikpLmUseTpuLmZ9O3ZhciB0LGUsbn0pKSl9KSksbi5hcHBlbmQoImRlZnMiKSxufShjLGUpOyFmdW5jdGlvbih0LGUpe3ZhciBuPXQuZXhpdCgpO2EuYXBwbHlUcmFuc2l0aW9uKG4sZSkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpfShjLGUpO3ZhciBsPXZvaWQgMCE9PWMubWVyZ2U/Yy5tZXJnZSh1KTpjO3JldHVybiBhLmFwcGx5VHJhbnNpdGlvbihsLGUpLnN0eWxlKCJvcGFjaXR5IiwxKSxsLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPW8uc2VsZWN0KHRoaXMpLHI9ZS5lZGdlKHQpO3IuZWxlbT10aGlzLHIuaWQmJm4uYXR0cigiaWQiLHIuaWQpLGEuYXBwbHlDbGFzcyhuLHIuY2xhc3MsKG4uY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsiZWRnZVBhdGgiKX0pKSxsLnNlbGVjdEFsbCgicGF0aC5wYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpO24uYXJyb3doZWFkSWQ9ci51bmlxdWVJZCgiYXJyb3doZWFkIik7dmFyIGM9by5zZWxlY3QodGhpcykuYXR0cigibWFya2VyLWVuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuInVybCgiKyh0PWxvY2F0aW9uLmhyZWYsZT1uLmFycm93aGVhZElkLHQuc3BsaXQoIiMiKVswXSsiIyIrZSkrIikiO3ZhciB0LGV9KSkuc3R5bGUoImZpbGwiLCJub25lIik7YS5hcHBseVRyYW5zaXRpb24oYyxlKS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5lZGdlKGUpLHI9dC5ub2RlKGUudiksYT10Lm5vZGUoZS53KSxvPW4ucG9pbnRzLnNsaWNlKDEsbi5wb2ludHMubGVuZ3RoLTEpO3JldHVybiBvLnVuc2hpZnQoaShyLG9bMF0pKSxvLnB1c2goaShhLG9bby5sZW5ndGgtMV0pKSxzKG4sbyl9KGUsdCl9KSksYS5hcHBseVN0eWxlKGMsbi5zdHlsZSl9KSksbC5zZWxlY3RBbGwoImRlZnMgKiIpLnJlbW92ZSgpLGwuc2VsZWN0QWxsKCJkZWZzIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpOygwLG5bci5hcnJvd2hlYWRdKShvLnNlbGVjdCh0aGlzKSxyLmFycm93aGVhZElkLHIsImFycm93aGVhZCIpfSkpLGx9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQpLGk9bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLm5vZGUodCk7cmV0dXJuInRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE0KSxpPW4oMzEpLGE9big0NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0KXt2YXIgbj1lLmVkZ2UodCk7cmV0dXJuIGEuaGFzKG4sIngiKT8idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikiOiIifXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsbil9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTQpLGk9bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpO2Z1bmN0aW9uIGEodCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9bi5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKHQsZSkuc3R5bGUoIm9wYWNpdHkiLDEpLmF0dHIoInRyYW5zZm9ybSIsYSksci5hcHBseVRyYW5zaXRpb24obi5zZWxlY3RBbGwoInJlY3QiKSxlKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5oZWlnaHR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkud2lkdGgvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLWUubm9kZSh0KS5oZWlnaHQvMn0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNjkpLGk9big5NyksYT1uKDE2Nyksbz1uKDE2OCk7dC5leHBvcnRzPXtyZWN0OmZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixuLnJ4KS5hdHRyKCJyeSIsbi5yeSkuYXR0cigieCIsLWUud2lkdGgvMikuYXR0cigieSIsLWUuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixlLndpZHRoKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHIobix0KX0saX0sZWxsaXBzZTpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS53aWR0aC8yLGE9ZS5oZWlnaHQvMixvPXQuaW5zZXJ0KCJlbGxpcHNlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWUud2lkdGgvMikuYXR0cigieSIsLWUuaGVpZ2h0LzIpLmF0dHIoInJ4IixyKS5hdHRyKCJyeSIsYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBpKG4scixhLHQpfSxvfSxjaXJjbGU6ZnVuY3Rpb24odCxlLG4pe3ZhciByPU1hdGgubWF4KGUud2lkdGgsZS5oZWlnaHQpLzIsaT10Lmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsLWUud2lkdGgvMikuYXR0cigieSIsLWUuaGVpZ2h0LzIpLmF0dHIoInIiLHIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gYShuLHIsdCl9LGl9LGRpYW1vbmQ6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgqTWF0aC5TUVJUMi8yLGk9ZS5oZWlnaHQqTWF0aC5TUVJUMi8yLGE9W3t4OjAseTotaX0se3g6LXIseTowfSx7eDowLHk6aX0se3g6cix5OjB9XSxzPXQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixhLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvKG4sYSx0KX0sc319fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNCk7ZnVuY3Rpb24gaSh0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfXQuZXhwb3J0cz17ZGVmYXVsdDppLG5vcm1hbDppLHZlZTpmdW5jdGlvbih0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIEwgNCA1IHoiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfSx1bmRpcmVjdGVkOmZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBhPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgNSIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIik7ci5hcHBseVN0eWxlKGEsbltpKyJTdHlsZSJdKSxuW2krIkNsYXNzIl0mJmEuYXR0cigiY2xhc3MiLG5baSsiQ2xhc3MiXSl9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9IjAuNi40In0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcjtmdW5jdGlvbiBpKHQpe3JldHVybiByPXJ8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHQ9ZXNjYXBlKHQpLnJlcGxhY2UoLyUyNi9nLCImIikucmVwbGFjZSgvJTIzL2csIiMiKS5yZXBsYWNlKC8lM0IvZywiOyIpLHIuaW5uZXJIVE1MPXQsdW5lc2NhcGUoci50ZXh0Q29udGVudCl9bi5yKGUpO3ZhciBhPW4oMjMpLG89bi5uKGEpLHM9e2RlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LGM9e2RlYnVnOmZ1bmN0aW9uKCl7fSxpbmZvOmZ1bmN0aW9uKCl7fSx3YXJuOmZ1bmN0aW9uKCl7fSxlcnJvcjpmdW5jdGlvbigpe30sZmF0YWw6ZnVuY3Rpb24oKXt9fSx1PWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJmYXRhbCI7aXNOYU4odCkmJih0PXQudG9Mb3dlckNhc2UoKSx2b2lkIDAhPT1zW3RdJiYodD1zW3RdKSksYy50cmFjZT1mdW5jdGlvbigpe30sYy5kZWJ1Zz1mdW5jdGlvbigpe30sYy5pbmZvPWZ1bmN0aW9uKCl7fSxjLndhcm49ZnVuY3Rpb24oKXt9LGMuZXJyb3I9ZnVuY3Rpb24oKXt9LGMuZmF0YWw9ZnVuY3Rpb24oKXt9LHQ8PXMuZmF0YWwmJihjLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsbCgiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNW0iLGwoIkZBVEFMIikpKSx0PD1zLmVycm9yJiYoYy5lcnJvcj1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGwoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzFtIixsKCJFUlJPUiIpKSksdDw9cy53YXJuJiYoYy53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLGwoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szM20iLGwoIldBUk4iKSkpLHQ8PXMuaW5mbyYmKGMuaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxsKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzRtIixsKCJJTkZPIikpKSx0PD1zLmRlYnVnJiYoYy5kZWJ1Zz1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGwoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMybSIsbCgiREVCVUciKSkpfSxsPWZ1bmN0aW9uKHQpe3ZhciBlPW8oKSgpLmZvcm1hdCgic3MuU1NTIik7cmV0dXJuIiVjIi5jb25jYXQoZSwiIDogIikuY29uY2F0KHQsIiA6ICIpfSxoPW4oMCksZj1uKDE3MCksZD1uLm4oZikscD1uKDM2KSx5PW4oNzEpLGc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49MDtuPj0wOyl7aWYoISgobj10LmluZGV4T2YoIjxzY3JpcHQiKSk+PTApKXtlKz10LG49LTE7YnJlYWt9ZSs9dC5zdWJzdHIoMCxuKSwobj0odD10LnN1YnN0cihuKzEpKS5pbmRleE9mKCI8XC9zY3JpcHQ+IikpPj0wJiYobis9OSx0PXQuc3Vic3RyKG4pKX1yZXR1cm4gZX0sdj0vPGJyXHMqXC8/Pi9naSxtPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UodiwiI2JyIyIpfSxiPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoLyNiciMvZywiPGJyLz4iKX0seD1mdW5jdGlvbih0KXtyZXR1cm4iZmFsc2UiIT09dCYmITEhPT10fSxfPXtnZXRSb3dzOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiAxO3ZhciBlPW0odCk7cmV0dXJuKGU9ZS5yZXBsYWNlKC9cXG4vZywiI2JyIyIpKS5zcGxpdCgiI2JyIyIpfSxzYW5pdGl6ZVRleHQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10LHI9ITA7aWYoIWUuZmxvd2NoYXJ0fHwhMSE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMmJiJmYWxzZSIhPT1lLmZsb3djaGFydC5odG1sTGFiZWxzfHwocj0hMSkscil7dmFyIGk9ZS5zZWN1cml0eUxldmVsOyJhbnRpc2NyaXB0Ij09PWk/bj1nKG4pOiJsb29zZSIhPT1pJiYobj0obj0obj1tKG4pKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLG49YihuKSl9cmV0dXJuIG59LGhhc0JyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4vPGJyXHMqWy9dPz4vZ2kudGVzdCh0KX0sc3BsaXRCcmVha3M6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3BsaXQoLzxiclxzKlsvXT8+L2dpKX0sbGluZUJyZWFrUmVnZXg6dixyZW1vdmVTY3JpcHQ6ZyxnZXRVcmw6ZnVuY3Rpb24odCl7dmFyIGU9IiI7cmV0dXJuIHQmJihlPShlPShlPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGV9LGV2YWx1YXRlOnh9O2Z1bmN0aW9uIGsodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX1mdW5jdGlvbiB3KHQpe3JldHVybih3PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAsbj1uZXcgQXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn19KHQpfHxmdW5jdGlvbih0KXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX12YXIgVD17Y3VydmVCYXNpczpoLmN1cnZlQmFzaXMsY3VydmVCYXNpc0Nsb3NlZDpoLmN1cnZlQmFzaXNDbG9zZWQsY3VydmVCYXNpc09wZW46aC5jdXJ2ZUJhc2lzT3BlbixjdXJ2ZUxpbmVhcjpoLmN1cnZlTGluZWFyLGN1cnZlTGluZWFyQ2xvc2VkOmguY3VydmVMaW5lYXJDbG9zZWQsY3VydmVNb25vdG9uZVg6aC5jdXJ2ZU1vbm90b25lWCxjdXJ2ZU1vbm90b25lWTpoLmN1cnZlTW9ub3RvbmVZLGN1cnZlTmF0dXJhbDpoLmN1cnZlTmF0dXJhbCxjdXJ2ZVN0ZXA6aC5jdXJ2ZVN0ZXAsY3VydmVTdGVwQWZ0ZXI6aC5jdXJ2ZVN0ZXBBZnRlcixjdXJ2ZVN0ZXBCZWZvcmU6aC5jdXJ2ZVN0ZXBCZWZvcmV9LEM9L1slXXsyfVt7XVxzKig/Oig/OihcdyspXHMqOnwoXHcrKSlccyooPzooPzooXHcrKSl8KCg/Oig/IVt9XVslXXsyfSkufFxyP1xuKSopKT9ccyopKD86W31dWyVdezJ9KT8vZ2ksUz0vXHMqKD86KD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLEE9L1xzKiUlLipcbi9nbSxNPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RyeXt2YXIgbj1uZXcgUmVnRXhwKCJbJV17Mn0oPyFbe10iLmNvbmNhdChTLnNvdXJjZSwiKSg/PVt9XVslXXsyfSkuKlxuIiksImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKG4sIiIpLnJlcGxhY2UoLycvZ20sJyInKSxjLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUiLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKTtmb3IodmFyIHIsaT1bXTtudWxsIT09KHI9Qy5leGVjKHQpKTspaWYoci5pbmRleD09PUMubGFzdEluZGV4JiZDLmxhc3RJbmRleCsrLHImJiFlfHxlJiZyWzFdJiZyWzFdLm1hdGNoKGUpfHxlJiZyWzJdJiZyWzJdLm1hdGNoKGUpKXt2YXIgYT1yWzFdP3JbMV06clsyXSxvPXJbM10/clszXS50cmltKCk6cls0XT9KU09OLnBhcnNlKHJbNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6b30pfXJldHVybiAwPT09aS5sZW5ndGgmJmkucHVzaCh7dHlwZTp0LGFyZ3M6bnVsbH0pLDE9PT1pLmxlbmd0aD9pWzBdOml9Y2F0Y2gobil7cmV0dXJuIGMuZXJyb3IoIkVSUk9SOiAiLmNvbmNhdChuLm1lc3NhZ2UsIiAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmVcbiAgICAgICIpLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKSx7dHlwZTpudWxsLGFyZ3M6bnVsbH19fSxPPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9dC5yZXBsYWNlKEMsIiIpLnJlcGxhY2UoQSwiXG4iKSxjLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSB0eXBlIGJhc2VkIG9uIHRoZSB0ZXh0ICIrdCksdC5tYXRjaCgvXlxzKnNlcXVlbmNlRGlhZ3JhbS8pPyJzZXF1ZW5jZSI6dC5tYXRjaCgvXlxzKmdhbnR0Lyk/ImdhbnR0Ijp0Lm1hdGNoKC9eXHMqY2xhc3NEaWFncmFtLXYyLyk/ImNsYXNzRGlhZ3JhbSI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS8pP2UmJmUuY2xhc3MmJiJkYWdyZS13cmFwcGVyIj09PWUuY2xhc3MuZGVmYXVsdFJlbmRlcmVyPyJjbGFzc0RpYWdyYW0iOiJjbGFzcyI6dC5tYXRjaCgvXlxzKnN0YXRlRGlhZ3JhbS12Mi8pPyJzdGF0ZURpYWdyYW0iOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0vKT9lJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLnN0YXRlLmRlZmF1bHRSZW5kZXJlcj8ic3RhdGVEaWFncmFtIjoic3RhdGUiOnQubWF0Y2goL15ccypnaXRHcmFwaC8pPyJnaXQiOnQubWF0Y2goL15ccypmbG93Y2hhcnQvKT8iZmxvd2NoYXJ0LXYyIjp0Lm1hdGNoKC9eXHMqaW5mby8pPyJpbmZvIjp0Lm1hdGNoKC9eXHMqcGllLyk/InBpZSI6dC5tYXRjaCgvXlxzKmVyRGlhZ3JhbS8pPyJlciI6dC5tYXRjaCgvXlxzKmpvdXJuZXkvKT8iam91cm5leSI6dC5tYXRjaCgvXlxzKnJlcXVpcmVtZW50Lyl8fHQubWF0Y2goL15ccypyZXF1aXJlbWVudERpYWdyYW0vKT8icmVxdWlyZW1lbnQiOmUmJmUuZmxvd2NoYXJ0JiYiZGFncmUtd3JhcHBlciI9PT1lLmZsb3djaGFydC5kZWZhdWx0UmVuZGVyZXI/ImZsb3djaGFydC12MiI6ImZsb3djaGFydCJ9LEI9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyO2ErKylpW2FdPWFyZ3VtZW50c1thXTt2YXIgbz1lP2UuYXBwbHkodm9pZCAwLGkpOmlbMF07aWYobyBpbiBuKXJldHVybiBuW29dO3ZhciBzPXQuYXBwbHkodm9pZCAwLGkpO3JldHVybiBuW29dPXMsc319LE49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gZTt2YXIgbj0iY3VydmUiLmNvbmNhdCh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkpO3JldHVybiBUW25dfHxlfSxEPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmU/TWF0aC5zcXJ0KE1hdGgucG93KGUueC10LngsMikrTWF0aC5wb3coZS55LXQueSwyKSk6MH0sTD1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iIixyPTA7cjx0Lmxlbmd0aDtyKyspdm9pZCAwIT09dFtyXSYmKHRbcl0uc3RhcnRzV2l0aCgiY29sb3I6Iil8fHRbcl0uc3RhcnRzV2l0aCgidGV4dC1hbGlnbjoiKT9uPW4rdFtyXSsiOyI6ZT1lK3Rbcl0rIjsiKTtyZXR1cm57c3R5bGU6ZSxsYWJlbFN0eWxlOm59fSxJPTAsUj1mdW5jdGlvbigpe3JldHVybiBJKyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIitJfTt2YXIgRj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLG49IjAxMjM0NTY3ODlhYmNkZWYiLmxlbmd0aCxyPTA7cjx0O3IrKyllKz0iMDEyMzQ1Njc4OWFiY2RlZiIuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpuKSk7cmV0dXJuIGV9KHQubGVuZ3RoKX0sUD1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaT1PYmplY3QuYXNzaWduKHtkZXB0aDoyLGNsb2JiZXI6ITF9LHIpLGE9aS5kZXB0aCxvPWkuY2xvYmJlcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIUFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuLHIpfSkpLGUpOkFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX0pKSxlKTp2b2lkIDA9PT1lfHxhPD0wP251bGwhPWUmJiJvYmplY3QiPT09dyhlKSYmIm9iamVjdCI9PT13KG4pP09iamVjdC5hc3NpZ24oZSxuKTpuOih2b2lkIDAhPT1uJiYib2JqZWN0Ij09PXcoZSkmJiJvYmplY3QiPT09dyhuKSYmT2JqZWN0LmtleXMobikuZm9yRWFjaCgoZnVuY3Rpb24ocil7Im9iamVjdCIhPT13KG5bcl0pfHx2b2lkIDAhPT1lW3JdJiYib2JqZWN0IiE9PXcoZVtyXSk/KG98fCJvYmplY3QiIT09dyhlW3JdKSYmIm9iamVjdCIhPT13KG5bcl0pKSYmKGVbcl09bltyXSk6KHZvaWQgMD09PWVbcl0mJihlW3JdPUFycmF5LmlzQXJyYXkobltyXSk/W106e30pLGVbcl09dChlW3JdLG5bcl0se2RlcHRoOmEtMSxjbG9iYmVyOm99KSl9KSksZSl9LGo9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnRleHQucmVwbGFjZShfLmxpbmVCcmVha1JlZ2V4LCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5zdHlsZSgidGV4dC1hbmNob3IiLGUuYW5jaG9yKSxyLnN0eWxlKCJmb250LWZhbWlseSIsZS5mb250RmFtaWx5KSxyLnN0eWxlKCJmb250LXNpemUiLGUuZm9udFNpemUpLHIuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHIuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZyLmF0dHIoImNsYXNzIixlLmNsYXNzKTt2YXIgaT1yLmFwcGVuZCgidHNwYW4iKTtyZXR1cm4gaS5hdHRyKCJ4IixlLngrMiplLnRleHRNYXJnaW4pLGkuYXR0cigiZmlsbCIsZS5maWxsKSxpLnRleHQobikscn0sWT1CKChmdW5jdGlvbih0LGUsbil7aWYoIXQpcmV0dXJuIHQ7aWYobj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sbiksXy5saW5lQnJlYWtSZWdleC50ZXN0KHQpKXJldHVybiB0O3ZhciByPXQuc3BsaXQoIiAiKSxpPVtdLGE9IiI7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24odCxvKXt2YXIgcz1VKCIiLmNvbmNhdCh0LCIgIiksbiksYz1VKGEsbik7aWYocz5lKXt2YXIgdT16KHQsZSwiLSIsbiksbD11Lmh5cGhlbmF0ZWRTdHJpbmdzLGg9dS5yZW1haW5pbmdXb3JkO2kucHVzaC5hcHBseShpLFthXS5jb25jYXQoRShsKSkpLGE9aH1lbHNlIGMrcz49ZT8oaS5wdXNoKGEpLGE9dCk6YT1bYSx0XS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpO28rMT09PXIubGVuZ3RoJiZpLnB1c2goYSl9KSksaS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiIiIT09dH0pKS5qb2luKG4uam9pbldpdGgpfSksKGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4iIi5jb25jYXQodCwiLSIpLmNvbmNhdChlLCItIikuY29uY2F0KG4uZm9udFNpemUsIi0iKS5jb25jYXQobi5mb250V2VpZ2h0LCItIikuY29uY2F0KG4uZm9udEZhbWlseSwiLSIpLmNvbmNhdChuLmpvaW5XaXRoKX0pKSx6PUIoKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3I9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjowfSxyKTt2YXIgaT10LnNwbGl0KCIiKSxhPVtdLG89IiI7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24odCxzKXt2YXIgYz0iIi5jb25jYXQobykuY29uY2F0KHQpO2lmKFUoYyxyKT49ZSl7dmFyIHU9cysxLGw9aS5sZW5ndGg9PT11LGg9IiIuY29uY2F0KGMpLmNvbmNhdChuKTthLnB1c2gobD9jOmgpLG89IiJ9ZWxzZSBvPWN9KSkse2h5cGhlbmF0ZWRTdHJpbmdzOmEscmVtYWluaW5nV29yZDpvfX0pLChmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiLSIscj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4iIi5jb25jYXQodCwiLSIpLmNvbmNhdChlLCItIikuY29uY2F0KG4sIi0iKS5jb25jYXQoci5mb250U2l6ZSwiLSIpLmNvbmNhdChyLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoci5mb250RmFtaWx5KX0pKSxVPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSwkKHQsZSkud2lkdGh9LCQ9QigoZnVuY3Rpb24odCxlKXt2YXIgbj1lPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIn0sZSkscj1uLmZvbnRTaXplLGk9bi5mb250RmFtaWx5LGE9bi5mb250V2VpZ2h0O2lmKCF0KXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgbz1bInNhbnMtc2VyaWYiLGldLHM9dC5zcGxpdChfLmxpbmVCcmVha1JlZ2V4KSxjPVtdLHU9T2JqZWN0KGguc2VsZWN0KSgiYm9keSIpO2lmKCF1LnJlbW92ZSlyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9O2Zvcih2YXIgbD11LmFwcGVuZCgic3ZnIiksZj0wLGQ9bztmPGQubGVuZ3RoO2YrKyl7dmFyIHA9ZFtmXSx5PTAsZz17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9LHY9ITAsbT0hMSxiPXZvaWQgMDt0cnl7Zm9yKHZhciB4LGs9c1tTeW1ib2wuaXRlcmF0b3JdKCk7ISh2PSh4PWsubmV4dCgpKS5kb25lKTt2PSEwKXt2YXIgdz14LnZhbHVlLEU9e3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMH07RS50ZXh0PXc7dmFyIFQ9aihsLEUpLnN0eWxlKCJmb250LXNpemUiLHIpLnN0eWxlKCJmb250LXdlaWdodCIsYSkuc3R5bGUoImZvbnQtZmFtaWx5IixwKSxDPShULl9ncm91cHN8fFQpWzBdWzBdLmdldEJCb3goKTtnLndpZHRoPU1hdGgucm91bmQoTWF0aC5tYXgoZy53aWR0aCxDLndpZHRoKSkseT1NYXRoLnJvdW5kKEMuaGVpZ2h0KSxnLmhlaWdodCs9eSxnLmxpbmVIZWlnaHQ9TWF0aC5yb3VuZChNYXRoLm1heChnLmxpbmVIZWlnaHQseSkpfX1jYXRjaCh0KXttPSEwLGI9dH1maW5hbGx5e3RyeXt2fHxudWxsPT1rLnJldHVybnx8ay5yZXR1cm4oKX1maW5hbGx5e2lmKG0pdGhyb3cgYn19Yy5wdXNoKGcpfXJldHVybiBsLnJlbW92ZSgpLGNbaXNOYU4oY1sxXS5oZWlnaHQpfHxpc05hTihjWzFdLndpZHRoKXx8aXNOYU4oY1sxXS5saW5lSGVpZ2h0KXx8Y1swXS5oZWlnaHQ+Y1sxXS5oZWlnaHQmJmNbMF0ud2lkdGg+Y1sxXS53aWR0aCYmY1swXS5saW5lSGVpZ2h0PmNbMV0ubGluZUhlaWdodD8wOjFdfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZS5mb250U2l6ZSwiLSIpLmNvbmNhdChlLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoZS5mb250RmFtaWx5KX0pKSxxPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgTWFwO3JldHVybiByLnNldCgiaGVpZ2h0Iix0KSxuPyhyLnNldCgid2lkdGgiLCIxMDAlIiksci5zZXQoInN0eWxlIiwibWF4LXdpZHRoOiAiLmNvbmNhdChlLCJweDsiKSkpOnIuc2V0KCJ3aWR0aCIsZSkscn0sVz1mdW5jdGlvbih0LGUsbixyKXshZnVuY3Rpb24odCxlKXt2YXIgbj0hMCxyPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIGEsbz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KGE9by5uZXh0KCkpLmRvbmUpO249ITApe3ZhciBzPWEudmFsdWU7dC5hdHRyKHNbMF0sc1sxXSl9fWNhdGNoKHQpe3I9ITAsaT10fWZpbmFsbHl7dHJ5e258fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYocil0aHJvdyBpfX19KHQscShlLG4scikpfSxWPXthc3NpZ25XaXRoRGVwdGg6UCx3cmFwTGFiZWw6WSxjYWxjdWxhdGVUZXh0SGVpZ2h0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwiLG1hcmdpbjoxNX0sZSksJCh0LGUpLmhlaWdodH0sY2FsY3VsYXRlVGV4dFdpZHRoOlUsY2FsY3VsYXRlVGV4dERpbWVuc2lvbnM6JCxjYWxjdWxhdGVTdmdTaXplQXR0cnM6cSxjb25maWd1cmVTdmdTaXplOlcsZGV0ZWN0SW5pdDpmdW5jdGlvbih0LGUpe3ZhciBuPU0odCwvKD86aW5pdFxiKXwoPzppbml0aWFsaXplXGIpLykscj17fTtpZihBcnJheS5pc0FycmF5KG4pKXt2YXIgaT1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXJnc30pKTtyPVAocixFKGkpKX1lbHNlIHI9bi5hcmdzO2lmKHIpe3ZhciBhPU8odCxlKTtbImNvbmZpZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXJbdF0mJigiZmxvd2NoYXJ0LXYyIj09PWEmJihhPSJmbG93Y2hhcnQiKSxyW2FdPXJbdF0sZGVsZXRlIHJbdF0pfSkpfXJldHVybiByfSxkZXRlY3REaXJlY3RpdmU6TSxkZXRlY3RUeXBlOk8saXNTdWJzdHJpbmdJbkFycmF5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoZVtuXS5tYXRjaCh0KSlyZXR1cm4gbjtyZXR1cm4tMX0saW50ZXJwb2xhdGVUb0N1cnZlOk4sY2FsY0xhYmVsUG9zaXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlLG49MDt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24rPUQodCxlKSxlPXR9KSk7dmFyIHI9bi8yLGk9dm9pZCAwO3JldHVybiBlPXZvaWQgMCx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKGUmJiFpKXt2YXIgbj1EKHQsZSk7aWYobjxyKXItPW47ZWxzZXt2YXIgYT1yL247YTw9MCYmKGk9ZSksYT49MSYmKGk9e3g6dC54LHk6dC55fSksYT4wJiZhPDEmJihpPXt4OigxLWEpKmUueCthKnQueCx5OigxLWEpKmUueSthKnQueX0pfX1lPXR9KSksaX0odCl9LGNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtjLmluZm8oIm91ciBwb2ludHMiLGUpLGVbMF0hPT1uJiYoZT1lLnJldmVyc2UoKSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtEKHQscikscj10fSkpO3ZhciBpLGE9MjU7cj12b2lkIDAsZS5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihyJiYhaSl7dmFyIGU9RCh0LHIpO2lmKGU8YSlhLT1lO2Vsc2V7dmFyIG49YS9lO248PTAmJihpPXIpLG4+PTEmJihpPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoaT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBvPXQ/MTA6NSxzPU1hdGguYXRhbjIoZVswXS55LWkueSxlWzBdLngtaS54KSx1PXt4OjAseTowfTtyZXR1cm4gdS54PU1hdGguc2luKHMpKm8rKGVbMF0ueCtpLngpLzIsdS55PS1NYXRoLmNvcyhzKSpvKyhlWzBdLnkraS55KS8yLHV9LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuKSk7Yy5pbmZvKCJvdXIgcG9pbnRzIixpKSwic3RhcnRfbGVmdCIhPT1lJiYic3RhcnRfcmlnaHQiIT09ZSYmKGk9aS5yZXZlcnNlKCkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7RCh0LHIpLHI9dH0pKTt2YXIgYSxvPTI1O3I9dm9pZCAwLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYociYmIWEpe3ZhciBlPUQodCxyKTtpZihlPG8pby09ZTtlbHNle3ZhciBuPW8vZTtuPD0wJiYoYT1yKSxuPj0xJiYoYT17eDp0LngseTp0Lnl9KSxuPjAmJm48MSYmKGE9e3g6KDEtbikqci54K24qdC54LHk6KDEtbikqci55K24qdC55fSl9fXI9dH0pKTt2YXIgcz0xMCx1PU1hdGguYXRhbjIoaVswXS55LWEueSxpWzBdLngtYS54KSxsPXt4OjAseTowfTtyZXR1cm4gbC54PU1hdGguc2luKHUpKnMrKGlbMF0ueCthLngpLzIsbC55PS1NYXRoLmNvcyh1KSpzKyhpWzBdLnkrYS55KS8yLCJzdGFydF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odStNYXRoLlBJKSpzKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModStNYXRoLlBJKSpzKyhpWzBdLnkrYS55KS8yKSwiZW5kX3JpZ2h0Ij09PWUmJihsLng9TWF0aC5zaW4odS1NYXRoLlBJKSpzKyhpWzBdLngrYS54KS8yLTUsbC55PS1NYXRoLmNvcyh1LU1hdGguUEkpKnMrKGlbMF0ueSthLnkpLzItNSksImVuZF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odSkqcysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModSkqcysoaVswXS55K2EueSkvMi01KSxsfSxmb3JtYXRVcmw6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnRyaW0oKTtpZihuKXJldHVybiJsb29zZSIhPT1lLnNlY3VyaXR5TGV2ZWw/T2JqZWN0KHkuc2FuaXRpemVVcmwpKG4pOm59LGdldFN0eWxlc0Zyb21BcnJheTpMLGdlbmVyYXRlSWQ6UixyYW5kb206RixtZW1vaXplOkIscnVuRnVuYzpmdW5jdGlvbih0KXtmb3IodmFyIGUsbj10LnNwbGl0KCIuIikscj1uLmxlbmd0aC0xLGk9bltyXSxhPXdpbmRvdyxvPTA7bzxyO28rKylpZighKGE9YVtuW29dXSkpcmV0dXJuO2Zvcih2YXIgcz1hcmd1bWVudHMubGVuZ3RoLGM9bmV3IEFycmF5KHM+MT9zLTE6MCksdT0xO3U8czt1KyspY1t1LTFdPWFyZ3VtZW50c1t1XTsoZT1hKVtpXS5hcHBseShlLGMpfSxpbml0SWRHZW5lcmF0aW9yOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4peyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuZGV0ZXJtaW5pc3RpYz1lLHRoaXMuc2VlZD1uLHRoaXMuY291bnQ9bj9uLmxlbmd0aDowfXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJuZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGVybWluaXN0aWM/dGhpcy5jb3VudCsrOkRhdGUubm93KCl9fV0pJiZrKGUucHJvdG90eXBlLG4pLHImJmsoZSxyKSx0fSgpfSxIPW4oMSksRz1mdW5jdGlvbih0LGUpe3JldHVybiBlP09iamVjdChILmFkanVzdCkodCx7czotNDAsbDoxMH0pOk9iamVjdChILmFkanVzdCkodCx7czotNDAsbDotMTB9KX07ZnVuY3Rpb24gWCh0KXtyZXR1cm4oWD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIFoodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgUT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMuZGFya01vZGU9ITEsdGhpcy5wcmltYXJ5Q29sb3I9IiNmZmY0ZGQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9IiMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4In12YXIgZSxuLHI7cmV0dXJuIGU9dCwobj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMucHJpbWFyeVRleHRDb2xvcj10aGlzLnByaW1hcnlUZXh0Q29sb3J8fCh0aGlzLmRhcmtNb2RlPyIjZGRkIjoiIzMzMyIpLHRoaXMuc2Vjb25kYXJ5Q29sb3I9dGhpcy5zZWNvbmRhcnlDb2xvcnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotMTIwfSksdGhpcy50ZXJ0aWFyeUNvbG9yPXRoaXMudGVydGlhcnlDb2xvcnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fEcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yfHxHKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPXRoaXMudGVydGlhcnlCb3JkZXJDb2xvcnx8Ryh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fEcodGhpcy5ub3RlQmtnQ29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQmtnQ29sb3I9dGhpcy5ub3RlQmtnQ29sb3J8fCIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9dGhpcy5ub3RlVGV4dENvbG9yfHwiIzMzMyIsdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9dGhpcy5zZWNvbmRhcnlUZXh0Q29sb3J8fE9iamVjdChILmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj10aGlzLnRlcnRpYXJ5VGV4dENvbG9yfHxPYmplY3QoSC5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fE9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj10aGlzLnRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm5vZGVCa2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubWFpbkJrZz10aGlzLm1haW5Ca2d8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMubm9kZUJvcmRlcj10aGlzLm5vZGVCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuY2x1c3RlckJrZz10aGlzLmNsdXN0ZXJCa2d8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5jbHVzdGVyQm9yZGVyfHx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3IsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMuZGVmYXVsdExpbmtDb2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGl0bGVDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9PYmplY3QoSC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMubm9kZVRleHRDb2xvcj10aGlzLm5vZGVUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYWN0b3JCb3JkZXJ8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuYWN0b3JCa2c9dGhpcy5hY3RvckJrZ3x8dGhpcy5tYWluQmtnLHRoaXMuYWN0b3JUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JMaW5lQ29sb3I9dGhpcy5hY3RvckxpbmVDb2xvcnx8ImdyZXkiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmxhYmVsQm94QmtnQ29sb3J8fHRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnNpZ25hbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnNpZ25hbFRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcnx8dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMubGFiZWxUZXh0Q29sb3J8fHRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMubG9vcFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcnx8T2JqZWN0KEguZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxPYmplY3QoSC5pbnZlcnQpKHRoaXMubGluZUNvbG9yKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPXRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yfHwid2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPXRoaXMuc2VjdGlvbkJrZ0NvbG9yfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj10aGlzLnNlY3Rpb25Ca2dDb2xvcjJ8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnRhc2tCa2dDb2xvcj10aGlzLnRhc2tCa2dDb2xvcnx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yfHxPYmplY3QoSC5saWdodGVuKSh0aGlzLnByaW1hcnlDb2xvciwyMyksdGhpcy5ncmlkQ29sb3I9dGhpcy5ncmlkQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj10aGlzLmRvbmVUYXNrQmtnQ29sb3J8fCJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3J8fCJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj10aGlzLmNyaXRCb3JkZXJDb2xvcnx8IiNmZjg4ODgiLHRoaXMuY3JpdEJrZ0NvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yfHwicmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMudG9kYXlMaW5lQ29sb3J8fCJyZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj10aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3J8fCIjMDAzMTYzIix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMuY2xhc3NUZXh0fHx0aGlzLnRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLmZpbGxUeXBlMHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5maWxsVHlwZTF8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9dGhpcy5maWxsVHlwZTJ8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9dGhpcy5maWxsVHlwZTR8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9dGhpcy5maWxsVHlwZTV8fE9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz10aGlzLmZpbGxUeXBlN3x8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fE9iamVjdChILmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNz10aGlzLnBpZTd8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi0xMH0pLHRoaXMucGllOT10aGlzLnBpZTl8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMjB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTEwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHwodGhpcy5kYXJrTW9kZT9PYmplY3QoSC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09WCh0KSl7dmFyIG49T2JqZWN0LmtleXModCk7bi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSksdGhpcy51cGRhdGVDb2xvcnMoKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKX1lbHNlIHRoaXMudXBkYXRlQ29sb3JzKCl9fV0pJiZaKGUucHJvdG90eXBlLG4pLHImJlooZSxyKSx0fSgpO2Z1bmN0aW9uIEsodCl7cmV0dXJuKEs9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBKKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIHR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KEgubGlnaHRlbikodGhpcy5wcmltYXJ5Q29sb3IsMTYpLHRoaXMudGVydGlhcnlDb2xvcj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1HKHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9Ryh0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMudGVydGlhcnlCb3JkZXJDb2xvcj1HKHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPU9iamVjdChILmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMubWFpbkJrZz0iIzFmMjAyMCIsdGhpcy5zZWNvbmRCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubWFpbkNvbnRyYXN0Q29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kYXJrVGV4dENvbG9yPU9iamVjdChILmxpZ2h0ZW4pKE9iamVjdChILmludmVydCkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPU9iamVjdChILnJnYmEpKDI1NSwyNTUsMjU1LC4yNSksdGhpcy5hcnJvd2hlYWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMubGFiZWxCYWNrZ3JvdW5kPSIjMTgxODE4Iix0aGlzLnRleHRDb2xvcj0iI2NjYyIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iI0Y5RkZGRSIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJibGFjayIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T2JqZWN0KEguZGFya2VuKSgiI0VBRThEOSIsMzApLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9IiNFQUU4RDkiLHRoaXMudGFza0JvcmRlckNvbG9yPU9iamVjdChILnJnYmEpKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1PYmplY3QoSC5yZ2JhKSgyNTUsMjU1LDI1NSw1MCksdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiM4MUIxREIiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iZ3JleSIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9IiNFODM3MzciLHRoaXMuY3JpdEJrZ0NvbG9yPSIjRTgzNzM3Iix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSIjREI1NzU3Iix0aGlzLmxhYmVsQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZXJyb3JCa2dDb2xvcj0iI2E0NDE0MSIsdGhpcy5lcnJvclRleHRDb2xvcj0iI2RkZCJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZEJrZz1PYmplY3QoSC5saWdodGVuKSh0aGlzLm1haW5Ca2csMTYpLHRoaXMubGluZUNvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hcnJvd2hlYWRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMubWFpbkJrZywyMyksdGhpcy50YXNrVGV4dENvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy5ncmlkQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMuZGFya1RleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiIzU1NSIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9IiNmNGY0ZjQiLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8IiMwYjAwMDAiLHRoaXMucGllMj10aGlzLnBpZTJ8fCIjNGQxMDM3Iix0aGlzLnBpZTM9dGhpcy5waWUzfHwiIzNmNTI1OCIsdGhpcy5waWU0PXRoaXMucGllNHx8IiM0ZjJmMWIiLHRoaXMucGllNT10aGlzLnBpZTV8fCIjNmUwYTBhIix0aGlzLnBpZTY9dGhpcy5waWU2fHwiIzNiMDA0OCIsdGhpcy5waWU3PXRoaXMucGllN3x8IiM5OTVhMDEiLHRoaXMucGllOD10aGlzLnBpZTh8fCIjMTU0NzA2Iix0aGlzLnBpZTk9dGhpcy5waWU5fHwiIzE2MTcyMiIsdGhpcy5waWUxMD10aGlzLnBpZTEwfHwiIzAwMjk2ZiIsdGhpcy5waWUxMT10aGlzLnBpZTExfHwiIzAxNjI5YyIsdGhpcy5waWUxMj10aGlzLnBpZTEyfHwiIzAxMDAyOSIsdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T2JqZWN0KEguZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDMwKTp0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PUsodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmSihlLnByb3RvdHlwZSxuKSxyJiZKKGUsciksdH0oKTtmdW5jdGlvbiBldCh0KXtyZXR1cm4oZXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBudCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBydD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjRUNFQ0ZGIix0aGlzLnNlY29uZGFyeUNvbG9yPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2ZmZmZkZSIsdGhpcy50ZXJ0aWFyeUNvbG9yPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1HKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjRUNFQ0ZGIix0aGlzLnNlY29uZEJrZz0iI2ZmZmZkZSIsdGhpcy5saW5lQ29sb3I9IiMzMzMzMzMiLHRoaXMuYm9yZGVyMT0iIzkzNzBEQiIsdGhpcy5ib3JkZXIyPSIjYWFhYTMzIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5sYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMudGV4dENvbG9yPSIjMzMzIix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PYmplY3QoSC5yZ2JhKSgxMDIsMTAyLDI1NSwuNDkpLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjZmZmNDAwIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy50YXNrQmtnQ29sb3I9IiM4YTkwZGQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iIzUzNGZiYyIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9IiNiZmM3ZmYiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiIsdGhpcy51cGRhdGVDb2xvcnMoKX12YXIgZSxuLHI7cmV0dXJuIGU9dCwobj1be2tleToidXBkYXRlQ29sb3JzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubm9kZUJrZz10aGlzLm1haW5Ca2csdGhpcy5ub2RlQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmNsdXN0ZXJCa2c9dGhpcy5zZWNvbmRCa2csdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuYm9yZGVyMix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy50aXRsZUNvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD10aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLmFjdG9yQm9yZGVyPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5zaWduYWxDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiNmMGYwZjAiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLm5vZGVCb3JkZXIsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHxPYmplY3QoSC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotNDB9KSx0aGlzLnBpZTQ9dGhpcy5waWU0fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0xMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotMjB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTIwfSksdGhpcy5waWU4PXRoaXMucGllOHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotNDB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi00MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi00MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotOTAsbDotNDB9KSx0aGlzLnBpZTEyPXRoaXMucGllMTJ8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTMwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PWV0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJm50KGUucHJvdG90eXBlLG4pLHImJm50KGUsciksdH0oKTtmdW5jdGlvbiBpdCh0KXtyZXR1cm4oaXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBhdCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBvdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1PYmplY3QoSC5saWdodGVuKSgiI2NkZTQ5OCIsMTApLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1HKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5saW5lQ29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KEguZGFya2VuKSh0aGlzLm1haW5Ca2csMjApLHRoaXMuYWN0b3JCa2c9dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIxLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fCIjZjBmMGYwIix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5zcGVjaWFsU3RhdGVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5maWxsVHlwZTA9dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTE9dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7bDotMzB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2g6NDAsbDotNDB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjYwLGw6LTEwfSksdGhpcy5waWU4PXRoaXMucGllOHx8T2JqZWN0KEguYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOjB9KSx0aGlzLnBpZTEwPXRoaXMucGllMTB8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNTB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxPYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi01MH0pLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZD10aGlzLnJlcXVpcmVtZW50QmFja2dyb3VuZHx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemU9dGhpcy5yZXF1aXJlbWVudEJvcmRlclNpemV8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3I9dGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMucmVsYXRpb25Db2xvcj10aGlzLnJlbGF0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmQ9dGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZHx8dGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09aXQodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmYXQoZS5wcm90b3R5cGUsbiksciYmYXQoZSxyKSx0fSgpO2Z1bmN0aW9uIHN0KHQpe3JldHVybihzdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIGN0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMucHJpbWFyeUNvbG9yPSIjZWVlIix0aGlzLmNvbnRyYXN0PSIjNzA3MDcwIix0aGlzLnNlY29uZGFyeUNvbG9yPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsNTUpLHRoaXMuYmFja2dyb3VuZD0iI2ZmZmZmZiIsdGhpcy50ZXJ0aWFyeUNvbG9yPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPUcodGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcj1HKHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPUcodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMucHJpbWFyeUNvbG9yKSx0aGlzLnNlY29uZGFyeVRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KEguaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChILmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLnRleHRDb2xvcj1PYmplY3QoSC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5tYWluQmtnPSIjZWVlIix0aGlzLnNlY29uZEJrZz0iY2FsY3VsYXRlZCIsdGhpcy5saW5lQ29sb3I9IiM2NjYiLHRoaXMuYm9yZGVyMT0iIzk5OSIsdGhpcy5ib3JkZXIyPSJjYWxjdWxhdGVkIix0aGlzLm5vdGU9IiNmZmEiLHRoaXMudGV4dD0iIzMzMyIsdGhpcy5jcml0aWNhbD0iI2Q0MiIsdGhpcy5kb25lPSIjYmJiIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5ub2RlQmtnPSJjYWxjdWxhdGVkIix0aGlzLm5vZGVCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmRlZmF1bHRMaW5rQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGl0bGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iIzY2NiIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9IiNmNGY0ZjQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0QmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9T2JqZWN0KEgubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KEgubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmFjdG9yTGluZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy50ZXh0LHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5hY3RvckJvcmRlcix0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy50ZXh0LHRoaXMubm90ZUJvcmRlckNvbG9yPSIjOTk5Iix0aGlzLm5vdGVCa2dDb2xvcj0iIzY2NiIsdGhpcy5ub3RlVGV4dENvbG9yPSIjZmZmIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PYmplY3QoSC5saWdodGVuKSh0aGlzLmNvbnRyYXN0LDMwKSx0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9T2JqZWN0KEgubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9T2JqZWN0KEguZGFya2VuKSh0aGlzLmNvbnRyYXN0LDEwKSx0aGlzLnRhc2tCa2dDb2xvcj10aGlzLmNvbnRyYXN0LHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPXRoaXMudGV4dCx0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9dGhpcy50YXNrQm9yZGVyQ29sb3IsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9dGhpcy5tYWluQmtnLHRoaXMuZ3JpZENvbG9yPU9iamVjdChILmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwzMCksdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZSx0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0aWNhbCx0aGlzLmNyaXRCb3JkZXJDb2xvcj1PYmplY3QoSC5kYXJrZW4pKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU9iamVjdChILmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1PYmplY3QoSC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlND1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1PYmplY3QoSC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyOH0pLHRoaXMuZmlsbFR5cGU3PU9iamVjdChILmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiI0Y0RjRGNCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM1NTUiLHRoaXMucGllMz10aGlzLnBpZTN8fCIjQkJCIix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzc3NyIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM5OTkiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjREREIix0aGlzLnBpZTc9dGhpcy5waWU3fHwiI0ZGRiIsdGhpcy5waWU4PXRoaXMucGllOHx8IiNEREQiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjQkJCIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjOTk5Iix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjNzc3Iix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjNTU1Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXN0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJmN0KGUucHJvdG90eXBlLG4pLHImJmN0KGUsciksdH0oKSxsdD17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFE7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkYXJrOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgdHQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxkZWZhdWx0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgcnQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxmb3Jlc3Q6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvdDtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19LG5ldXRyYWw6e2dldFRoZW1lVmFyaWFibGVzOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB1dDtyZXR1cm4gZS5jYWxjdWxhdGUodCksZX19fSxodD17dGhlbWU6ImRlZmF1bHQiLHRoZW1lVmFyaWFibGVzOmx0LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXMoKSx0aGVtZUNTUzp2b2lkIDAsbWF4VGV4dFNpemU6NWU0LGZvbnRGYW1pbHk6JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsnLGxvZ0xldmVsOjUsc2VjdXJpdHlMZXZlbDoic3RyaWN0IixzdGFydE9uTG9hZDohMCxhcnJvd01hcmtlckFic29sdXRlOiExLHNlY3VyZTpbInNlY3VyZSIsInNlY3VyaXR5TGV2ZWwiLCJzdGFydE9uTG9hZCIsIm1heFRleHRTaXplIl0sZGV0ZXJtaW5pc3RpY0lkczohMSxkZXRlcm1pbmlzdGljSURTZWVkOnZvaWQgMCxmbG93Y2hhcnQ6e2RpYWdyYW1QYWRkaW5nOjgsaHRtbExhYmVsczohMCxub2RlU3BhY2luZzo1MCxyYW5rU3BhY2luZzo1MCxjdXJ2ZToiYmFzaXMiLHBhZGRpbmc6MTUsdXNlTWF4V2lkdGg6ITAsZGVmYXVsdFJlbmRlcmVyOiJkYWdyZS1kMyJ9LHNlcXVlbmNlOnthY3RpdmF0aW9uV2lkdGg6MTAsZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsYWN0b3JNYXJnaW46NTAsd2lkdGg6MTUwLGhlaWdodDo2NSxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsbWlycm9yQWN0b3JzOiEwLGJvdHRvbU1hcmdpbkFkajoxLHVzZU1heFdpZHRoOiEwLHJpZ2h0QW5nbGVzOiExLHNob3dTZXF1ZW5jZU51bWJlcnM6ITEsYWN0b3JGb250U2l6ZToxNCxhY3RvckZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLGFjdG9yRm9udFdlaWdodDo0MDAsbm90ZUZvbnRTaXplOjE0LG5vdGVGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG5vdGVGb250V2VpZ2h0OjQwMCxub3RlQWxpZ246ImNlbnRlciIsbWVzc2FnZUZvbnRTaXplOjE2LG1lc3NhZ2VGb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLG1lc3NhZ2VGb250V2VpZ2h0OjQwMCx3cmFwOiExLHdyYXBQYWRkaW5nOjEwLGxhYmVsQm94V2lkdGg6NTAsbGFiZWxCb3hIZWlnaHQ6MjAsbWVzc2FnZUZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLm1lc3NhZ2VGb250RmFtaWx5LGZvbnRTaXplOnRoaXMubWVzc2FnZUZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5tZXNzYWdlRm9udFdlaWdodH19LG5vdGVGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubm90ZUZvbnRXZWlnaHR9fSxhY3RvckZvbnQ6ZnVuY3Rpb24oKXtyZXR1cm57Zm9udEZhbWlseTp0aGlzLmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0aGlzLmFjdG9yRm9udFdlaWdodH19fSxnYW50dDp7dGl0bGVUb3BNYXJnaW46MjUsYmFySGVpZ2h0OjIwLGJhckdhcDo0LHRvcFBhZGRpbmc6NTAscmlnaHRQYWRkaW5nOjc1LGxlZnRQYWRkaW5nOjc1LGdyaWRMaW5lU3RhcnRQYWRkaW5nOjM1LGZvbnRTaXplOjExLHNlY3Rpb25Gb250U2l6ZToxMSxudW1iZXJTZWN0aW9uU3R5bGVzOjQsYXhpc0Zvcm1hdDoiJVktJW0tJWQiLHVzZU1heFdpZHRoOiEwLHRvcEF4aXM6ITEsdXNlV2lkdGg6dm9pZCAwfSxqb3VybmV5OntkaWFncmFtTWFyZ2luWDo1MCxkaWFncmFtTWFyZ2luWToxMCxsZWZ0TWFyZ2luOjE1MCx3aWR0aDoxNTAsaGVpZ2h0OjUwLGJveE1hcmdpbjoxMCxib3hUZXh0TWFyZ2luOjUsbm90ZU1hcmdpbjoxMCxtZXNzYWdlTWFyZ2luOjM1LG1lc3NhZ2VBbGlnbjoiY2VudGVyIixib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSx0YXNrRm9udFNpemU6MTQsdGFza0ZvbnRGYW1pbHk6JyJPcGVuLVNhbnMiLCAic2Fucy1zZXJpZiInLHRhc2tNYXJnaW46NTAsYWN0aXZhdGlvbldpZHRoOjEwLHRleHRQbGFjZW1lbnQ6ImZvIixhY3RvckNvbG91cnM6WyIjOEZCQzhGIiwiIzdDRkMwMCIsIiMwMEZGRkYiLCIjMjBCMkFBIiwiI0IwRTBFNiIsIiNGRkZGRTAiXSxzZWN0aW9uRmlsbHM6WyIjMTkxOTcwIiwiIzhCMDA4QiIsIiM0QjAwODIiLCIjMkY0RjRGIiwiIzgwMDAwMCIsIiM4QjQ1MTMiLCIjMDAwMDhCIl0sc2VjdGlvbkNvbG91cnM6WyIjZmZmIl19LGNsYXNzOnthcnJvd01hcmtlckFic29sdXRlOiExLHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxnaXQ6e2Fycm93TWFya2VyQWJzb2x1dGU6ITEsdXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxzdGF0ZTp7ZGl2aWRlck1hcmdpbjoxMCxzaXplVW5pdDo1LHBhZGRpbmc6OCx0ZXh0SGVpZ2h0OjEwLHRpdGxlU2hpZnQ6LTE1LG5vdGVNYXJnaW46MTAsZm9ya1dpZHRoOjcwLGZvcmtIZWlnaHQ6NyxtaW5pUGFkZGluZzoyLGZvbnRTaXplRmFjdG9yOjUuMDIsZm9udFNpemU6MjQsbGFiZWxIZWlnaHQ6MTYsZWRnZUxlbmd0aEZhY3RvcjoiMjAiLGNvbXBvc2l0VGl0bGVTaXplOjM1LHJhZGl1czo1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxlcjp7ZGlhZ3JhbVBhZGRpbmc6MjAsbGF5b3V0RGlyZWN0aW9uOiJUQiIsbWluRW50aXR5V2lkdGg6MTAwLG1pbkVudGl0eUhlaWdodDo3NSxlbnRpdHlQYWRkaW5nOjE1LHN0cm9rZToiZ3JheSIsZmlsbDoiaG9uZXlkZXciLGZvbnRTaXplOjEyLHVzZU1heFdpZHRoOiEwfSxwaWU6e3VzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMH0scmVxdWlyZW1lbnQ6e3VzZVdpZHRoOnZvaWQgMCx1c2VNYXhXaWR0aDohMCxyZWN0X2ZpbGw6IiNmOWY5ZjkiLHRleHRfY29sb3I6IiMzMzMiLHJlY3RfYm9yZGVyX3NpemU6IjAuNXB4IixyZWN0X2JvcmRlcl9jb2xvcjoiI2JiYiIscmVjdF9taW5fd2lkdGg6MjAwLHJlY3RfbWluX2hlaWdodDoyMDAsZm9udFNpemU6MTQscmVjdF9wYWRkaW5nOjEwLGxpbmVfaGVpZ2h0OjIwfX07aHQuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1odC5hcnJvd01hcmtlckFic29sdXRlLGh0LmdpdC5hcnJvd01hcmtlckFic29sdXRlPWh0LmFycm93TWFya2VyQWJzb2x1dGU7dmFyIGZ0PWh0O2Z1bmN0aW9uIGR0KHQpe3JldHVybihkdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBwdCx5dD1PYmplY3QuZnJlZXplKGZ0KSxndD1QKHt9LHl0KSx2dD1bXSxtdD1QKHt9LHl0KSxidD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1QKHt9LHQpLHI9e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO2t0KGEpLHI9UChyLGEpfWlmKG49UChuLHIpLHIudGhlbWUpe3ZhciBvPVAoe30scHQpLHM9UChvLnRoZW1lVmFyaWFibGVzfHx7fSxyLnRoZW1lVmFyaWFibGVzKTtuLnRoZW1lVmFyaWFibGVzPWx0W24udGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHMpfXJldHVybiBtdD1uLG59LHh0PWZ1bmN0aW9uKCl7cmV0dXJuIFAoe30sZ3QpfSxfdD1mdW5jdGlvbigpe3JldHVybiBQKHt9LG10KX0sa3Q9ZnVuY3Rpb24gdChlKXtPYmplY3Qua2V5cyhndC5zZWN1cmUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWVbZ3Quc2VjdXJlW3RdXSYmKGMuZGVidWcoIkRlbmllZCBhdHRlbXB0IHRvIG1vZGlmeSBhIHNlY3VyZSBrZXkgIi5jb25jYXQoZ3Quc2VjdXJlW3RdKSxlW2d0LnNlY3VyZVt0XV0pLGRlbGV0ZSBlW2d0LnNlY3VyZVt0XV0pfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PT10LmluZGV4T2YoIl9fIikmJmRlbGV0ZSBlW3RdfSkpLE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4peyJzdHJpbmciPT10eXBlb2YgZVtuXSYmKGVbbl0uaW5kZXhPZigiPCIpPi0xfHxlW25dLmluZGV4T2YoIj4iKT4tMXx8ZVtuXS5pbmRleE9mKCJ1cmwoZGF0YToiKT4tMSkmJmRlbGV0ZSBlW25dLCJvYmplY3QiPT09ZHQoZVtuXSkmJnQoZVtuXSl9KSl9LHd0PWZ1bmN0aW9uKHQpe3QuZm9udEZhbWlseSYmKHQudGhlbWVWYXJpYWJsZXMmJnQudGhlbWVWYXJpYWJsZXMuZm9udEZhbWlseXx8KHQudGhlbWVWYXJpYWJsZXM9e2ZvbnRGYW1pbHk6dC5mb250RmFtaWx5fSkpLHZ0LnB1c2godCksYnQoZ3QsdnQpfSxFdD1mdW5jdGlvbigpe2J0KGd0LHZ0PVtdKX07ZnVuY3Rpb24gVHQodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIEN0PVtdLFN0PXt9LEF0PTAsTXQ9W10sT3Q9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10O2lmKHQuaW5kZXhPZigifiIpPjApe3ZhciByPXQuc3BsaXQoIn4iKTtuPXJbMF0sZT1yWzFdfXJldHVybntjbGFzc05hbWU6bix0eXBlOmV9fSxCdD1mdW5jdGlvbih0KXt2YXIgZT1PdCh0KTt2b2lkIDA9PT1TdFtlLmNsYXNzTmFtZV0mJihTdFtlLmNsYXNzTmFtZV09e2lkOmUuY2xhc3NOYW1lLHR5cGU6ZS50eXBlLGNzc0NsYXNzZXM6W10sbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLGRvbUlkOiJjbGFzc2lkLSIrZS5jbGFzc05hbWUrIi0iK0F0fSxBdCsrKX0sTnQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKFN0KSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoU3RbZVtuXV0uaWQ9PT10KXJldHVybiBTdFtlW25dXS5kb21JZH0sRHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1PdCh0KS5jbGFzc05hbWUscj1TdFtuXTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPWUudHJpbSgpO2kuc3RhcnRzV2l0aCgiPDwiKSYmaS5lbmRzV2l0aCgiPj4iKT9yLmFubm90YXRpb25zLnB1c2goaS5zdWJzdHJpbmcoMixpLmxlbmd0aC0yKSk6aS5pbmRleE9mKCIpIik+MD9yLm1ldGhvZHMucHVzaChpKTppJiZyLm1lbWJlcnMucHVzaChpKX19LEx0PWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dFswXS5tYXRjaCgvXGQvKSYmKG49ImNsYXNzaWQtIituKSx2b2lkIDAhPT1TdFtuXSYmU3Rbbl0uY3NzQ2xhc3Nlcy5wdXNoKGUpfSkpfSxJdD1mdW5jdGlvbih0LGUsbil7dmFyIHI9X3QoKSxpPXQsYT1OdChpKTtpZigibG9vc2UiPT09ci5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lJiZ2b2lkIDAhPT1TdFtpXSl7dmFyIG89W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtvPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBjPW9bc10udHJpbSgpOyciJz09PWMuY2hhckF0KDApJiYnIic9PT1jLmNoYXJBdChjLmxlbmd0aC0xKSYmKGM9Yy5zdWJzdHIoMSxjLmxlbmd0aC0yKSksb1tzXT1jfX0wPT09by5sZW5ndGgmJm8ucHVzaChhKSxNdC5wdXNoKChmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQoYSwnIl0nKSk7bnVsbCE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe1YucnVuRnVuYy5hcHBseShWLFtlXS5jb25jYXQoVHQobykpKX0pLCExKX0pKX19LFJ0PXtBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxGdD1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoaC5zZWxlY3QpKCIubWVybWFpZFRvb2x0aXAiKTtudWxsPT09KGUuX2dyb3Vwc3x8ZSlbMF1bMF0mJihlPU9iamVjdChoLnNlbGVjdCkoImJvZHkiKS5hcHBlbmQoImRpdiIpLmF0dHIoImNsYXNzIiwibWVybWFpZFRvb2x0aXAiKS5zdHlsZSgib3BhY2l0eSIsMCkpLE9iamVjdChoLnNlbGVjdCkodCkuc2VsZWN0KCJzdmciKS5zZWxlY3RBbGwoImcubm9kZSIpLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe3ZhciB0PU9iamVjdChoLnNlbGVjdCkodGhpcyk7aWYobnVsbCE9PXQuYXR0cigidGl0bGUiKSl7dmFyIG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKCJvcGFjaXR5IiwiLjkiKSxlLmh0bWwodC5hdHRyKCJ0aXRsZSIpKS5zdHlsZSgibGVmdCIsd2luZG93LnNjcm9sbFgrbi5sZWZ0KyhuLnJpZ2h0LW4ubGVmdCkvMisicHgiKS5zdHlsZSgidG9wIix3aW5kb3cuc2Nyb2xsWStuLnRvcC0xNCtkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCsicHgiKSx0LmNsYXNzZWQoImhvdmVyIiwhMCl9fSkpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7ZS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZSgib3BhY2l0eSIsMCksT2JqZWN0KGguc2VsZWN0KSh0aGlzKS5jbGFzc2VkKCJob3ZlciIsITEpfSkpfTtNdC5wdXNoKEZ0KTt2YXIgUHQ9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt2cy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkuY2xhc3N9LGFkZENsYXNzOkJ0LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7TXQuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sY2xlYXI6ZnVuY3Rpb24oKXtDdD1bXSxTdD17fSwoTXQ9W10pLnB1c2goRnQpfSxnZXRDbGFzczpmdW5jdGlvbih0KXtyZXR1cm4gU3RbdF19LGdldENsYXNzZXM6ZnVuY3Rpb24oKXtyZXR1cm4gU3R9LGFkZEFubm90YXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1PdCh0KS5jbGFzc05hbWU7U3Rbbl0uYW5ub3RhdGlvbnMucHVzaChlKX0sZ2V0UmVsYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIEN0fSxhZGRSZWxhdGlvbjpmdW5jdGlvbih0KXtjLmRlYnVnKCJBZGRpbmcgcmVsYXRpb246ICIrSlNPTi5zdHJpbmdpZnkodCkpLEJ0KHQuaWQxKSxCdCh0LmlkMiksdC5pZDE9T3QodC5pZDEpLmNsYXNzTmFtZSx0LmlkMj1PdCh0LmlkMikuY2xhc3NOYW1lLEN0LnB1c2godCl9LGFkZE1lbWJlcjpEdCxhZGRNZW1iZXJzOmZ1bmN0aW9uKHQsZSl7QXJyYXkuaXNBcnJheShlKSYmKGUucmV2ZXJzZSgpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIER0KHQsZSl9KSkpfSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigxKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOlJ0LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtJdCh0LGUsbiksU3RbdF0uaGF2ZUNhbGxiYWNrPSEwfSkpLEx0KHQsImNsaWNrYWJsZSIpfSxzZXRDc3NDbGFzczpMdCxzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1fdCgpO3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT10O3RbMF0ubWF0Y2goL1xkLykmJihpPSJjbGFzc2lkLSIraSksdm9pZCAwIT09U3RbaV0mJihTdFtpXS5saW5rPVYuZm9ybWF0VXJsKGUsciksU3RbaV0ubGlua1RhcmdldD0ic3RyaW5nIj09dHlwZW9mIG4/bjoiX2JsYW5rIil9KSksTHQodCwiY2xpY2thYmxlIil9LHNldFRvb2x0aXA6ZnVuY3Rpb24odCxlKXt2YXIgbj1fdCgpO3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoU3RbdF0udG9vbHRpcD1fLnNhbml0aXplVGV4dChlLG4pKX0pKX0sbG9va1VwRG9tSWQ6TnR9LGp0PW4oOSksWXQ9bi5uKGp0KSx6dD1uKDMpLFV0PW4ubih6dCksJHQ9bigxNSkscXQ9bi5uKCR0KSxXdD0wLFZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goLyhcK3wtfH58Iyk/KFx3Kykoflx3K358XFtcXSk/XHMrKFx3KykvKSxuPXQubWF0Y2goL14oWyt8XC18fnwjXSk/KFx3KykgKlwoICooLiopXCkgKihcKnxcJCk/ICooXHcqW358W1xdXSpccypcdyp+PykkLyk7cmV0dXJuIGUmJiFuP0h0KGUpOm4/R3Qobik6WHQodCl9LEh0PWZ1bmN0aW9uKHQpe3ZhciBlPSIiO3RyeXtlPSh0WzFdP3RbMV0udHJpbSgpOiIiKSsodFsyXT90WzJdLnRyaW0oKToiIikrKHRbM10/UXQodFszXS50cmltKCkpOiIiKSsiICIrKHRbNF0/dFs0XS50cmltKCk6IiIpfWNhdGNoKG4pe2U9dH1yZXR1cm57ZGlzcGxheVRleHQ6ZSxjc3NTdHlsZToiIn19LEd0PWZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49IiI7dHJ5e3ZhciByPXRbMV0/dFsxXS50cmltKCk6IiIsaT10WzJdP3RbMl0udHJpbSgpOiIiLGE9dFszXT9RdCh0WzNdLnRyaW0oKSk6IiIsbz10WzRdP3RbNF0udHJpbSgpOiIiO249citpKyIoIithKyIpIisodFs1XT8iIDogIitRdCh0WzVdKS50cmltKCk6IiIpLGU9S3Qobyl9Y2F0Y2goZSl7bj10fXJldHVybntkaXNwbGF5VGV4dDpuLGNzc1N0eWxlOmV9fSxYdD1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiLHI9IiIsaT10LmluZGV4T2YoIigiKSxhPXQuaW5kZXhPZigiKSIpO2lmKGk+MSYmYT5pJiZhPD10Lmxlbmd0aCl7dmFyIG89IiIscz0iIixjPXQuc3Vic3RyaW5nKDAsMSk7Yy5tYXRjaCgvXHcvKT9zPXQuc3Vic3RyaW5nKDAsaSkudHJpbSgpOihjLm1hdGNoKC9cK3wtfH58Iy8pJiYobz1jKSxzPXQuc3Vic3RyaW5nKDEsaSkudHJpbSgpKTt2YXIgdT10LnN1YnN0cmluZyhpKzEsYSksbD10LnN1YnN0cmluZyhhKzEsMSk7bj1LdChsKSxlPW8rcysiKCIrUXQodS50cmltKCkpKyIpIixhPCIiLmxlbmd0aCYmIiIhPT0ocj10LnN1YnN0cmluZyhhKzIpLnRyaW0oKSkmJihyPSIgOiAiK1F0KHIpKX1lbHNlIGU9UXQodCk7cmV0dXJue2Rpc3BsYXlUZXh0OmUsY3NzU3R5bGU6bn19LFp0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPVZ0KGUpLGE9dC5hcHBlbmQoInRzcGFuIikuYXR0cigieCIsci5wYWRkaW5nKS50ZXh0KGkuZGlzcGxheVRleHQpOyIiIT09aS5jc3NTdHlsZSYmYS5hdHRyKCJzdHlsZSIsaS5jc3NTdHlsZSksbnx8YS5hdHRyKCJkeSIsci50ZXh0SGVpZ2h0KX0sUXQ9ZnVuY3Rpb24gdChlKXt2YXIgbj1lO3JldHVybi0xIT1lLmluZGV4T2YoIn4iKT90KG49KG49bi5yZXBsYWNlKCJ+IiwiPCIpKS5yZXBsYWNlKCJ+IiwiPiIpKTpufSxLdD1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSIqIjpyZXR1cm4iZm9udC1zdHlsZTppdGFsaWM7IjtjYXNlIiQiOnJldHVybiJ0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyI7ZGVmYXVsdDpyZXR1cm4iIn19LEp0PWZ1bmN0aW9uKHQsZSxuKXtjLmluZm8oIlJlbmRlcmluZyBjbGFzcyAiK2UpO3ZhciByLGk9ZS5pZCxhPXtpZDppLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0sbz10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixOdChpKSkuYXR0cigiY2xhc3MiLCJjbGFzc0dyb3VwIik7cj1lLmxpbms/by5hcHBlbmQoInN2ZzphIikuYXR0cigieGxpbms6aHJlZiIsZS5saW5rKS5hdHRyKCJ0YXJnZXQiLGUubGlua1RhcmdldCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsbi50ZXh0SGVpZ2h0K24ucGFkZGluZykuYXR0cigieCIsMCk6by5hcHBlbmQoInRleHQiKS5hdHRyKCJ5IixuLnRleHRIZWlnaHQrbi5wYWRkaW5nKS5hdHRyKCJ4IiwwKTt2YXIgcz0hMDtlLmFubm90YXRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwZW5kKCJ0c3BhbiIpLnRleHQoIsKrIit0KyLCuyIpO3N8fGUuYXR0cigiZHkiLG4udGV4dEhlaWdodCkscz0hMX0pKTt2YXIgdT1lLmlkO3ZvaWQgMCE9PWUudHlwZSYmIiIhPT1lLnR5cGUmJih1Kz0iPCIrZS50eXBlKyI+Iik7dmFyIGw9ci5hcHBlbmQoInRzcGFuIikudGV4dCh1KS5hdHRyKCJjbGFzcyIsInRpdGxlIik7c3x8bC5hdHRyKCJkeSIsbi50ZXh0SGVpZ2h0KTt2YXIgaD1yLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0LGY9by5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieTEiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luLzIpLGQ9by5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGgrbi5kaXZpZGVyTWFyZ2luK24udGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtzPSEwLGUubWVtYmVycy5mb3JFYWNoKChmdW5jdGlvbih0KXtadChkLHQscyxuKSxzPSExfSkpO3ZhciBwPWQubm9kZSgpLmdldEJCb3goKSx5PW8uYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQpLmF0dHIoInkyIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQpLGc9by5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuLnBhZGRpbmcpLmF0dHIoInkiLGgrMipuLmRpdmlkZXJNYXJnaW4rcC5oZWlnaHQrbi50ZXh0SGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjbGFzcyIsImNsYXNzVGV4dCIpO3M9ITAsZS5tZXRob2RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe1p0KGcsdCxzLG4pLHM9ITF9KSk7dmFyIHY9by5ub2RlKCkuZ2V0QkJveCgpLG09IiAiO2UuY3NzQ2xhc3Nlcy5sZW5ndGg+MCYmKG0rPWUuY3NzQ2xhc3Nlcy5qb2luKCIgIikpO3ZhciBiPW8uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHYud2lkdGgrMipuLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdi5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbikuYXR0cigiY2xhc3MiLG0pLm5vZGUoKS5nZXRCQm94KCkud2lkdGg7cmV0dXJuIHIubm9kZSgpLmNoaWxkTm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5zZXRBdHRyaWJ1dGUoIngiLChiLXQuZ2V0QkJveCgpLndpZHRoKS8yKX0pKSxlLnRvb2x0aXAmJnIuaW5zZXJ0KCJ0aXRsZSIpLnRleHQoZS50b29sdGlwKSxmLmF0dHIoIngyIixiKSx5LmF0dHIoIngyIixiKSxhLndpZHRoPWIsYS5oZWlnaHQ9di5oZWlnaHQrbi5wYWRkaW5nKy41Km4uZGl2aWRlck1hcmdpbixhfSx0ZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBSdC5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgUnQuRVhURU5TSU9OOnJldHVybiJleHRlbnNpb24iO2Nhc2UgUnQuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIFJ0LkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX07ZS5wb2ludHM9ZS5wb2ludHMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hTnVtYmVyLmlzTmFOKHQueSl9KSk7dmFyIGEsbyxzPWUucG9pbnRzLHU9T2JqZWN0KGgubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoaC5jdXJ2ZUJhc2lzKSxsPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsdShzKSkuYXR0cigiaWQiLCJlZGdlIitXdCkuYXR0cigiY2xhc3MiLCJyZWxhdGlvbiIpLGY9IiI7ci5hcnJvd01hcmtlckFic29sdXRlJiYoZj0oZj0oZj13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSwxPT1uLnJlbGF0aW9uLmxpbmVUeXBlJiZsLmF0dHIoImNsYXNzIiwicmVsYXRpb24gZGFzaGVkLWxpbmUiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUxJiZsLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK2YrIiMiK2kobi5yZWxhdGlvbi50eXBlMSkrIlN0YXJ0KSIpLCJub25lIiE9PW4ucmVsYXRpb24udHlwZTImJmwuYXR0cigibWFya2VyLWVuZCIsInVybCgiK2YrIiMiK2kobi5yZWxhdGlvbi50eXBlMikrIkVuZCkiKTt2YXIgZCxwLHksZyx2PWUucG9pbnRzLmxlbmd0aCxtPVYuY2FsY0xhYmVsUG9zaXRpb24oZS5wb2ludHMpO2lmKGE9bS54LG89bS55LHYlMiE9MCYmdj4xKXt2YXIgYj1WLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLHg9Vi5jYWxjQ2FyZGluYWxpdHlQb3NpdGlvbigibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyLGUucG9pbnRzLGUucG9pbnRzW3YtMV0pO2MuZGVidWcoImNhcmRpbmFsaXR5XzFfcG9pbnQgIitKU09OLnN0cmluZ2lmeShiKSksYy5kZWJ1ZygiY2FyZGluYWxpdHlfMl9wb2ludCAiK0pTT04uc3RyaW5naWZ5KHgpKSxkPWIueCxwPWIueSx5PXgueCxnPXgueX1pZih2b2lkIDAhPT1uLnRpdGxlKXt2YXIgXz10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2xhc3NMYWJlbCIpLGs9Xy5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigieCIsYSkuYXR0cigieSIsbykuYXR0cigiZmlsbCIsInJlZCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChuLnRpdGxlKTt3aW5kb3cubGFiZWw9azt2YXIgdz1rLm5vZGUoKS5nZXRCQm94KCk7Xy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLHcueC1yLnBhZGRpbmcvMikuYXR0cigieSIsdy55LXIucGFkZGluZy8yKS5hdHRyKCJ3aWR0aCIsdy53aWR0aCtyLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsdy5oZWlnaHQrci5wYWRkaW5nKX0oYy5pbmZvKCJSZW5kZXJpbmcgcmVsYXRpb24gIitKU09OLnN0cmluZ2lmeShuKSksdm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMSYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMSkmJnQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXJkaW5hbGl0eSIpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwidHlwZTEiKS5hdHRyKCJ4IixkKS5hdHRyKCJ5IixwKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJmb250LXNpemUiLCI2IikudGV4dChuLnJlbGF0aW9uVGl0bGUxKTt2b2lkIDAhPT1uLnJlbGF0aW9uVGl0bGUyJiYibm9uZSIhPT1uLnJlbGF0aW9uVGl0bGUyJiZ0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUyIikuYXR0cigieCIseSkuYXR0cigieSIsZykuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQobi5yZWxhdGlvblRpdGxlMik7V3QrK307JHQucGFyc2VyLnl5PVB0O3ZhciBlZT17fSxuZT17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMH0scmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKGVlKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYoZWVbZVtuXV0ubGFiZWw9PT10KXJldHVybiBlW25dfSxpZT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtuZVtlXT10W2VdfSkpfSxhZT1mdW5jdGlvbih0LGUpe2VlPXt9LCR0LnBhcnNlci55eS5jbGVhcigpLCR0LnBhcnNlci5wYXJzZSh0KSxjLmluZm8oIlJlbmRlcmluZyBkaWFncmFtICIrdCk7dmFyIG4scj1PYmplY3QoaC5zZWxlY3QpKCJbaWQ9JyIuY29uY2F0KGUsIiddIikpO3IuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksKG49cikuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImV4dGVuc2lvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJleHRlbnNpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsImV4dGVuc2lvbiIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNvbXBvc2l0aW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhZ2dyZWdhdGlvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDUsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKTt2YXIgaT1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMH0pO2kuc2V0R3JhcGgoe2lzTXVsdGlHcmFwaDohMH0pLGkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtmb3IodmFyIGE9UHQuZ2V0Q2xhc3NlcygpLG89T2JqZWN0LmtleXMoYSkscz0wO3M8by5sZW5ndGg7cysrKXt2YXIgdT1hW29bc11dLGw9SnQocix1LG5lKTtlZVtsLmlkXT1sLGkuc2V0Tm9kZShsLmlkLGwpLGMuaW5mbygiT3JnIGhlaWdodDogIitsLmhlaWdodCl9UHQuZ2V0UmVsYXRpb25zKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yy5pbmZvKCJ0am9obyIrcmUodC5pZDEpK3JlKHQuaWQyKStKU09OLnN0cmluZ2lmeSh0KSksaS5zZXRFZGdlKHJlKHQuaWQxKSxyZSh0LmlkMikse3JlbGF0aW9uOnR9LHQudGl0bGV8fCJERUZBVUxUIil9KSksWXQuYS5sYXlvdXQoaSksaS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkubm9kZSh0KSYmKGMuZGVidWcoIk5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoaS5ub2RlKHQpKSksT2JqZWN0KGguc2VsZWN0KSgiIyIrTnQodCkpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhpLm5vZGUodCkueC1pLm5vZGUodCkud2lkdGgvMikrIiwiKyhpLm5vZGUodCkueS1pLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpKX0pKSxpLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09aS5lZGdlKHQpJiYoYy5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoaS5lZGdlKHQpKSksdGUocixpLmVkZ2UodCksaS5lZGdlKHQpLnJlbGF0aW9uLG5lKSl9KSk7dmFyIGY9ci5ub2RlKCkuZ2V0QkJveCgpLGQ9Zi53aWR0aCs0MCxwPWYuaGVpZ2h0KzQwO1cocixwLGQsbmUudXNlTWF4V2lkdGgpO3ZhciB5PSIiLmNvbmNhdChmLngtMjAsIiAiKS5jb25jYXQoZi55LTIwLCIgIikuY29uY2F0KGQsIiAiKS5jb25jYXQocCk7Yy5kZWJ1Zygidmlld0JveCAiLmNvbmNhdCh5KSksci5hdHRyKCJ2aWV3Qm94Iix5KX0sb2U9e2V4dGVuc2lvbjpmdW5jdGlvbih0LGUsbil7Yy50cmFjZSgiTWFraW5nIG1hcmtlcnMgZm9yICIsbiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZXh0ZW5zaW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsNyBMMTgsMTMgViAxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1leHRlbnNpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBleHRlbnNpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIFYgMTMgTDE4LDcgWiIpfSxjb21wb3NpdGlvbjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNvbXBvc2l0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNvbXBvc2l0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY29tcG9zaXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxhZ2dyZWdhdGlvbjpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWFnZ3JlZ2F0aW9uU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWFnZ3JlZ2F0aW9uRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgYWdncmVnYXRpb24gIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpfSxkZXBlbmRlbmN5OmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZGVwZW5kZW5jeVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gNSw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItZGVwZW5kZW5jeUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGRlcGVuZGVuY3kgIitlKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1wb2ludEVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLXBvaW50U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDEyKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDEyKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCA1IEwgMTAgMTAgTCAxMCAwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGNpcmNsZTpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNpcmNsZUVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDExKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jaXJjbGVTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLC0xKS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsIjUiKS5hdHRyKCJjeSIsIjUiKS5hdHRyKCJyIiwiNSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY3Jvc3M6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jcm9zc0VuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNyb3NzICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMSAxMSIpLmF0dHIoInJlZlgiLDEyKS5hdHRyKCJyZWZZIiw1LjIpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgbCA5LDkgTSAxMCwxIGwgLTksOSIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKSx0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1jcm9zc1N0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxiYXJiOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYmFyYkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMTQpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKX19LHNlPWZ1bmN0aW9uKHQsZSxuLHIpe2UuZm9yRWFjaCgoZnVuY3Rpb24oZSl7b2VbZV0odCxuLHIpfSkpfTtmdW5jdGlvbiBjZSh0KXtyZXR1cm4oY2U9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgdWU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dHx8IiI7aWYoIm9iamVjdCI9PT1jZShpKSYmKGk9aVswXSkseChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSlyZXR1cm4gaT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxjLmluZm8oInZlcnRleFRleHQiK2kpLGZ1bmN0aW9uKHQpe3ZhciBlLG4scj1PYmplY3QoaC5zZWxlY3QpKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLGk9ci5hcHBlbmQoInhodG1sOmRpdiIpLGE9dC5sYWJlbCxvPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiBpLmh0bWwoJzxzcGFuIGNsYXNzPSInK28rJyIgJysodC5sYWJlbFN0eWxlPydzdHlsZT0iJyt0LmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrYSsiPC9zcGFuPiIpLGU9aSwobj10LmxhYmVsU3R5bGUpJiZlLmF0dHIoInN0eWxlIixuKSxpLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksaS5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHIubm9kZSgpfSh7aXNOb2RlOnIsbGFiZWw6aS5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKSxsYWJlbFN0eWxlOmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX0pO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO3ZhciBvPVtdO289InN0cmluZyI9PXR5cGVvZiBpP2kuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP2k6W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciB1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Uuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksdS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksdS5zZXRBdHRyaWJ1dGUoIngiLCIwIiksbj91LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTp1LnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSx1LnRleHRDb250ZW50PW9bc10udHJpbSgpLGEuYXBwZW5kQ2hpbGQodSl9cmV0dXJuIGF9LGxlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpO2k9bnx8Im5vZGUgZGVmYXVsdCI7dmFyIGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG89YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGUubGFiZWxTdHlsZSkscz1vLm5vZGUoKS5hcHBlbmRDaGlsZCh1ZShlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsITEscikpLGM9cy5nZXRCQm94KCk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIHU9cy5jaGlsZHJlblswXSxsPU9iamVjdChoLnNlbGVjdCkocyk7Yz11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGwuYXR0cigid2lkdGgiLGMud2lkdGgpLGwuYXR0cigiaGVpZ2h0IixjLmhlaWdodCl9dmFyIGY9ZS5wYWRkaW5nLzI7cmV0dXJuIG8uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWMud2lkdGgvMisiLCAiKy1jLmhlaWdodC8yKyIpIikse3NoYXBlU3ZnOmEsYmJveDpjLGhhbGZQYWRkaW5nOmYsbGFiZWw6b319LGhlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5ub2RlKCkuZ2V0QkJveCgpO3Qud2lkdGg9bi53aWR0aCx0LmhlaWdodD1uLmhlaWdodH07ZnVuY3Rpb24gZmUodCxlLG4scil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSkuYXR0cigiY2xhc3MiLCJsYWJlbC1jb250YWluZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZS8yKyIsIituLzIrIikiKX12YXIgZGU9e30scGU9e30seWU9e30sZ2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy50cmFjZSgiSW4gaXNEZWNlbmRhbnQiLGUsIiAiLHQsIiA9ICIscGVbZV0uaW5kZXhPZih0KT49MCkscGVbZV0uaW5kZXhPZih0KT49MH0sdmU9ZnVuY3Rpb24gdChlLG4scixpKXtjLndhcm4oIkNvcHlpbmcgY2hpbGRyZW4gb2YgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSk7dmFyIGE9bi5jaGlsZHJlbihlKXx8W107ZSE9PWkmJmEucHVzaChlKSxjLndhcm4oIkNvcHlpbmcgKG5vZGVzKSBjbHVzdGVySWQiLGUsIm5vZGVzIixhKSxhLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKG4uY2hpbGRyZW4oYSkubGVuZ3RoPjApdChhLG4scixpKTtlbHNle3ZhciBvPW4ubm9kZShhKTtjLmluZm8oImNwICIsYSwiIHRvICIsaSwiIHdpdGggcGFyZW50ICIsZSksci5zZXROb2RlKGEsbyksaSE9PW4ucGFyZW50KGEpJiYoYy53YXJuKCJTZXR0aW5nIHBhcmVudCIsYSxuLnBhcmVudChhKSksci5zZXRQYXJlbnQoYSxuLnBhcmVudChhKSkpLGUhPT1pJiZhIT09ZT8oYy5kZWJ1ZygiU2V0dGluZyBwYXJlbnQiLGEsZSksci5zZXRQYXJlbnQoYSxlKSk6KGMuaW5mbygiSW4gY29weSAiLGUsInJvb3QiLGksImRhdGEiLG4ubm9kZShlKSxpKSxjLmRlYnVnKCJOb3QgU2V0dGluZyBwYXJlbnQgZm9yIG5vZGU9IixhLCJjbHVzdGVyIT09cm9vdElkIixlIT09aSwibm9kZSE9PWNsdXN0ZXJJZCIsYSE9PWUpKTt2YXIgcz1uLmVkZ2VzKGEpO2MuZGVidWcoIkNvcHlpbmcgRWRnZXMiLHMpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yy5pbmZvKCJFZGdlIix0KTt2YXIgYT1uLmVkZ2UodC52LHQudyx0Lm5hbWUpO2MuaW5mbygiRWRnZSBkYXRhIixhLGkpO3RyeXshZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5pbmZvKCJEZWNlbmRhbnRzIG9mICIsZSwiIGlzICIscGVbZV0pLGMuaW5mbygiRWRnZSBpcyAiLHQpLHQudiE9PWUmJih0LnchPT1lJiYocGVbZV0/KGMuaW5mbygiSGVyZSAiKSxwZVtlXS5pbmRleE9mKHQudik+PTB8fCghIWdlKHQudixlKXx8KCEhZ2UodC53LGUpfHxwZVtlXS5pbmRleE9mKHQudyk+PTApKSk6KGMuZGVidWcoIlRpbHQsICIsZSwiLG5vdCBpbiBkZWNlbmRhbnRzIiksITEpKSl9KHQsaSk/Yy5pbmZvKCJTa2lwcGluZyBjb3B5IG9mIGVkZ2UgIix0LnYsIi0tXHgzZSIsdC53LCIgcm9vdElkOiAiLGksIiBjbHVzdGVySWQ6IixlKTooYy5pbmZvKCJDb3B5aW5nIGFzICIsdC52LHQudyxhLHQubmFtZSksci5zZXRFZGdlKHQudix0LncsYSx0Lm5hbWUpLGMuaW5mbygibmV3R3JhcGggZWRnZXMgIixyLmVkZ2VzKCksci5lZGdlKHIuZWRnZXMoKVswXSkpKX1jYXRjaCh0KXtjLmVycm9yKHQpfX0pKX1jLmRlYnVnKCJSZW1vdmluZyBub2RlIixhKSxuLnJlbW92ZU5vZGUoYSl9KSl9LG1lPWZ1bmN0aW9uIHQoZSxuKXtjLnRyYWNlKCJTZWFyY2hpbmciLGUpO3ZhciByPW4uY2hpbGRyZW4oZSk7aWYoYy50cmFjZSgiU2VhcmNoaW5nIGNoaWxkcmVuIG9mIGlkICIsZSxyKSxyLmxlbmd0aDwxKXJldHVybiBjLnRyYWNlKCJUaGlzIGlzIGEgdmFsaWQgbm9kZSIsZSksZTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9dChyW2ldLG4pO2lmKGEpcmV0dXJuIGMudHJhY2UoIkZvdW5kIHJlcGxhY2VtZW50IGZvciIsZSwiID0+ICIsYSksYX19LGJlPWZ1bmN0aW9uKHQpe3JldHVybiBkZVt0XSYmZGVbdF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmZGVbdF0/ZGVbdF0uaWQ6dH0seGU9ZnVuY3Rpb24odCxlKXshdHx8ZT4xMD9jLmRlYnVnKCJPcHRpbmcgb3V0LCBubyBncmFwaCAiKTooYy5kZWJ1ZygiT3B0aW5nIGluLCBncmFwaCAiKSx0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dC5jaGlsZHJlbihlKS5sZW5ndGg+MCYmKGMud2FybigiQ2x1c3RlciBpZGVudGlmaWVkIixlLCIgUmVwbGFjZW1lbnQgaWQgaW4gZWRnZXM6ICIsbWUoZSx0KSkscGVbZV09ZnVuY3Rpb24gdChlLG4pe2Zvcih2YXIgcj1uLmNoaWxkcmVuKGUpLGk9W10uY29uY2F0KHIpLGE9MDthPHIubGVuZ3RoO2ErKyl5ZVtyW2FdXT1lLGk9aS5jb25jYXQodChyW2FdLG4pKTtyZXR1cm4gaX0oZSx0KSxkZVtlXT17aWQ6bWUoZSx0KSxjbHVzdGVyRGF0YTp0Lm5vZGUoZSl9KX0pKSx0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5jaGlsZHJlbihlKSxyPXQuZWRnZXMoKTtuLmxlbmd0aD4wPyhjLmRlYnVnKCJDbHVzdGVyIGlkZW50aWZpZWQiLGUscGUpLHIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC52IT09ZSYmdC53IT09ZSYmKGdlKHQudixlKV5nZSh0LncsZSkmJihjLndhcm4oIkVkZ2U6ICIsdCwiIGxlYXZlcyBjbHVzdGVyICIsZSksYy53YXJuKCJEZWNlbmRhbnRzIG9mIFhYWCAiLGUsIjogIixwZVtlXSksZGVbZV0uZXh0ZXJuYWxDb25uZWN0aW9ucz0hMCkpfSkpKTpjLmRlYnVnKCJOb3QgYSBjbHVzdGVyICIsZSxwZSl9KSksdC5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtjLndhcm4oIkVkZ2UgIitlLnYrIiAtPiAiK2UudysiOiAiK0pTT04uc3RyaW5naWZ5KGUpKSxjLndhcm4oIkVkZ2UgIitlLnYrIiAtPiAiK2UudysiOiAiK0pTT04uc3RyaW5naWZ5KHQuZWRnZShlKSkpO3ZhciByPWUudixpPWUudztjLndhcm4oIkZpeCBYWFgiLGRlLCJpZHM6IixlLnYsZS53LCJUcmFuc2xhdGVpbmc6ICIsZGVbZS52XSwiIC0tLSAiLGRlW2Uud10pLChkZVtlLnZdfHxkZVtlLnddKSYmKGMud2FybigiRml4aW5nIGFuZCB0cml4aW5nIC0gcmVtb3ZpbmcgWFhYIixlLnYsZS53LGUubmFtZSkscj1iZShlLnYpLGk9YmUoZS53KSx0LnJlbW92ZUVkZ2UoZS52LGUudyxlLm5hbWUpLHIhPT1lLnYmJihuLmZyb21DbHVzdGVyPWUudiksaSE9PWUudyYmKG4udG9DbHVzdGVyPWUudyksYy53YXJuKCJGaXggUmVwbGFjaW5nIHdpdGggWFhYIixyLGksZS5uYW1lKSx0LnNldEVkZ2UocixpLG4sZS5uYW1lKSl9KSksYy53YXJuKCJBZGp1c3RlZCBHcmFwaCIsVXQuYS5qc29uLndyaXRlKHQpKSxfZSh0LDApLGMudHJhY2UoZGUpKX0sX2U9ZnVuY3Rpb24gdChlLG4pe2lmKGMud2FybigiZXh0cmFjdG9yIC0gIixuLFV0LmEuanNvbi53cml0ZShlKSxlLmNoaWxkcmVuKCJEIikpLG4+MTApYy5lcnJvcigiQmFpbGluZyBvdXQiKTtlbHNle2Zvcih2YXIgcj1lLm5vZGVzKCksaT0hMSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz1lLmNoaWxkcmVuKG8pO2k9aXx8cy5sZW5ndGg+MH1pZihpKXtjLmRlYnVnKCJOb2RlcyA9ICIscixuKTtmb3IodmFyIHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGw9clt1XTtpZihjLmRlYnVnKCJFeHRyYWN0aW5nIG5vZGUiLGwsZGUsZGVbbF0mJiFkZVtsXS5leHRlcm5hbENvbm5lY3Rpb25zLCFlLnBhcmVudChsKSxlLm5vZGUobCksZS5jaGlsZHJlbigiRCIpLCIgRGVwdGggIixuKSxkZVtsXSlpZighZGVbbF0uZXh0ZXJuYWxDb25uZWN0aW9ucyYmZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCl7Yy53YXJuKCJDbHVzdGVyIHdpdGhvdXQgZXh0ZXJuYWwgY29ubmVjdGlvbnMsIHdpdGhvdXQgYSBwYXJlbnQgYW5kIHdpdGggY2hpbGRyZW4iLGwsbik7dmFyIGg9IlRCIj09PWUuZ3JhcGgoKS5yYW5rZGlyPyJMUiI6IlRCIjtkZVtsXSYmZGVbbF0uY2x1c3RlckRhdGEmJmRlW2xdLmNsdXN0ZXJEYXRhLmRpciYmKGg9ZGVbbF0uY2x1c3RlckRhdGEuZGlyLGMud2FybigiRml4aW5nIGRpciIsZGVbbF0uY2x1c3RlckRhdGEuZGlyLGgpKTt2YXIgZj1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOmgsbm9kZXNlcDo1MCxyYW5rc2VwOjUwLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO2Mud2FybigiT2xkIGdyYXBoIGJlZm9yZSBjb3B5IixVdC5hLmpzb24ud3JpdGUoZSkpLHZlKGwsZSxmLGwpLGUuc2V0Tm9kZShsLHtjbHVzdGVyTm9kZTohMCxpZDpsLGNsdXN0ZXJEYXRhOmRlW2xdLmNsdXN0ZXJEYXRhLGxhYmVsVGV4dDpkZVtsXS5sYWJlbFRleHQsZ3JhcGg6Zn0pLGMud2FybigiTmV3IGdyYXBoIGFmdGVyIGNvcHkgbm9kZTogKCIsbCwiKSIsVXQuYS5qc29uLndyaXRlKGYpKSxjLmRlYnVnKCJPbGQgZ3JhcGggYWZ0ZXIgY29weSIsVXQuYS5qc29uLndyaXRlKGUpKX1lbHNlIGMud2FybigiQ2x1c3RlciAqKiAiLGwsIiAqKm5vdCBtZWV0aW5nIHRoZSBjcml0ZXJpYSAhZXh0ZXJuYWxDb25uZWN0aW9uczoiLCFkZVtsXS5leHRlcm5hbENvbm5lY3Rpb25zLCIgbm8gcGFyZW50OiAiLCFlLnBhcmVudChsKSwiIGNoaWxkcmVuICIsZS5jaGlsZHJlbihsKSYmZS5jaGlsZHJlbihsKS5sZW5ndGg+MCxlLmNoaWxkcmVuKCJEIiksbiksYy5kZWJ1ZyhkZSk7ZWxzZSBjLmRlYnVnKCJOb3QgYSBjbHVzdGVyIixsLG4pfXI9ZS5ub2RlcygpLGMud2FybigiTmV3IGxpc3Qgb2Ygbm9kZXMiLHIpO2Zvcih2YXIgZD0wO2Q8ci5sZW5ndGg7ZCsrKXt2YXIgcD1yW2RdLHk9ZS5ub2RlKHApO2Mud2FybigiIE5vdyBuZXh0IGxldmVsIixwLHkpLHkuY2x1c3Rlck5vZGUmJnQoeS5ncmFwaCxuKzEpfX1lbHNlIGMuZGVidWcoIkRvbmUsIG5vIG5vZGUgaGFzIGNoaWxkcmVuIixlLm5vZGVzKCkpfX0sa2U9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXtpZigwPT09bi5sZW5ndGgpcmV0dXJuW107dmFyIHI9T2JqZWN0LmFzc2lnbihuKTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT1lLmNoaWxkcmVuKG4pLGE9dChlLGkpO3I9ci5jb25jYXQoYSl9KSkscn0odCx0LmNoaWxkcmVuKCkpfSx3ZT1uKDE3MSk7dmFyIEVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQueCxhPXQueSxvPWktci54LHM9YS1yLnksYz1NYXRoLnNxcnQoZSplKnMqcytuKm4qbypvKSx1PU1hdGguYWJzKGUqbipvL2MpO3IueDxpJiYodT0tdSk7dmFyIGw9TWF0aC5hYnMoZSpuKnMvYyk7cmV0dXJuIHIueTxhJiYobD0tbCkse3g6aSt1LHk6YStsfX07dmFyIFRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRWUodCxlLGUsbil9O2Z1bmN0aW9uIENlKHQsZSl7cmV0dXJuIHQqZT4wfXZhciBTZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG8scyxjLHUsbCxoLGYsZCxwLHksZztpZihpPWUueS10Lnksbz10LngtZS54LGM9ZS54KnQueS10LngqZS55LGY9aSpuLngrbypuLnkrYyxkPWkqci54K28qci55K2MsISgwIT09ZiYmMCE9PWQmJkNlKGYsZCl8fChhPXIueS1uLnkscz1uLngtci54LHU9ci54Km4ueS1uLngqci55LGw9YSp0Lngrcyp0LnkrdSxoPWEqZS54K3MqZS55K3UsMCE9PWwmJjAhPT1oJiZDZShsLGgpfHwwPT0ocD1pKnMtYSpvKSkpKXJldHVybiB5PU1hdGguYWJzKHAvMikse3g6KGc9byp1LXMqYyk8MD8oZy15KS9wOihnK3kpL3AseTooZz1hKmMtaSp1KTwwPyhnLXkpL3A6KGcreSkvcH19LEFlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LngsaT10LnksYT1bXSxvPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzPU51bWJlci5QT1NJVElWRV9JTkZJTklUWTsiZnVuY3Rpb24iPT10eXBlb2YgZS5mb3JFYWNoP2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7bz1NYXRoLm1pbihvLHQueCkscz1NYXRoLm1pbihzLHQueSl9KSk6KG89TWF0aC5taW4obyxlLngpLHM9TWF0aC5taW4ocyxlLnkpKTtmb3IodmFyIGM9ci10LndpZHRoLzItbyx1PWktdC5oZWlnaHQvMi1zLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGg9ZVtsXSxmPWVbbDxlLmxlbmd0aC0xP2wrMTowXSxkPVNlKHQsbix7eDpjK2gueCx5OnUraC55fSx7eDpjK2YueCx5OnUrZi55fSk7ZCYmYS5wdXNoKGQpfWlmKCFhLmxlbmd0aClyZXR1cm4gdDthLmxlbmd0aD4xJiZhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LW4ueCxpPXQueS1uLnksYT1NYXRoLnNxcnQocipyK2kqaSksbz1lLngtbi54LHM9ZS55LW4ueSxjPU1hdGguc3FydChvKm8rcypzKTtyZXR1cm4gYTxjPy0xOmE9PT1jPzA6MX0pKTtyZXR1cm4gYVswXX07dmFyIE1lPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQueCxhPXQueSxvPWUueC1pLHM9ZS55LWEsYz10LndpZHRoLzIsdT10LmhlaWdodC8yO3JldHVybiBNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKSx7eDppK24seTphK3J9fSxPZT17bm9kZTpuLm4od2UpLmEsY2lyY2xlOlRlLGVsbGlwc2U6RWUscG9seWdvbjpBZSxyZWN0Ok1lfTtmdW5jdGlvbiBCZSh0KXtyZXR1cm4oQmU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgTmU9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCksaT03MCxhPTEwOyJMUiI9PT1uJiYoaT0xMCxhPTcwKTt2YXIgbz1yLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLC0xKmkvMikuYXR0cigieSIsLTEqYS8yKS5hdHRyKCJ3aWR0aCIsaSkuYXR0cigiaGVpZ2h0IixhKS5hdHRyKCJjbGFzcyIsImZvcmstam9pbiIpO3JldHVybiBoZShlLG8pLGUuaGVpZ2h0PWUuaGVpZ2h0K2UucGFkZGluZy8yLGUud2lkdGg9ZS53aWR0aCtlLnBhZGRpbmcvMixlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxyfSxEZT17cXVlc3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZysoaS5oZWlnaHQrZS5wYWRkaW5nKSxvPVt7eDphLzIseTowfSx7eDphLHk6LWEvMn0se3g6YS8yLHk6LWF9LHt4OjAseTotYS8yfV07Yy5pbmZvKCJRdWVzdGlvbiBtYWluIChDaXJjbGUpIik7dmFyIHM9ZmUocixhLGEsbyk7cmV0dXJuIHMuYXR0cigic3R5bGUiLGUuc3R5bGUpLGhlKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGMud2FybigiSW50ZXJzZWN0IGNhbGxlZCIpLE9lLnBvbHlnb24oZSxvLHQpfSxyfSxyZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLCJub2RlICIrZS5jbGFzc2VzLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1uLmhhbGZQYWRkaW5nO2MudHJhY2UoIkNsYXNzZXMgPSAiLGUuY2xhc3Nlcyk7dmFyIG89ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gby5hdHRyKCJjbGFzcyIsImJhc2ljIGxhYmVsLWNvbnRhaW5lciIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLC1pLndpZHRoLzItYSkuYXR0cigieSIsLWkuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGkud2lkdGgrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0K2UucGFkZGluZyksaGUoZSxvKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxyfSxyZWN0V2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG47bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9ci5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxhPXIuaW5zZXJ0KCJsaW5lIiksbz1yLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxzPWUubGFiZWxUZXh0LmZsYXQ/ZS5sYWJlbFRleHQuZmxhdCgpOmUubGFiZWxUZXh0LHU9IiI7dT0ib2JqZWN0Ij09PUJlKHMpP3NbMF06cyxjLmluZm8oIkxhYmVsIHRleHQgYWJjNzkiLHUscywib2JqZWN0Ij09PUJlKHMpKTt2YXIgbCxmPW8ubm9kZSgpLmFwcGVuZENoaWxkKHVlKHUsZS5sYWJlbFN0eWxlLCEwLCEwKSk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGQ9Zi5jaGlsZHJlblswXSxwPU9iamVjdChoLnNlbGVjdCkoZik7bD1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHAuYXR0cigid2lkdGgiLGwud2lkdGgpLHAuYXR0cigiaGVpZ2h0IixsLmhlaWdodCl9Yy5pbmZvKCJUZXh0IDIiLHMpO3ZhciB5PXMuc2xpY2UoMSxzLmxlbmd0aCksZz1mLmdldEJCb3goKSx2PW8ubm9kZSgpLmFwcGVuZENoaWxkKHVlKHkuam9pbj95LmpvaW4oIjxici8+Iik6eSxlLmxhYmVsU3R5bGUsITAsITApKTtpZih4KF90KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgbT12LmNoaWxkcmVuWzBdLGI9T2JqZWN0KGguc2VsZWN0KSh2KTtsPW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYi5hdHRyKCJ3aWR0aCIsbC53aWR0aCksYi5hdHRyKCJoZWlnaHQiLGwuaGVpZ2h0KX12YXIgXz1lLnBhZGRpbmcvMjtyZXR1cm4gT2JqZWN0KGguc2VsZWN0KSh2KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGwud2lkdGg+Zy53aWR0aD8wOihnLndpZHRoLWwud2lkdGgpLzIpKyIsICIrKGcuaGVpZ2h0K18rNSkrIikiKSxPYmplY3QoaC5zZWxlY3QpKGYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisobC53aWR0aDxnLndpZHRoPzA6LShnLndpZHRoLWwud2lkdGgpLzIpKyIsIDApIiksbD1vLm5vZGUoKS5nZXRCQm94KCksby5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistbC53aWR0aC8yKyIsICIrKC1sLmhlaWdodC8yLV8rMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtbC53aWR0aC8yLV8pLmF0dHIoInkiLC1sLmhlaWdodC8yLV8pLmF0dHIoIndpZHRoIixsLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixsLmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1sLndpZHRoLzItXykuYXR0cigieDIiLGwud2lkdGgvMitfKS5hdHRyKCJ5MSIsLWwuaGVpZ2h0LzItXytnLmhlaWdodCtfKS5hdHRyKCJ5MiIsLWwuaGVpZ2h0LzItXytnLmhlaWdodCtfKSxoZShlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5yZWN0KGUsdCl9LHJ9LGNob2ljZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1be3g6MCx5OjE0fSx7eDoxNCx5OjB9LHt4OjAseTotMTR9LHt4Oi0xNCx5OjB9XSxpPW4uaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSk7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UuY2lyY2xlKGUsMTQsdCl9LG59LGNpcmNsZTpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmcsbz1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG8uYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsaS53aWR0aC8yK2EpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLGMuaW5mbygiQ2lyY2xlIG1haW4iKSxoZShlLG8pLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBjLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsaS53aWR0aC8yK2EsdCksT2UuY2lyY2xlKGUsaS53aWR0aC8yK2EsdCl9LHJ9LHN0YWRpdW06ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLmhlaWdodCtlLnBhZGRpbmcsbz1pLndpZHRoK2EvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gaGUoZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxyfSxoZXhhZ29uOmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS5oZWlnaHQrZS5wYWRkaW5nLG89YS80LHM9aS53aWR0aCsyKm8rZS5wYWRkaW5nLGM9W3t4Om8seTowfSx7eDpzLW8seTowfSx7eDpzLHk6LWEvMn0se3g6cy1vLHk6LWF9LHt4Om8seTotYX0se3g6MCx5Oi1hLzJ9XSx1PWZlKHIscyxhLGMpO3JldHVybiB1LmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUsYyx0KX0scn0scmVjdF9sZWZ0X2ludl9hcnJvdzpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi1vLzIseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDotby8yLHk6LW99LHt4OjAseTotby8yfV07cmV0dXJuIGZlKHIsYSxvLHMpLmF0dHIoInN0eWxlIixlLnN0eWxlKSxlLndpZHRoPWErbyxlLmhlaWdodD1vLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0sbGVhbl9yaWdodDpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9ZmUocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLGhlKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE9lLnBvbHlnb24oZSxzLHQpfSxyfSxsZWFuX2xlZnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKm8vNix5OjB9LHt4OmErby82LHk6MH0se3g6YS0yKm8vNix5Oi1vfSx7eDotby82LHk6LW99XSxjPWZlKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0sdHJhcGV6b2lkOmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqby82LHk6MH0se3g6YSsyKm8vNix5OjB9LHt4OmEtby82LHk6LW99LHt4Om8vNix5Oi1vfV0sYz1mZShyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksaGUoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucG9seWdvbihlLHMsdCl9LHJ9LGludl90cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDpvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6LTIqby82LHk6LW99XSxjPWZlKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0scmVjdF9yaWdodF9pbnZfYXJyb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDowLHk6MH0se3g6YStvLzIseTowfSx7eDphLHk6LW8vMn0se3g6YStvLzIseTotb30se3g6MCx5Oi1vfV0sYz1mZShyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSksaGUoZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucG9seWdvbihlLHMsdCl9LHJ9LGN5bGluZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49bGUodCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1hLzIscz1vLygyLjUrYS81MCksYz1pLmhlaWdodCtzK2UucGFkZGluZyx1PSJNIDAsIitzKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGEgIitvKyIsIitzKyIgMCwwLDAgIistYSsiIDAgbCAwLCIrYysiIGEgIitvKyIsIitzKyIgMCwwLDAgIithKyIgMCBsIDAsIistYyxsPXIuYXR0cigibGFiZWwtb2Zmc2V0LXkiLHMpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJkIix1KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS8yKyIsIistKGMvMitzKSsiKSIpO3JldHVybiBoZShlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3ZhciBuPU9lLnJlY3QoZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxoZShlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5jaXJjbGUoZSw3LHQpfSxufSxlbmQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHI9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLHIuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLGhlKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE9lLmNpcmNsZShlLDcsdCl9LG59LG5vdGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1sZSh0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmc7Yy5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBvPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIG8uYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLGhlKGUsbyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE9lLnJlY3QoZSx0KX0scn0sc3Vicm91dGluZTpmdW5jdGlvbih0LGUpe3ZhciBuPWxlKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDowLHk6LW99LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmErOCx5OjB9LHt4OmErOCx5Oi1vfSx7eDotOCx5Oi1vfSx7eDotOCx5OjB9XSxjPWZlKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxoZShlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBPZS5wb2x5Z29uKGUscyx0KX0scn0sZm9yazpOZSxqb2luOk5lLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIikscz1pLmluc2VydCgibGluZSIpLGM9MCx1PTQsbD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxmPTAsZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0scD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIseT1sLm5vZGUoKS5hcHBlbmRDaGlsZCh1ZShwLGUubGFiZWxTdHlsZSwhMCwhMCkpLGc9eS5nZXRCQm94KCk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIHY9eS5jaGlsZHJlblswXSxtPU9iamVjdChoLnNlbGVjdCkoeSk7Zz12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG0uYXR0cigid2lkdGgiLGcud2lkdGgpLG0uYXR0cigiaGVpZ2h0IixnLmhlaWdodCl9ZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0mJih1Kz1nLmhlaWdodCs0LGMrPWcud2lkdGgpO3ZhciBiPWUuY2xhc3NEYXRhLmlkO3ZvaWQgMCE9PWUuY2xhc3NEYXRhLnR5cGUmJiIiIT09ZS5jbGFzc0RhdGEudHlwZSYmKGIrPSI8IitlLmNsYXNzRGF0YS50eXBlKyI+Iik7dmFyIF89bC5ub2RlKCkuYXBwZW5kQ2hpbGQodWUoYixlLmxhYmVsU3R5bGUsITAsITApKTtPYmplY3QoaC5zZWxlY3QpKF8pLmF0dHIoImNsYXNzIiwiY2xhc3NUaXRsZSIpO3ZhciBrPV8uZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciB3PV8uY2hpbGRyZW5bMF0sRT1PYmplY3QoaC5zZWxlY3QpKF8pO2s9dy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxFLmF0dHIoIndpZHRoIixrLndpZHRoKSxFLmF0dHIoImhlaWdodCIsay5oZWlnaHQpfXUrPWsuaGVpZ2h0KzQsay53aWR0aD5jJiYoYz1rLndpZHRoKTt2YXIgVD1bXTtlLmNsYXNzRGF0YS5tZW1iZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVZ0KHQpLmRpc3BsYXlUZXh0LHI9bC5ub2RlKCkuYXBwZW5kQ2hpbGQodWUobixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBhPXIuY2hpbGRyZW5bMF0sbz1PYmplY3QoaC5zZWxlY3QpKHIpO2k9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvLmF0dHIoIndpZHRoIixpLndpZHRoKSxvLmF0dHIoImhlaWdodCIsaS5oZWlnaHQpfWkud2lkdGg+YyYmKGM9aS53aWR0aCksdSs9aS5oZWlnaHQrNCxULnB1c2gocil9KSksdSs9ODt2YXIgQz1bXTtpZihlLmNsYXNzRGF0YS5tZXRob2RzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPVZ0KHQpLmRpc3BsYXlUZXh0LHI9bC5ub2RlKCkuYXBwZW5kQ2hpbGQodWUobixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBhPXIuY2hpbGRyZW5bMF0sbz1PYmplY3QoaC5zZWxlY3QpKHIpO2k9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvLmF0dHIoIndpZHRoIixpLndpZHRoKSxvLmF0dHIoImhlaWdodCIsaS5oZWlnaHQpfWkud2lkdGg+YyYmKGM9aS53aWR0aCksdSs9aS5oZWlnaHQrNCxDLnB1c2gocil9KSksdSs9OCxkKXt2YXIgUz0oYy1nLndpZHRoKS8yO09iamVjdChoLnNlbGVjdCkoeSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKygtMSpjLzIrUykrIiwgIistMSp1LzIrIikiKSxmPWcuaGVpZ2h0KzR9dmFyIEE9KGMtay53aWR0aCkvMjtyZXR1cm4gT2JqZWN0KGguc2VsZWN0KShfKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmMvMitBKSsiLCAiKygtMSp1LzIrZikrIikiKSxmKz1rLmhlaWdodCs0LG8uYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgrZikuYXR0cigieTIiLC11LzItcis4K2YpLGYrPTgsVC5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QoaC5zZWxlY3QpKHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitmKzQpKyIpIiksZis9ay5oZWlnaHQrNH0pKSxmKz04LHMuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1jLzItcikuYXR0cigieDIiLGMvMityKS5hdHRyKCJ5MSIsLXUvMi1yKzgrZikuYXR0cigieTIiLC11LzItcis4K2YpLGYrPTgsQy5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QoaC5zZWxlY3QpKHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIistYy8yKyIsICIrKC0xKnUvMitmKSsiKSIpLGYrPWsuaGVpZ2h0KzR9KSksYS5hdHRyKCJjbGFzcyIsIm91dGVyIHRpdGxlLXN0YXRlIikuYXR0cigieCIsLWMvMi1yKS5hdHRyKCJ5IiwtdS8yLXIpLmF0dHIoIndpZHRoIixjK2UucGFkZGluZykuYXR0cigiaGVpZ2h0Iix1K2UucGFkZGluZyksaGUoZSxhKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gT2UucmVjdChlLHQpfSxpfX0sTGU9e30sSWU9ZnVuY3Rpb24odCl7dmFyIGU9TGVbdC5pZF07Yy50cmFjZSgiVHJhbnNmb3JtaW5nIG5vZGUiLHQuZGlmZix0LCJ0cmFuc2xhdGUoIisodC54LXQud2lkdGgvMi01KSsiLCAiK3Qud2lkdGgvMisiKSIpO3ZhciBuPXQuZGlmZnx8MDtyZXR1cm4gdC5jbHVzdGVyTm9kZT9lLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyh0Lngrbi10LndpZHRoLzIpKyIsICIrKHQueS10LmhlaWdodC8yLTgpKyIpIik6ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0LngrIiwgIit0LnkrIikiKSxufSxSZT17cmVjdDpmdW5jdGlvbih0LGUpe2MudHJhY2UoIkNyZWF0aW5nIHN1YmdyYXBoIHJlY3QgZm9yICIsZS5pZCxlKTt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIrKGUuY2xhc3M/IiAiK2UuY2xhc3M6IiIpKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPWkubm9kZSgpLmFwcGVuZENoaWxkKHVlKGUubGFiZWxUZXh0LGUubGFiZWxTdHlsZSx2b2lkIDAsITApKSxvPWEuZ2V0QkJveCgpO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBzPWEuY2hpbGRyZW5bMF0sdT1PYmplY3QoaC5zZWxlY3QpKGEpO289cy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1LmF0dHIoIndpZHRoIixvLndpZHRoKSx1LmF0dHIoImhlaWdodCIsby5oZWlnaHQpfXZhciBsPTAqZS5wYWRkaW5nLGY9bC8yLGQ9ZS53aWR0aDw9by53aWR0aCtsP28ud2lkdGgrbDplLndpZHRoO2Uud2lkdGg8PW8ud2lkdGgrbD9lLmRpZmY9KG8ud2lkdGgtZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLGMudHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKSxyLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1kLzIpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2wpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1vLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yK2UucGFkZGluZy8zKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1wLndpZHRoLGUuaGVpZ2h0PXAuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBNZShlLHQpfSxufSxyb3VuZGVkV2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPW4uYXBwZW5kKCJyZWN0Iiksbz1pLm5vZGUoKS5hcHBlbmRDaGlsZCh1ZShlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSkscz1vLmdldEJCb3goKTtpZih4KF90KCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgYz1vLmNoaWxkcmVuWzBdLHU9T2JqZWN0KGguc2VsZWN0KShvKTtzPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdS5hdHRyKCJ3aWR0aCIscy53aWR0aCksdS5hdHRyKCJoZWlnaHQiLHMuaGVpZ2h0KX1zPW8uZ2V0QkJveCgpO3ZhciBsPTAqZS5wYWRkaW5nLGY9bC8yLGQ9ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/cy53aWR0aCtlLnBhZGRpbmc6ZS53aWR0aDtlLndpZHRoPD1zLndpZHRoK2UucGFkZGluZz9lLmRpZmY9KHMud2lkdGgrZS5wYWRkaW5nLWUud2lkdGgpLzI6ZS5kaWZmPS1lLnBhZGRpbmcvMixyLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixlLngtZC8yLWYpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkK2wpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrbCksYS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsZS54LWQvMi1mKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1mK3MuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixkK2wpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQrbC1zLmhlaWdodC0zKSxpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLngtcy53aWR0aC8yKSsiLCAiKyhlLnktZS5oZWlnaHQvMi1lLnBhZGRpbmcvMysoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT81OjMpKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS5oZWlnaHQ9cC5oZWlnaHQsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIE1lKGUsdCl9LG59LG5vdGVHcm91cDpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub3RlLWNsdXN0ZXIiKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1lLndpZHRoLzItYSkuYXR0cigieSIsZS55LWUuaGVpZ2h0LzItYSkuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKS5hdHRyKCJmaWxsIiwibm9uZSIpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBNZShlLHQpfSxufSxkaXZpZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9MCplLnBhZGRpbmcsYT1pLzI7ci5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCtpKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2kpO3ZhciBvPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1vLndpZHRoLGUuaGVpZ2h0PW8uaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBNZShlLHQpfSxufX0sRmU9e30sUGU9e30samU9e30sWWU9ZnVuY3Rpb24odCxlKXtjLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTt2YXIgbj1bXSxyPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihjLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50Iix0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49dC54LHI9dC55LGk9TWF0aC5hYnMoZS54LW4pLGE9TWF0aC5hYnMoZS55LXIpLG89dC53aWR0aC8yLHM9dC5oZWlnaHQvMjtyZXR1cm4gaT49b3x8YT49c30oZSx0KXx8aSljLndhcm4oImFiYzg4IG91dHNpZGUiLHQscikscj10LGl8fG4ucHVzaCh0KTtlbHNle3ZhciBhPWZ1bmN0aW9uKHQsZSxuKXtjLndhcm4oImludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpLCJcbiAgaW5zaWRlUG9pbnQgOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobiksIlxuICBub2RlICAgICAgICA6IHg6IikuY29uY2F0KHQueCwiIHk6IikuY29uY2F0KHQueSwiIHc6IikuY29uY2F0KHQud2lkdGgsIiBoOiIpLmNvbmNhdCh0LmhlaWdodCkpO3ZhciByPXQueCxpPXQueSxhPU1hdGguYWJzKHItbi54KSxvPXQud2lkdGgvMixzPW4ueDxlLng/by1hOm8rYSx1PXQuaGVpZ2h0LzIsbD1NYXRoLmFicyhlLnktbi55KSxoPU1hdGguYWJzKGUueC1uLngpO2lmKE1hdGguYWJzKGktZS55KSpvPk1hdGguYWJzKHItZS54KSp1KXt2YXIgZj1uLnk8ZS55P2UueS11LWk6aS11LWUueTtzPWgqZi9sO3ZhciBkPXt4Om4ueDxlLng/bi54K3M6bi54LWgrcyx5Om4ueTxlLnk/bi55K2wtZjpuLnktbCtmfTtyZXR1cm4gMD09PXMmJihkLng9ZS54LGQueT1lLnkpLDA9PT1oJiYoZC54PWUueCksMD09PWwmJihkLnk9ZS55KSxjLndhcm4oImFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQoZiwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KHMpLGQpLGR9dmFyIHA9bCoocz1uLng8ZS54P2UueC1vLXI6ci1vLWUueCkvaCx5PW4ueDxlLng/bi54K2gtczpuLngtaCtzLGc9bi55PGUueT9uLnkrcDpuLnktcDtyZXR1cm4gYy53YXJuKCJzaWRlcyBjYWxjIGFiYzg5LCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQocCwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KHMpLHtfeDp5LF95Omd9KSwwPT09cyYmKHk9ZS54LGc9ZS55KSwwPT09aCYmKHk9ZS54KSwwPT09bCYmKGc9ZS55KSx7eDp5LHk6Z319KGUscix0KTtjLndhcm4oImFiYzg4IGluc2lkZSIsdCxyLGEpLGMud2FybigiYWJjODggaW50ZXJzZWN0aW9uIixhKTt2YXIgbz0hMTtuLmZvckVhY2goKGZ1bmN0aW9uKHQpe289b3x8dC54PT09YS54JiZ0Lnk9PT1hLnl9KSksbi5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC54PT09YS54JiZ0Lnk9PT1hLnl9KSk/Yy53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGEsbik6bi5wdXNoKGEpLGk9ITB9fSkpLGMud2FybigiYWJjODggcmV0dXJuaW5nIHBvaW50cyIsbiksbn0semU9ZnVuY3Rpb24gdChlLG4scixpKXtjLmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsVXQuYS5qc29uLndyaXRlKG4pLGkpO3ZhciBhPW4uZ3JhcGgoKS5yYW5rZGlyO2MudHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYSk7dmFyIG89ZS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTtuLm5vZGVzKCk/Yy5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIsbi5ub2RlcygpKTpjLmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsbiksbi5lZGdlcygpLmxlbmd0aD4wJiZjLnRyYWNlKCJSZWN1cnNpdmUgZWRnZXMiLG4uZWRnZShuLmVkZ2VzKClbMF0pKTt2YXIgcz1vLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSx1PW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxsPW8uaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZj1vLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTtuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG89bi5ub2RlKGUpO2lmKHZvaWQgMCE9PWkpe3ZhciBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaS5jbHVzdGVyRGF0YSkpO2MuaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixlLCIpICIscyxpKSxuLnNldE5vZGUoaS5pZCxzKSxuLnBhcmVudChlKXx8KGMudHJhY2UoIlNldHRpbmcgcGFyZW50IixlLGkuaWQpLG4uc2V0UGFyZW50KGUsaS5pZCxzKSl9aWYoYy5pbmZvKCIoSW5zZXJ0KSBOb2RlIFhYWCIrZSsiOiAiK0pTT04uc3RyaW5naWZ5KG4ubm9kZShlKSkpLG8mJm8uY2x1c3Rlck5vZGUpe2MuaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixlLG8ud2lkdGgsbi5ub2RlKGUpKTt2YXIgdT10KGYsby5ncmFwaCxyLG4ubm9kZShlKSksbD11LmVsZW07aGUobyxsKSxvLmRpZmY9dS5kaWZmfHwwLGMuaW5mbygiTm9kZSBib3VuZHMgKGFiYzEyMykiLGUsbyxvLndpZHRoLG8ueCxvLnkpLGZ1bmN0aW9uKHQsZSl7TGVbZS5pZF09dH0obCxvKSxjLndhcm4oIlJlY3Vyc2l2ZSByZW5kZXIgY29tcGxldGUgIixsLG8pfWVsc2Ugbi5jaGlsZHJlbihlKS5sZW5ndGg+MD8oYy5pbmZvKCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYWFgiLGUsby5pZCxvLG4pLGMuaW5mbyhtZShvLmlkLG4pKSxkZVtvLmlkXT17aWQ6bWUoby5pZCxuKSxub2RlOm99KTooYy5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsZSxvLmlkLG8pLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO2UubGluaz8ocj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksaT1EZVtlLnNoYXBlXShyLGUsbikpOnI9aT1EZVtlLnNoYXBlXSh0LGUsbiksZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxMZVtlLmlkXT1yLGUuaGF2ZUNhbGxiYWNrJiZMZVtlLmlkXS5hdHRyKCJjbGFzcyIsTGVbZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpfShmLG4ubm9kZShlKSxhKSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0LnYsdC53LHQubmFtZSk7Yy5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSksYy5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIix0LCIgIixKU09OLnN0cmluZ2lmeShuLmVkZ2UodCkpKSxjLmluZm8oIkZpeCIsZGUsImlkczoiLHQudix0LncsIlRyYW5zbGF0ZWluZzogIixkZVt0LnZdLGRlW3Qud10pLGZ1bmN0aW9uKHQsZSl7dmFyIG49dWUoZS5sYWJlbCxlLmxhYmVsU3R5bGUpLHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLGk9ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7aS5ub2RlKCkuYXBwZW5kQ2hpbGQobik7dmFyIGE9bi5nZXRCQm94KCk7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89bi5jaGlsZHJlblswXSxzPU9iamVjdChoLnNlbGVjdCkobik7YT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHMuYXR0cigid2lkdGgiLGEud2lkdGgpLHMuYXR0cigiaGVpZ2h0IixhLmhlaWdodCl9aWYoaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS53aWR0aC8yKyIsICIrLWEuaGVpZ2h0LzIrIikiKSxQZVtlLmlkXT1yLGUud2lkdGg9YS53aWR0aCxlLmhlaWdodD1hLmhlaWdodCxlLnN0YXJ0TGFiZWxMZWZ0KXt2YXIgYz11ZShlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksdT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGw9dS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7bC5ub2RlKCkuYXBwZW5kQ2hpbGQoYyk7dmFyIGY9Yy5nZXRCQm94KCk7bC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistZi53aWR0aC8yKyIsICIrLWYuaGVpZ2h0LzIrIikiKSxqZVtlLmlkXXx8KGplW2UuaWRdPXt9KSxqZVtlLmlkXS5zdGFydExlZnQ9dX1pZihlLnN0YXJ0TGFiZWxSaWdodCl7dmFyIGQ9dWUoZS5zdGFydExhYmVsUmlnaHQsZS5sYWJlbFN0eWxlKSxwPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIikseT1wLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtwLm5vZGUoKS5hcHBlbmRDaGlsZChkKSx5Lm5vZGUoKS5hcHBlbmRDaGlsZChkKTt2YXIgZz1kLmdldEJCb3goKTt5LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1nLndpZHRoLzIrIiwgIistZy5oZWlnaHQvMisiKSIpLGplW2UuaWRdfHwoamVbZS5pZF09e30pLGplW2UuaWRdLnN0YXJ0UmlnaHQ9cH1pZihlLmVuZExhYmVsTGVmdCl7dmFyIHY9dWUoZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxtPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIiksYj1tLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTtiLm5vZGUoKS5hcHBlbmRDaGlsZCh2KTt2YXIgXz12LmdldEJCb3goKTtiLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1fLndpZHRoLzIrIiwgIistXy5oZWlnaHQvMisiKSIpLG0ubm9kZSgpLmFwcGVuZENoaWxkKHYpLGplW2UuaWRdfHwoamVbZS5pZF09e30pLGplW2UuaWRdLmVuZExlZnQ9bX1pZihlLmVuZExhYmVsUmlnaHQpe3ZhciBrPXVlKGUuZW5kTGFiZWxSaWdodCxlLmxhYmVsU3R5bGUpLHc9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VUZXJtaW5hbHMiKSxFPXcuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJpbm5lciIpO0Uubm9kZSgpLmFwcGVuZENoaWxkKGspO3ZhciBUPWsuZ2V0QkJveCgpO0UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLVQud2lkdGgvMisiLCAiKy1ULmhlaWdodC8yKyIpIiksdy5ub2RlKCkuYXBwZW5kQ2hpbGQoayksamVbZS5pZF18fChqZVtlLmlkXT17fSksamVbZS5pZF0uZW5kUmlnaHQ9d319KGwsZSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2MuaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkodCkpfSkpLGMuaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksYy5pbmZvKCIjIyMgICAgICAgICAgICAgICAgTGF5b3V0ICAgICAgICAgICAgICAgICAjIyMiKSxjLmluZm8oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpLGMuaW5mbyhuKSxZdC5hLmxheW91dChuKSxjLmluZm8oIkdyYXBoIGFmdGVyIGxheW91dDoiLFV0LmEuanNvbi53cml0ZShuKSk7dmFyIGQ9MDtyZXR1cm4ga2UobikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO2MuaW5mbygiUG9zaXRpb24gIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkobi5ub2RlKHQpKSksYy5pbmZvKCJQb3NpdGlvbiAiK3QrIjogKCIrZS54LCIsIitlLnksIikgd2lkdGg6ICIsZS53aWR0aCwiIGhlaWdodDogIixlLmhlaWdodCksZSYmZS5jbHVzdGVyTm9kZT9JZShlKTpuLmNoaWxkcmVuKHQpLmxlbmd0aD4wPyghZnVuY3Rpb24odCxlKXtjLnRyYWNlKCJJbnNlcnRpbmcgY2x1c3RlciIpO3ZhciBuPWUuc2hhcGV8fCJyZWN0IjtGZVtlLmlkXT1SZVtuXSh0LGUpfShzLGUpLGRlW2UuaWRdLm5vZGU9ZSk6SWUoZSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0KTtjLmluZm8oIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGUpLGUpLGZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJNb3ZpbmcgbGFiZWwgYWJjNzggIix0LmlkLHQubGFiZWwsUGVbdC5pZF0pO3ZhciBuPWUudXBkYXRlZFBhdGg/ZS51cGRhdGVkUGF0aDplLm9yaWdpbmFsUGF0aDtpZih0LmxhYmVsKXt2YXIgcj1QZVt0LmlkXSxpPXQueCxhPXQueTtpZihuKXt2YXIgbz1WLmNhbGNMYWJlbFBvc2l0aW9uKG4pO2MuaW5mbygiTW92aW5nIGxhYmVsIGZyb20gKCIsaSwiLCIsYSwiKSB0byAoIixvLngsIiwiLG8ueSwiKSBhYmM3OCIpfXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCAiK2ErIikiKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXt2YXIgcz1qZVt0LmlkXS5zdGFydExlZnQsdT10LngsbD10Lnk7aWYobil7dmFyIGg9Vi5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKDAsInN0YXJ0X2xlZnQiLG4pO3U9aC54LGw9aC55fXMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCAiK2wrIikiKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7dmFyIGY9amVbdC5pZF0uc3RhcnRSaWdodCxkPXQueCxwPXQueTtpZihuKXt2YXIgeT1WLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oMCwic3RhcnRfcmlnaHQiLG4pO2Q9eS54LHA9eS55fWYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZCsiLCAiK3ArIikiKX1pZih0LmVuZExhYmVsTGVmdCl7dmFyIGc9amVbdC5pZF0uZW5kTGVmdCx2PXQueCxtPXQueTtpZihuKXt2YXIgYj1WLmNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb24oMCwiZW5kX2xlZnQiLG4pO3Y9Yi54LG09Yi55fWcuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdisiLCAiK20rIikiKX1pZih0LmVuZExhYmVsUmlnaHQpe3ZhciB4PWplW3QuaWRdLmVuZFJpZ2h0LF89dC54LGs9dC55O2lmKG4pe3ZhciB3PVYuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbigwLCJlbmRfcmlnaHQiLG4pO189dy54LGs9dy55fXguYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrXysiLCAiK2srIikiKX19KGUsZnVuY3Rpb24odCxlLG4scixpLGEpe3ZhciBvPW4ucG9pbnRzLHM9ITEsdT1hLm5vZGUoZS52KSxsPWEubm9kZShlLncpO2MuaW5mbygiYWJjODggSW5zZXJ0RWRnZTogIixuKSxsLmludGVyc2VjdCYmdS5pbnRlcnNlY3QmJigobz1vLnNsaWNlKDEsbi5wb2ludHMubGVuZ3RoLTEpKS51bnNoaWZ0KHUuaW50ZXJzZWN0KG9bMF0pKSxjLmluZm8oIkxhc3QgcG9pbnQiLG9bby5sZW5ndGgtMV0sbCxsLmludGVyc2VjdChvW28ubGVuZ3RoLTFdKSksby5wdXNoKGwuaW50ZXJzZWN0KG9bby5sZW5ndGgtMV0pKSksbi50b0NsdXN0ZXImJihjLmluZm8oInRvIGNsdXN0ZXIgYWJjODgiLHJbbi50b0NsdXN0ZXJdKSxvPVllKG4ucG9pbnRzLHJbbi50b0NsdXN0ZXJdLm5vZGUpLHM9ITApLG4uZnJvbUNsdXN0ZXImJihjLmluZm8oImZyb20gY2x1c3RlciBhYmM4OCIscltuLmZyb21DbHVzdGVyXSksbz1ZZShvLnJldmVyc2UoKSxyW24uZnJvbUNsdXN0ZXJdLm5vZGUpLnJldmVyc2UoKSxzPSEwKTt2YXIgZixkPW8uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hTnVtYmVyLmlzTmFOKHQueSl9KSk7Zj0oImdyYXBoIj09PWl8fCJmbG93Y2hhcnQiPT09aSkmJm4uY3VydmV8fGguY3VydmVCYXNpczt2YXIgcCx5PU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKGYpO3N3aXRjaChuLnRoaWNrbmVzcyl7Y2FzZSJub3JtYWwiOnA9ImVkZ2UtdGhpY2tuZXNzLW5vcm1hbCI7YnJlYWs7Y2FzZSJ0aGljayI6cD0iZWRnZS10aGlja25lc3MtdGhpY2siO2JyZWFrO2RlZmF1bHQ6cD0iIn1zd2l0Y2gobi5wYXR0ZXJuKXtjYXNlInNvbGlkIjpwKz0iIGVkZ2UtcGF0dGVybi1zb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOnArPSIgZWRnZS1wYXR0ZXJuLWRvdHRlZCI7YnJlYWs7Y2FzZSJkYXNoZWQiOnArPSIgZWRnZS1wYXR0ZXJuLWRhc2hlZCJ9dmFyIGc9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIix5KGQpKS5hdHRyKCJpZCIsbi5pZCkuYXR0cigiY2xhc3MiLCIgIitwKyhuLmNsYXNzZXM/IiAiK24uY2xhc3NlczoiIikpLmF0dHIoInN0eWxlIixuLnN0eWxlKSx2PSIiO3N3aXRjaChfdCgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJih2PSh2PSh2PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGMuaW5mbygiYXJyb3dUeXBlU3RhcnQiLG4uYXJyb3dUeXBlU3RhcnQpLGMuaW5mbygiYXJyb3dUeXBlRW5kIixuLmFycm93VHlwZUVuZCksbi5hcnJvd1R5cGVTdGFydCl7Y2FzZSJhcnJvd19jcm9zcyI6Zy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitpKyItY3Jvc3NTdGFydCkiKTticmVhaztjYXNlImFycm93X3BvaW50IjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1wb2ludFN0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfYmFyYiI6Zy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitpKyItYmFyYlN0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1jaXJjbGVTdGFydCkiKTticmVhaztjYXNlImFnZ3JlZ2F0aW9uIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1hZ2dyZWdhdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZXh0ZW5zaW9uIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1leHRlbnNpb25TdGFydCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiMiK2krIi1jb21wb3NpdGlvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiZGVwZW5kZW5jeSI6Zy5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIit2KyIjIitpKyItZGVwZW5kZW5jeVN0YXJ0KSIpfXN3aXRjaChuLmFycm93VHlwZUVuZCl7Y2FzZSJhcnJvd19jcm9zcyI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdisiIyIraSsiLWNyb3NzRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2krIi1wb2ludEVuZCkiKTticmVhaztjYXNlImFycm93X2JhcmIiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2krIi1iYXJiRW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfY2lyY2xlIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitpKyItY2lyY2xlRW5kKSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiMiK2krIi1hZ2dyZWdhdGlvbkVuZCkiKTticmVhaztjYXNlImV4dGVuc2lvbiI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrdisiIyIraSsiLWV4dGVuc2lvbkVuZCkiKTticmVhaztjYXNlImNvbXBvc2l0aW9uIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitpKyItY29tcG9zaXRpb25FbmQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjIitpKyItZGVwZW5kZW5jeUVuZCkiKX12YXIgbT17fTtyZXR1cm4gcyYmKG0udXBkYXRlZFBhdGg9byksbS5vcmlnaW5hbFBhdGg9bi5wb2ludHMsbX0odSx0LGUsZGUscixuKSl9KSksbi5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4ubm9kZSh0KTtjLmluZm8odCxlLnR5cGUsZS5kaWZmKSwiZ3JvdXAiPT09ZS50eXBlJiYoZD1lLmRpZmYpfSkpLHtlbGVtOm8sZGlmZjpkfX0sVWU9ZnVuY3Rpb24odCxlLG4scixpKXtzZSh0LG4scixpKSxMZT17fSxQZT17fSxqZT17fSxGZT17fSxwZT17fSx5ZT17fSxkZT17fSxjLndhcm4oIkdyYXBoIGF0IGZpcnN0OiIsVXQuYS5qc29uLndyaXRlKGUpKSx4ZShlKSxjLndhcm4oIkdyYXBoIGFmdGVyOiIsVXQuYS5qc29uLndyaXRlKGUpKSx6ZSh0LGUscil9OyR0LnBhcnNlci55eT1QdDt2YXIgJGU9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LHFlPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpeyRlW2VdPXRbZV19KSl9LFdlPWZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJEcmF3aW5nIGNsYXNzIiksUHQuY2xlYXIoKSwkdC5wYXJzZXIucGFyc2UodCk7dmFyIG49X3QoKS5mbG93Y2hhcnQ7Yy5pbmZvKCJjb25maWc6IixuKTt2YXIgcj1uLm5vZGVTcGFjaW5nfHw1MCxpPW4ucmFua1NwYWNpbmd8fDUwLGE9bmV3IFV0LmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjoiVEQiLG5vZGVzZXA6cixyYW5rc2VwOmksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksbz1QdC5nZXRDbGFzc2VzKCkscz1QdC5nZXRSZWxhdGlvbnMoKTtjLmluZm8ocyksZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtjLmluZm8oImtleXM6IixuKSxjLmluZm8odCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj10W25dLGk9IiI7ci5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaT1pKyIgIityLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYT17bGFiZWxTdHlsZToiIn0sbz12b2lkIDAhPT1yLnRleHQ/ci50ZXh0OnIuaWQscz0iIjtzd2l0Y2goci50eXBlKXtjYXNlImNsYXNzIjpzPSJjbGFzc19ib3giO2JyZWFrO2RlZmF1bHQ6cz0iY2xhc3NfYm94In1lLnNldE5vZGUoci5pZCx7bGFiZWxTdHlsZTphLmxhYmVsU3R5bGUsc2hhcGU6cyxsYWJlbFRleHQ6byxjbGFzc0RhdGE6cixyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTphLnN0eWxlLGlkOnIuaWQsZG9tSWQ6ci5kb21JZCxoYXZlQ2FsbGJhY2s6ci5oYXZlQ2FsbGJhY2ssbGluazpyLmxpbmssd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6X3QoKS5mbG93Y2hhcnQucGFkZGluZ30pLGMuaW5mbygic2V0Tm9kZSIse2xhYmVsU3R5bGU6YS5sYWJlbFN0eWxlLHNoYXBlOnMsbGFiZWxUZXh0Om8scng6MCxyeTowLGNsYXNzOmksc3R5bGU6YS5zdHlsZSxpZDpyLmlkLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxwYWRkaW5nOl90KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0obyxhKSxmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbihyKXtuKys7dmFyIGk9e2NsYXNzZXM6InJlbGF0aW9uIn07aS5wYXR0ZXJuPTE9PXIucmVsYXRpb24ubGluZVR5cGU/ImRhc2hlZCI6InNvbGlkIixpLmlkPSJpZCIrbiwiYXJyb3dfb3BlbiI9PT1yLnR5cGU/aS5hcnJvd2hlYWQ9Im5vbmUiOmkuYXJyb3doZWFkPSJub3JtYWwiLGMuaW5mbyhpLHIpLGkuc3RhcnRMYWJlbFJpZ2h0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTE/IiI6ci5yZWxhdGlvblRpdGxlMSxpLmVuZExhYmVsTGVmdD0ibm9uZSI9PT1yLnJlbGF0aW9uVGl0bGUyPyIiOnIucmVsYXRpb25UaXRsZTIsaS5hcnJvd1R5cGVTdGFydD1WZShyLnJlbGF0aW9uLnR5cGUxKSxpLmFycm93VHlwZUVuZD1WZShyLnJlbGF0aW9uLnR5cGUyKTt2YXIgYT0iIixvPSIiO2lmKHZvaWQgMCE9PXIuc3R5bGUpe3ZhciBzPUwoci5zdHlsZSk7YT1zLnN0eWxlLG89cy5sYWJlbFN0eWxlfWVsc2UgYT0iZmlsbDpub25lIjtpLnN0eWxlPWEsaS5sYWJlbFN0eWxlPW8sdm9pZCAwIT09ci5pbnRlcnBvbGF0ZT9pLmN1cnZlPU4oci5pbnRlcnBvbGF0ZSxoLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9pLmN1cnZlPU4odC5kZWZhdWx0SW50ZXJwb2xhdGUsaC5jdXJ2ZUxpbmVhcik6aS5jdXJ2ZT1OKCRlLmN1cnZlLGguY3VydmVMaW5lYXIpLHIudGV4dD1yLnRpdGxlLHZvaWQgMD09PXIudGV4dD92b2lkIDAhPT1yLnN0eWxlJiYoaS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihpLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixpLmxhYmVscG9zPSJjIixfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzLGkubGFiZWxUeXBlPSJ0ZXh0IixpLmxhYmVsPXIudGV4dC5yZXBsYWNlKF8ubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09ci5zdHlsZSYmKGkuc3R5bGU9aS5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmUiKSxpLmxhYmVsU3R5bGU9aS5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpLGUuc2V0RWRnZShyLmlkMSxyLmlkMixpLG4pfSkpfShzLGEpO3ZhciB1PU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSk7dS5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTt2YXIgbD1PYmplY3QoaC5zZWxlY3QpKCIjIitlKyIgZyIpO1VlKGwsYSxbImFnZ3JlZ2F0aW9uIiwiZXh0ZW5zaW9uIiwiY29tcG9zaXRpb24iLCJkZXBlbmRlbmN5Il0sImNsYXNzRGlhZ3JhbSIsZSk7dmFyIGY9dS5ub2RlKCkuZ2V0QkJveCgpLGQ9Zi53aWR0aCsxNixwPWYuaGVpZ2h0KzE2O2lmKGMuZGVidWcoIm5ldyBWaWV3Qm94IDAgMCAiLmNvbmNhdChkLCIgIikuY29uY2F0KHApLCJ0cmFuc2xhdGUoIi5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbnksIikiKSksVyh1LHAsZCxuLnVzZU1heFdpZHRoKSx1LmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoZCwiICIpLmNvbmNhdChwKSksdS5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCg4LWYueSwiKSIpKSwhbi5odG1sTGFiZWxzKWZvcih2YXIgeT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciB2PXlbZ10sbT12LmdldEJCb3goKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Yi5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxiLnNldEF0dHJpYnV0ZSgicnkiLDApLGIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsbS53aWR0aCksYi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsbS5oZWlnaHQpLGIuc2V0QXR0cmlidXRlKCJzdHlsZSIsImZpbGw6I2U4ZThlODsiKSx2Lmluc2VydEJlZm9yZShiLHYuZmlyc3RDaGlsZCl9fTtmdW5jdGlvbiBWZSh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSAwOmU9ImFnZ3JlZ2F0aW9uIjticmVhaztjYXNlIDE6ZT0iZXh0ZW5zaW9uIjticmVhaztjYXNlIDI6ZT0iY29tcG9zaXRpb24iO2JyZWFrO2Nhc2UgMzplPSJkZXBlbmRlbmN5IjticmVhaztkZWZhdWx0OmU9Im5vbmUifXJldHVybiBlfXZhciBIZT17fSxHZT1bXSxYZT0iIixaZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09SGVbdF0mJihIZVt0XT17YXR0cmlidXRlczpbXX0sYy5pbmZvKCJBZGRlZCBuZXcgZW50aXR5IDoiLHQpKSxIZVt0XX0sUWU9e0NhcmRpbmFsaXR5OntaRVJPX09SX09ORToiWkVST19PUl9PTkUiLFpFUk9fT1JfTU9SRToiWkVST19PUl9NT1JFIixPTkVfT1JfTU9SRToiT05FX09SX01PUkUiLE9OTFlfT05FOiJPTkxZX09ORSJ9LElkZW50aWZpY2F0aW9uOntOT05fSURFTlRJRllJTkc6Ik5PTl9JREVOVElGWUlORyIsSURFTlRJRllJTkc6IklERU5USUZZSU5HIn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5lcn0sYWRkRW50aXR5OlplLGFkZEF0dHJpYnV0ZXM6ZnVuY3Rpb24odCxlKXt2YXIgbixyPVplKHQpO2ZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0pci5hdHRyaWJ1dGVzLnB1c2goZVtuXSksYy5kZWJ1ZygiQWRkZWQgYXR0cmlidXRlICIsZVtuXS5hdHRyaWJ1dGVOYW1lKX0sZ2V0RW50aXRpZXM6ZnVuY3Rpb24oKXtyZXR1cm4gSGV9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT17ZW50aXR5QTp0LHJvbGVBOmUsZW50aXR5QjpuLHJlbFNwZWM6cn07R2UucHVzaChpKSxjLmRlYnVnKCJBZGRlZCBuZXcgcmVsYXRpb25zaGlwIDoiLGkpfSxnZXRSZWxhdGlvbnNoaXBzOmZ1bmN0aW9uKCl7cmV0dXJuIEdlfSxjbGVhcjpmdW5jdGlvbigpe0hlPXt9LEdlPVtdLFhlPSIifSxzZXRUaXRsZTpmdW5jdGlvbih0KXtYZT10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBYZX19LEtlPW4oNzUpLEplPW4ubihLZSksdG49e09OTFlfT05FX1NUQVJUOiJPTkxZX09ORV9TVEFSVCIsT05MWV9PTkVfRU5EOiJPTkxZX09ORV9FTkQiLFpFUk9fT1JfT05FX1NUQVJUOiJaRVJPX09SX09ORV9TVEFSVCIsWkVST19PUl9PTkVfRU5EOiJaRVJPX09SX09ORV9FTkQiLE9ORV9PUl9NT1JFX1NUQVJUOiJPTkVfT1JfTU9SRV9TVEFSVCIsT05FX09SX01PUkVfRU5EOiJPTkVfT1JfTU9SRV9FTkQiLFpFUk9fT1JfTU9SRV9TVEFSVDoiWkVST19PUl9NT1JFX1NUQVJUIixaRVJPX09SX01PUkVfRU5EOiJaRVJPX09SX01PUkVfRU5EIn0sZW49dG4sbm49ZnVuY3Rpb24odCxlKXt2YXIgbjt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHRuLk9OTFlfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IE0xNSwwIEwxNSwxOCIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdG4uT05MWV9PTkVfRU5EKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDE4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsMCBMMywxOCBNOSwwIEw5LDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix0bi5aRVJPX09SX09ORV9TVEFSVCkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsOSkuYXR0cigibWFya2VyV2lkdGgiLDMwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDE4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY3giLDIxKS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNOSwwIEw5LDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix0bi5aRVJPX09SX09ORV9FTkQpLmF0dHIoInJlZlgiLDMwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDkpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDAgTDIxLDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix0bi5PTkVfT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNDUpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRIDE4LDAgMzYsMTggUSAxOCwzNiAwLDE4IE00Miw5IEw0MiwyNyIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdG4uT05FX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwyNykuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0zLDkgTDMsMjcgTTksMTggUTI3LDAgNDUsMTggUTI3LDM2IDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLHRuLlpFUk9fT1JfTU9SRV9TVEFSVCkuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsNDgpLmF0dHIoImN5IiwxOCkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMCwxOCBRMTgsMCAzNiwxOCBRMTgsMzYgMCwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsdG4uWkVST19PUl9NT1JFX0VORCkuYXR0cigicmVmWCIsMzkpLmF0dHIoInJlZlkiLDE4KS5hdHRyKCJtYXJrZXJXaWR0aCIsNTcpLmF0dHIoIm1hcmtlckhlaWdodCIsMzYpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsOSkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0yMSwxOCBRMzksMCA1NywxOCBRMzksMzYgMjEsMTgiKX0scm49e30sYW49ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgYT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixpKTtyPXZvaWQgMD09PXI/aTpyO3ZhciBvPSJlbnRpdHktIitpLHM9YS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLG8pLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK190KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrcm4uZm9udFNpemUrInB4IikudGV4dChpKSxjPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1ybi5lbnRpdHlQYWRkaW5nLzMsaT1ybi5lbnRpdHlQYWRkaW5nLzMsYT0uODUqcm4uZm9udFNpemUsbz1lLm5vZGUoKS5nZXRCQm94KCkscz1bXSxjPTAsdT0wLGw9by5oZWlnaHQrMipyLGg9MTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPSIiLmNvbmNhdChlLm5vZGUoKS5pZCwiLWF0dHItIikuY29uY2F0KGgpLG89dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItdHlwZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrX3QoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVUeXBlKSxmPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciBlbnRpdHlMYWJlbCIpLmF0dHIoImlkIiwiIi5jb25jYXQoaSwiLW5hbWUiKSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImxlZnQiKS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK190KCkuZm9udEZhbWlseSsiOyBmb250LXNpemU6ICIrYSsicHgiKS50ZXh0KG4uYXR0cmlidXRlTmFtZSk7cy5wdXNoKHt0bjpvLG5uOmZ9KTt2YXIgZD1vLm5vZGUoKS5nZXRCQm94KCkscD1mLm5vZGUoKS5nZXRCQm94KCk7Yz1NYXRoLm1heChjLGQud2lkdGgpLHU9TWF0aC5tYXgodSxwLndpZHRoKSxsKz1NYXRoLm1heChkLmhlaWdodCxwLmhlaWdodCkrMipyLGgrPTF9KSk7dmFyIGY9e3dpZHRoOk1hdGgubWF4KHJuLm1pbkVudGl0eVdpZHRoLE1hdGgubWF4KG8ud2lkdGgrMipybi5lbnRpdHlQYWRkaW5nLGMrdSs0KmkpKSxoZWlnaHQ6bi5sZW5ndGg+MD9sOk1hdGgubWF4KHJuLm1pbkVudGl0eUhlaWdodCxvLmhlaWdodCsyKnJuLmVudGl0eVBhZGRpbmcpfSxkPU1hdGgubWF4KDAsZi53aWR0aC0oYyt1KS00KmkpO2lmKG4ubGVuZ3RoPjApe2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZi53aWR0aC8yKyIsIisocitvLmhlaWdodC8yKSsiKSIpO3ZhciBwPW8uaGVpZ2h0KzIqcix5PSJhdHRyaWJ1dGVCb3hPZGQiO3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49cCtyK01hdGgubWF4KGUudG4ubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsZS5ubi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCkvMjtlLnRuLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2krIiwiK24rIikiKTt2YXIgYT10Lmluc2VydCgicmVjdCIsIiMiK2UudG4ubm9kZSgpLmlkKS5hdHRyKCJjbGFzcyIsImVyICIuY29uY2F0KHkpKS5hdHRyKCJmaWxsIixybi5maWxsKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCIxMDAlIikuYXR0cigic3Ryb2tlIixybi5zdHJva2UpLmF0dHIoIngiLDApLmF0dHIoInkiLHApLmF0dHIoIndpZHRoIixjKzIqaStkLzIpLmF0dHIoImhlaWdodCIsZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCsyKnIpO2Uubm4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHBhcnNlRmxvYXQoYS5hdHRyKCJ3aWR0aCIpKStpKSsiLCIrbisiKSIpLHQuaW5zZXJ0KCJyZWN0IiwiIyIrZS5ubi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoeSkpLmF0dHIoImZpbGwiLHJuLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLHJuLnN0cm9rZSkuYXR0cigieCIsIiIuY29uY2F0KGEuYXR0cigieCIpK2EuYXR0cigid2lkdGgiKSkpLmF0dHIoInkiLHApLmF0dHIoIndpZHRoIix1KzIqaStkLzIpLmF0dHIoImhlaWdodCIsZS5ubi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCsyKnIpLHArPU1hdGgubWF4KGUudG4ubm9kZSgpLmdldEJCb3goKS5oZWlnaHQsZS5ubi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCkrMipyLHk9ImF0dHJpYnV0ZUJveE9kZCI9PXk/ImF0dHJpYnV0ZUJveEV2ZW4iOiJhdHRyaWJ1dGVCb3hPZGQifSkpfWVsc2UgZi5oZWlnaHQ9TWF0aC5tYXgocm4ubWluRW50aXR5SGVpZ2h0LGwpLGUuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZi53aWR0aC8yKyIsIitmLmhlaWdodC8yKyIpIik7cmV0dXJuIGZ9KGEscyxlW2ldLmF0dHJpYnV0ZXMpLHU9Yy53aWR0aCxsPWMuaGVpZ2h0LGg9YS5pbnNlcnQoInJlY3QiLCIjIitvKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUJveCIpLmF0dHIoImZpbGwiLHJuLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLHJuLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigid2lkdGgiLHUpLmF0dHIoImhlaWdodCIsbCkubm9kZSgpLmdldEJCb3goKTtuLnNldE5vZGUoaSx7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOml9KX0pKSxyfSxvbj1mdW5jdGlvbih0KXtyZXR1cm4odC5lbnRpdHlBK3Qucm9sZUErdC5lbnRpdHlCKS5yZXBsYWNlKC9ccy9nLCIiKX0sc249MCxjbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXJuW2Vbbl1dPXRbZVtuXV19LHVuPWZ1bmN0aW9uKHQsZSl7Yy5pbmZvKCJEcmF3aW5nIEVSIGRpYWdyYW0iKSxRZS5jbGVhcigpO3ZhciBuPUplLmEucGFyc2VyO24ueXk9UWU7dHJ5e24ucGFyc2UodCl9Y2F0Y2godCl7Yy5kZWJ1ZygiUGFyc2luZyBmYWlsZWQiKX12YXIgcixpPU9iamVjdChoLnNlbGVjdCkoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7bm4oaSxybikscj1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxkaXJlY3RlZDohMCxjb21wb3VuZDohMX0pLnNldEdyYXBoKHtyYW5rZGlyOnJuLmxheW91dERpcmVjdGlvbixtYXJnaW54OjIwLG1hcmdpbnk6MjAsbm9kZXNlcDoxMDAsZWRnZXNlcDoxMDAscmFua3NlcDoxMDB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciBhLG8scz1hbihpLFFlLmdldEVudGl0aWVzKCksciksdT1mdW5jdGlvbih0LGUpe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2Uuc2V0RWRnZSh0LmVudGl0eUEsdC5lbnRpdHlCLHtyZWxhdGlvbnNoaXA6dH0sb24odCkpfSkpLHR9KFFlLmdldFJlbGF0aW9uc2hpcHMoKSxyKTtZdC5hLmxheW91dChyKSxhPWksKG89cikubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1vLm5vZGUodCkmJmEuc2VsZWN0KCIjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoby5ub2RlKHQpLngtby5ub2RlKHQpLndpZHRoLzIpKyIsIisoby5ub2RlKHQpLnktby5ub2RlKHQpLmhlaWdodC8yKSsiICkiKX0pKSx1LmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUsbixyKXtzbisrO3ZhciBpPW4uZWRnZShlLmVudGl0eUEsZS5lbnRpdHlCLG9uKGUpKSxhPU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKGguY3VydmVCYXNpcyksbz10Lmluc2VydCgicGF0aCIsIiMiK3IpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGluZSIpLmF0dHIoImQiLGEoaS5wb2ludHMpKS5hdHRyKCJzdHJva2UiLHJuLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKTtlLnJlbFNwZWMucmVsVHlwZT09PVFlLklkZW50aWZpY2F0aW9uLk5PTl9JREVOVElGWUlORyYmby5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiOCw4Iik7dmFyIHM9IiI7c3dpdGNoKHJuLmFycm93TWFya2VyQWJzb2x1dGUmJihzPShzPShzPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGUucmVsU3BlYy5jYXJkQSl7Y2FzZSBRZS5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitlbi5aRVJPX09SX09ORV9FTkQrIikiKTticmVhaztjYXNlIFFlLkNhcmRpbmFsaXR5LlpFUk9fT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitlbi5aRVJPX09SX01PUkVfRU5EKyIpIik7YnJlYWs7Y2FzZSBRZS5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitzKyIjIitlbi5PTkVfT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIFFlLkNhcmRpbmFsaXR5Lk9OTFlfT05FOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK2VuLk9OTFlfT05FX0VORCsiKSIpfXN3aXRjaChlLnJlbFNwZWMuY2FyZEIpe2Nhc2UgUWUuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitlbi5aRVJPX09SX09ORV9TVEFSVCsiKSIpO2JyZWFrO2Nhc2UgUWUuQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrZW4uWkVST19PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBRZS5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK2VuLk9ORV9PUl9NT1JFX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBRZS5DYXJkaW5hbGl0eS5PTkxZX09ORTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK2VuLk9OTFlfT05FX1NUQVJUKyIpIil9dmFyIGM9by5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSx1PW8ubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoLjUqYyksbD0icmVsIitzbixmPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMYWJlbCIpLmF0dHIoImlkIixsKS5hdHRyKCJ4Iix1LngpLmF0dHIoInkiLHUueSkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIrX3QoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitybi5mb250U2l6ZSsicHgiKS50ZXh0KGUucm9sZUEpLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitsKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExhYmVsQm94IikuYXR0cigieCIsdS54LWYud2lkdGgvMikuYXR0cigieSIsdS55LWYuaGVpZ2h0LzIpLmF0dHIoIndpZHRoIixmLndpZHRoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJmaWxsLW9wYWNpdHkiLCI4NSUiKX0oaSx0LHIscyl9KSk7dmFyIGw9cm4uZGlhZ3JhbVBhZGRpbmcsZj1pLm5vZGUoKS5nZXRCQm94KCksZD1mLndpZHRoKzIqbCxwPWYuaGVpZ2h0KzIqbDtXKGkscCxkLHJuLnVzZU1heFdpZHRoKSxpLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChmLngtbCwiICIpLmNvbmNhdChmLnktbCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApKX07ZnVuY3Rpb24gbG4odCl7cmV0dXJuKGxuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIGZuLGRuLHBuPTAseW49X3QoKSxnbj17fSx2bj1bXSxtbj1bXSxibj1bXSx4bj17fSxfbj17fSxrbj0wLHduPSEwLEVuPVtdLFRuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhnbiksbj0wO248ZS5sZW5ndGg7bisrKWlmKGduW2Vbbl1dLmlkPT09dClyZXR1cm4gZ25bZVtuXV0uZG9tSWQ7cmV0dXJuIHR9LENuPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXtzdGFydDp0LGVuZDplLHR5cGU6dm9pZCAwLHRleHQ6IiJ9O3ZvaWQgMCE9PShyPW4udGV4dCkmJihpLnRleHQ9Xy5zYW5pdGl6ZVRleHQoci50cmltKCkseW4pLCciJz09PWkudGV4dFswXSYmJyInPT09aS50ZXh0W2kudGV4dC5sZW5ndGgtMV0mJihpLnRleHQ9aS50ZXh0LnN1YnN0cmluZygxLGkudGV4dC5sZW5ndGgtMSkpKSx2b2lkIDAhPT1uJiYoaS50eXBlPW4udHlwZSxpLnN0cm9rZT1uLnN0cm9rZSxpLmxlbmd0aD1uLmxlbmd0aCksdm4ucHVzaChpKX0sU249ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dDt2b2lkIDAhPT1nbltuXSYmZ25bbl0uY2xhc3Nlcy5wdXNoKGUpLHZvaWQgMCE9PXhuW25dJiZ4bltuXS5jbGFzc2VzLnB1c2goZSl9KSl9LEFuPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdChoLnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KGguc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KGguc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KGguc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3QoaC5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O0VuLnB1c2goQW4pO3ZhciBNbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGJuLmxlbmd0aDtlKyspaWYoYm5bZV0uaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSxPbj0tMSxCbj1bXSxObj1mdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qubm9kZXMuaW5kZXhPZihlKT49MCYmKG49ITApfSkpLG59LERuPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtObihlLHIpfHxuLnB1c2godC5ub2Rlc1tpXSl9KSkse25vZGVzOm59fSxMbj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxkZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIHl0LmZsb3djaGFydH0sYWRkVmVydGV4OmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXQ7dm9pZCAwIT09cyYmMCE9PXMudHJpbSgpLmxlbmd0aCYmKHZvaWQgMD09PWduW3NdJiYoZ25bc109e2lkOnMsZG9tSWQ6ImZsb3djaGFydC0iK3MrIi0iK3BuLHN0eWxlczpbXSxjbGFzc2VzOltdfSkscG4rKyx2b2lkIDAhPT1lPyh5bj1fdCgpLCciJz09PShvPV8uc2FuaXRpemVUZXh0KGUudHJpbSgpLHluKSlbMF0mJiciJz09PW9bby5sZW5ndGgtMV0mJihvPW8uc3Vic3RyaW5nKDEsby5sZW5ndGgtMSkpLGduW3NdLnRleHQ9byk6dm9pZCAwPT09Z25bc10udGV4dCYmKGduW3NdLnRleHQ9dCksdm9pZCAwIT09biYmKGduW3NdLnR5cGU9biksbnVsbCE9ciYmci5mb3JFYWNoKChmdW5jdGlvbih0KXtnbltzXS5zdHlsZXMucHVzaCh0KX0pKSxudWxsIT1pJiZpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2duW3NdLmNsYXNzZXMucHVzaCh0KX0pKSx2b2lkIDAhPT1hJiYoZ25bc10uZGlyPWEpKX0sbG9va1VwRG9tSWQ6VG4sYWRkTGluazpmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGUubGVuZ3RoO2ErKylDbih0W2ldLGVbYV0sbixyKX0sdXBkYXRlTGlua0ludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P3ZuLmRlZmF1bHRJbnRlcnBvbGF0ZT1lOnZuW3RdLmludGVycG9sYXRlPWV9KSl9LHVwZGF0ZUxpbms6ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpeyJkZWZhdWx0Ij09PXQ/dm4uZGVmYXVsdFN0eWxlPWU6KC0xPT09Vi5pc1N1YnN0cmluZ0luQXJyYXkoImZpbGwiLGUpJiZlLnB1c2goImZpbGw6bm9uZSIpLHZuW3RdLnN0eWxlPWUpfSkpfSxhZGRDbGFzczpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PW1uW3RdJiYobW5bdF09e2lkOnQsc3R5bGVzOltdLHRleHRTdHlsZXM6W119KSxudWxsIT1lJiZlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKGUubWF0Y2goImNvbG9yIikpe3ZhciBuPWUucmVwbGFjZSgiZmlsbCIsImJnRmlsbCIpLnJlcGxhY2UoImNvbG9yIiwiZmlsbCIpO21uW3RdLnRleHRTdHlsZXMucHVzaChuKX1tblt0XS5zdHlsZXMucHVzaChlKX0pKX0sc2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpeyhmbj10KS5tYXRjaCgvLio8LykmJihmbj0iUkwiKSxmbi5tYXRjaCgvLipcXi8pJiYoZm49IkJUIiksZm4ubWF0Y2goLy4qPi8pJiYoZm49IkxSIiksZm4ubWF0Y2goLy4qdi8pJiYoZm49IlRCIil9LHNldENsYXNzOlNuLHNldFRvb2x0aXA6ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZSYmKF9uWyJnZW4tMSI9PT1kbj9Ubih0KTp0XT1fLnNhbml0aXplVGV4dChlLHluKSl9KSl9LGdldFRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIF9uW3RdfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1Ubih0KTtpZigibG9vc2UiPT09X3QoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgaT1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2k9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS50cmltKCk7JyInPT09by5jaGFyQXQoMCkmJiciJz09PW8uY2hhckF0KG8ubGVuZ3RoLTEpJiYobz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpKSxpW2FdPW99fTA9PT1pLmxlbmd0aCYmaS5wdXNoKHQpLHZvaWQgMCE9PWduW3RdJiYoZ25bdF0uaGF2ZUNhbGxiYWNrPSEwLEVuLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChyLCciXScpKTtudWxsIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7Vi5ydW5GdW5jLmFwcGx5KFYsW2VdLmNvbmNhdChobihpKSkpfSksITEpfSkpKX19KHQsZSxuKX0pKSxTbih0LCJjbGlja2FibGUiKX0sc2V0TGluazpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWduW3RdJiYoZ25bdF0ubGluaz1WLmZvcm1hdFVybChlLHluKSxnblt0XS5saW5rVGFyZ2V0PW4pfSkpLFNuKHQsImNsaWNrYWJsZSIpfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe0VuLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBmbi50cmltKCl9LGdldFZlcnRpY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGdufSxnZXRFZGdlczpmdW5jdGlvbigpe3JldHVybiB2bn0sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBtbn0sY2xlYXI6ZnVuY3Rpb24odCl7Z249e30sbW49e30sdm49W10sKEVuPVtdKS5wdXNoKEFuKSxibj1bXSx4bj17fSxrbj0wLF9uPVtdLHduPSEwLGRuPXR8fCJnZW4tMSJ9LHNldEdlbjpmdW5jdGlvbih0KXtkbj10fHwiZ2VuLTEifSxkZWZhdWx0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifSxhZGRTdWJHcmFwaDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dC50cmltKCksaT1uO3Q9PT1uJiZuLm1hdGNoKC9ccy8pJiYocj12b2lkIDApO3ZhciBhPVtdLG89ZnVuY3Rpb24odCl7dmFyIGUsbj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxyPVtdO3JldHVybntub2RlTGlzdDp0LmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGk9bG4odCk7cmV0dXJuIHQuc3RtdCYmImRpciI9PT10LnN0bXQ/KGU9dC52YWx1ZSwhMSk6IiIhPT10LnRyaW0oKSYmKGkgaW4gbj8hbltpXS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG5baV1bdF09ITApOiEoci5pbmRleE9mKHQpPj0wKSYmci5wdXNoKHQpKX0pKSxkaXI6ZX19KGEuY29uY2F0LmFwcGx5KGEsZSkpLHM9by5ub2RlTGlzdCx1PW8uZGlyO2lmKGE9cywiZ2VuLTEiPT09ZG4pe2Mud2FybigiTE9PS0lORyBVUCIpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF09VG4oYVtsXSl9cj1yfHwic3ViR3JhcGgiK2tuLGk9aXx8IiIsaT1fLnNhbml0aXplVGV4dChpLHluKSxrbis9MTt2YXIgaD17aWQ6cixub2RlczphLHRpdGxlOmkudHJpbSgpLGNsYXNzZXM6W10sZGlyOnV9O3JldHVybiBjLmluZm8oIkFkZGluZyIsaC5pZCxoLm5vZGVzLGguZGlyKSxoLm5vZGVzPURuKGgsYm4pLm5vZGVzLGJuLnB1c2goaCkseG5bcl09aCxyfSxnZXREZXB0aEZpcnN0UG9zOmZ1bmN0aW9uKHQpe3JldHVybiBCblt0XX0saW5kZXhOb2RlczpmdW5jdGlvbigpe09uPS0xLGJuLmxlbmd0aD4wJiZmdW5jdGlvbiB0KGUsbil7dmFyIHI9Ym5bbl0ubm9kZXM7aWYoISgoT24rPTEpPjJlMykpe2lmKEJuW09uXT1uLGJuW25dLmlkPT09ZSlyZXR1cm57cmVzdWx0OiEwLGNvdW50OjB9O2Zvcih2YXIgaT0wLGE9MTtpPHIubGVuZ3RoOyl7dmFyIG89TW4ocltpXSk7aWYobz49MCl7dmFyIHM9dChlLG8pO2lmKHMucmVzdWx0KXJldHVybntyZXN1bHQ6ITAsY291bnQ6YStzLmNvdW50fTthKz1zLmNvdW50fWkrPTF9cmV0dXJue3Jlc3VsdDohMSxjb3VudDphfX19KCJub25lIixibi5sZW5ndGgtMSl9LGdldFN1YkdyYXBoczpmdW5jdGlvbigpe3JldHVybiBibn0sZGVzdHJ1Y3RMaW5rOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPWUuc2xpY2UoMCwtMSkscj0iYXJyb3dfb3BlbiI7c3dpdGNoKGUuc2xpY2UoLTEpKXtjYXNlIngiOnI9ImFycm93X2Nyb3NzIiwieCI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpO2JyZWFrO2Nhc2UiPiI6cj0iYXJyb3dfcG9pbnQiLCI8Ij09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSk7YnJlYWs7Y2FzZSJvIjpyPSJhcnJvd19jaXJjbGUiLCJvIj09PWVbMF0mJihyPSJkb3VibGVfIityLG49bi5zbGljZSgxKSl9dmFyIGk9Im5vcm1hbCIsYT1uLmxlbmd0aC0xOyI9Ij09PW5bMF0mJihpPSJ0aGljayIpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MCxpPTA7aTxuOysraSllW2ldPT09dCYmKytyO3JldHVybiByfSgiLiIsbik7cmV0dXJuIG8mJihpPSJkb3R0ZWQiLGE9bykse3R5cGU6cixzdHJva2U6aSxsZW5ndGg6YX19KHQpO2lmKGUpe2lmKChuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49ImFycm93X29wZW4iO3N3aXRjaChlWzBdKXtjYXNlIjwiOm49ImFycm93X3BvaW50IixlPWUuc2xpY2UoMSk7YnJlYWs7Y2FzZSJ4IjpuPSJhcnJvd19jcm9zcyIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UibyI6bj0iYXJyb3dfY2lyY2xlIixlPWUuc2xpY2UoMSl9dmFyIHI9Im5vcm1hbCI7cmV0dXJuLTEhPT1lLmluZGV4T2YoIj0iKSYmKHI9InRoaWNrIiksLTEhPT1lLmluZGV4T2YoIi4iKSYmKHI9ImRvdHRlZCIpLHt0eXBlOm4sc3Ryb2tlOnJ9fShlKSkuc3Ryb2tlIT09ci5zdHJva2UpcmV0dXJue3R5cGU6IklOVkFMSUQiLHN0cm9rZToiSU5WQUxJRCJ9O2lmKCJhcnJvd19vcGVuIj09PW4udHlwZSluLnR5cGU9ci50eXBlO2Vsc2V7aWYobi50eXBlIT09ci50eXBlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtuLnR5cGU9ImRvdWJsZV8iK24udHlwZX1yZXR1cm4iZG91YmxlX2Fycm93Ij09PW4udHlwZSYmKG4udHlwZT0iZG91YmxlX2Fycm93X3BvaW50Iiksbi5sZW5ndGg9ci5sZW5ndGgsbn1yZXR1cm4gcn0sbGV4OntmaXJzdEdyYXBoOmZ1bmN0aW9uKCl7cmV0dXJuISF3biYmKHduPSExLCEwKX19LGV4aXN0czpObixtYWtlVW5pcTpEbn0sSW49bigyNyksUm49bi5uKEluKSxGbj1uKDcpLFBuPW4ubihGbiksam49big1MSksWW49bi5uKGpuKTtmdW5jdGlvbiB6bih0LGUsbil7dmFyIHI9LjkqKGUud2lkdGgrZS5oZWlnaHQpLGk9W3t4OnIvMix5OjB9LHt4OnIseTotci8yfSx7eDpyLzIseTotcn0se3g6MCx5Oi1yLzJ9XSxhPUtuKHQscixyLGkpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gUG4uYS5pbnRlcnNlY3QucG9seWdvbihuLGksdCl9LGF9ZnVuY3Rpb24gVW4odCxlLG4pe3ZhciByPWUuaGVpZ2h0LGk9ci80LGE9ZS53aWR0aCsyKmksbz1be3g6aSx5OjB9LHt4OmEtaSx5OjB9LHt4OmEseTotci8yfSx7eDphLWkseTotcn0se3g6aSx5Oi1yfSx7eDowLHk6LXIvMn1dLHM9S24odCxhLHIsbyk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBQbi5hLmludGVyc2VjdC5wb2x5Z29uKG4sbyx0KX0sc31mdW5jdGlvbiAkbih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi1pLzIseTowfSx7eDpyLHk6MH0se3g6cix5Oi1pfSx7eDotaS8yLHk6LWl9LHt4OjAseTotaS8yfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIHFuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6LTIqaS82LHk6MH0se3g6ci1pLzYseTowfSx7eDpyKzIqaS82LHk6LWl9LHt4OmkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIFduKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MippLzYseTowfSx7eDpyK2kvNix5OjB9LHt4OnItMippLzYseTotaX0se3g6LWkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIFZuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6LTIqaS82LHk6MH0se3g6cisyKmkvNix5OjB9LHt4OnItaS82LHk6LWl9LHt4OmkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIEhuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6aS82LHk6MH0se3g6ci1pLzYseTowfSx7eDpyKzIqaS82LHk6LWl9LHt4Oi0yKmkvNix5Oi1pfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIEduKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MCx5OjB9LHt4OnIraS8yLHk6MH0se3g6cix5Oi1pLzJ9LHt4OnIraS8yLHk6LWl9LHt4OjAseTotaX1dLG89S24odCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBQbi5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBYbih0LGUsbil7dmFyIHI9ZS5oZWlnaHQsaT1lLndpZHRoK3IvNCxhPXQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigicngiLHIvMikuYXR0cigicnkiLHIvMikuYXR0cigieCIsLWkvMikuYXR0cigieSIsLXIvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIscik7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBQbi5hLmludGVyc2VjdC5yZWN0KG4sdCl9LGF9ZnVuY3Rpb24gWm4odCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDowLHk6MH0se3g6cix5OjB9LHt4OnIseTotaX0se3g6MCx5Oi1pfSx7eDowLHk6MH0se3g6LTgseTowfSx7eDpyKzgseTowfSx7eDpyKzgseTotaX0se3g6LTgseTotaX0se3g6LTgseTowfV0sbz1Lbih0LHIsaSxhKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIFBuLmEuaW50ZXJzZWN0LnBvbHlnb24obixhLHQpfSxvfWZ1bmN0aW9uIFFuKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ci8yLGE9aS8oMi41K3IvNTApLG89ZS5oZWlnaHQrYSxzPSJNIDAsIithKyIgYSAiK2krIiwiK2ErIiAwLDAsMCAiK3IrIiAwIGEgIitpKyIsIithKyIgMCwwLDAgIistcisiIDAgbCAwLCIrbysiIGEgIitpKyIsIithKyIgMCwwLDAgIityKyIgMCBsIDAsIistbyxjPXQuYXR0cigibGFiZWwtb2Zmc2V0LXkiLGEpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoImQiLHMpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1yLzIrIiwiKy0oby8yK2EpKyIpIik7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPVBuLmEuaW50ZXJzZWN0LnJlY3Qobix0KSxyPWUueC1uLng7aWYoMCE9aSYmKE1hdGguYWJzKHIpPG4ud2lkdGgvMnx8TWF0aC5hYnMocik9PW4ud2lkdGgvMiYmTWF0aC5hYnMoZS55LW4ueSk+bi5oZWlnaHQvMi1hKSl7dmFyIG89YSphKigxLXIqci8oaSppKSk7MCE9byYmKG89TWF0aC5zcXJ0KG8pKSxvPWEtbyx0Lnktbi55PjAmJihvPS1vKSxlLnkrPW99cmV0dXJuIGV9LGN9ZnVuY3Rpb24gS24odCxlLG4scil7cmV0dXJuIHQuaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIEpuPXthZGRUb1JlbmRlcjpmdW5jdGlvbih0KXt0LnNoYXBlcygpLnF1ZXN0aW9uPXpuLHQuc2hhcGVzKCkuaGV4YWdvbj1Vbix0LnNoYXBlcygpLnN0YWRpdW09WG4sdC5zaGFwZXMoKS5zdWJyb3V0aW5lPVpuLHQuc2hhcGVzKCkuY3lsaW5kZXI9UW4sdC5zaGFwZXMoKS5yZWN0X2xlZnRfaW52X2Fycm93PSRuLHQuc2hhcGVzKCkubGVhbl9yaWdodD1xbix0LnNoYXBlcygpLmxlYW5fbGVmdD1Xbix0LnNoYXBlcygpLnRyYXBlem9pZD1Wbix0LnNoYXBlcygpLmludl90cmFwZXpvaWQ9SG4sdC5zaGFwZXMoKS5yZWN0X3JpZ2h0X2ludl9hcnJvdz1Hbn0sYWRkVG9SZW5kZXJWMjpmdW5jdGlvbih0KXt0KHtxdWVzdGlvbjp6bn0pLHQoe2hleGFnb246VW59KSx0KHtzdGFkaXVtOlhufSksdCh7c3Vicm91dGluZTpabn0pLHQoe2N5bGluZGVyOlFufSksdCh7cmVjdF9sZWZ0X2ludl9hcnJvdzokbn0pLHQoe2xlYW5fcmlnaHQ6cW59KSx0KHtsZWFuX2xlZnQ6V259KSx0KHt0cmFwZXpvaWQ6Vm59KSx0KHtpbnZfdHJhcGV6b2lkOkhufSksdCh7cmVjdF9yaWdodF9pbnZfYXJyb3c6R259KX19LHRyPXt9LGVyPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgbyxzPUwoaS5zdHlsZXMpLHU9dm9pZCAwIT09aS50ZXh0P2kudGV4dDppLmlkO2lmKHgoX3QoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBsPXtsYWJlbDp1LnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsobz1ZbigpKHIsbCkubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG8pfWVsc2V7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtoLnNldEF0dHJpYnV0ZSgic3R5bGUiLHMubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtmb3IodmFyIGY9dS5zcGxpdChfLmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1mW2RdLGguYXBwZW5kQ2hpbGQocCl9bz1ofXZhciB5PTAsZz0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjp5PTUsZz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmc9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Zz0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Zz0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Zz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmc9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmc9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpnPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOmc9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpnPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOmc9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Zz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Zz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOmc9InJlY3QiO2JyZWFrO2RlZmF1bHQ6Zz0icmVjdCJ9Yy53YXJuKCJBZGRpbmcgbm9kZSIsaS5pZCxpLmRvbUlkKSxlLnNldE5vZGUoTG4ubG9va1VwRG9tSWQoaS5pZCkse2xhYmVsVHlwZToic3ZnIixsYWJlbFN0eWxlOnMubGFiZWxTdHlsZSxzaGFwZTpnLGxhYmVsOm8scng6eSxyeTp5LGNsYXNzOmEsc3R5bGU6cy5zdHlsZSxpZDpMbi5sb29rVXBEb21JZChpLmlkKX0pfSkpfSxucj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT0wO2lmKHZvaWQgMCE9PXQuZGVmYXVsdFN0eWxlKXt2YXIgYT1MKHQuZGVmYXVsdFN0eWxlKTtuPWEuc3R5bGUscj1hLmxhYmVsU3R5bGV9dC5mb3JFYWNoKChmdW5jdGlvbihhKXtpKys7dmFyIG89IkwtIithLnN0YXJ0KyItIithLmVuZCxzPSJMUy0iK2Euc3RhcnQsYz0iTEUtIithLmVuZCx1PXt9OyJhcnJvd19vcGVuIj09PWEudHlwZT91LmFycm93aGVhZD0ibm9uZSI6dS5hcnJvd2hlYWQ9Im5vcm1hbCI7dmFyIGw9IiIsZj0iIjtpZih2b2lkIDAhPT1hLnN0eWxlKXt2YXIgZD1MKGEuc3R5bGUpO2w9ZC5zdHlsZSxmPWQubGFiZWxTdHlsZX1lbHNlIHN3aXRjaChhLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmw9ImZpbGw6bm9uZSIsdm9pZCAwIT09biYmKGw9biksdm9pZCAwIT09ciYmKGY9cik7YnJlYWs7Y2FzZSJkb3R0ZWQiOmw9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmw9IiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZSJ9dS5zdHlsZT1sLHUubGFiZWxTdHlsZT1mLHZvaWQgMCE9PWEuaW50ZXJwb2xhdGU/dS5jdXJ2ZT1OKGEuaW50ZXJwb2xhdGUsaC5jdXJ2ZUxpbmVhcik6dm9pZCAwIT09dC5kZWZhdWx0SW50ZXJwb2xhdGU/dS5jdXJ2ZT1OKHQuZGVmYXVsdEludGVycG9sYXRlLGguY3VydmVMaW5lYXIpOnUuY3VydmU9Tih0ci5jdXJ2ZSxoLmN1cnZlTGluZWFyKSx2b2lkIDA9PT1hLnRleHQ/dm9pZCAwIT09YS5zdHlsZSYmKHUuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToodS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsdS5sYWJlbHBvcz0iYyIseChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKT8odS5sYWJlbFR5cGU9Imh0bWwiLHUubGFiZWw9JzxzcGFuIGlkPSJMLScuY29uY2F0KG8sJyIgY2xhc3M9ImVkZ2VMYWJlbCBMLScpLmNvbmNhdChzLCInIEwtIikuY29uY2F0KGMsJyI+JykuY29uY2F0KGEudGV4dC5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKSwiPC9zcGFuPiIpKToodS5sYWJlbFR5cGU9InRleHQiLHUubGFiZWw9YS50ZXh0LnJlcGxhY2UoXy5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1hLnN0eWxlJiYodS5zdHlsZT11LnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZSIpLHUubGFiZWxTdHlsZT11LmxhYmVsU3R5bGUucmVwbGFjZSgiY29sb3I6IiwiZmlsbDoiKSkpLHUuaWQ9byx1LmNsYXNzPXMrIiAiK2MsdS5taW5sZW49YS5sZW5ndGh8fDEsZS5zZXRFZGdlKExuLmxvb2tVcERvbUlkKGEuc3RhcnQpLExuLmxvb2tVcERvbUlkKGEuZW5kKSx1LGkpfSkpfSxycj1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXRyW2Vbbl1dPXRbZVtuXV19LGlyPWZ1bmN0aW9uKHQpe2MuaW5mbygiRXh0cmFjdGluZyBjbGFzc2VzIiksTG4uY2xlYXIoKTt0cnl7dmFyIGU9Um4uYS5wYXJzZXI7cmV0dXJuIGUueXk9TG4sZS5wYXJzZSh0KSxMbi5nZXRDbGFzc2VzKCl9Y2F0Y2godCl7cmV0dXJufX0sYXI9ZnVuY3Rpb24odCxlKXtjLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IiksTG4uY2xlYXIoKSxMbi5zZXRHZW4oImdlbi0xIik7dmFyIG49Um4uYS5wYXJzZXI7bi55eT1MbixuLnBhcnNlKHQpO3ZhciByPUxuLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJURCIpO2Zvcih2YXIgaSxhPV90KCkuZmxvd2NoYXJ0LG89YS5ub2RlU3BhY2luZ3x8NTAscz1hLnJhbmtTcGFjaW5nfHw1MCx1PW5ldyBVdC5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cixub2Rlc2VwOm8scmFua3NlcDpzLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGw9TG4uZ2V0U3ViR3JhcGhzKCksZj1sLmxlbmd0aC0xO2Y+PTA7Zi0tKWk9bFtmXSxMbi5hZGRWZXJ0ZXgoaS5pZCxpLnRpdGxlLCJncm91cCIsdm9pZCAwLGkuY2xhc3Nlcyk7dmFyIGQ9TG4uZ2V0VmVydGljZXMoKTtjLndhcm4oIkdldCB2ZXJ0aWNlcyIsZCk7dmFyIHA9TG4uZ2V0RWRnZXMoKSx5PTA7Zm9yKHk9bC5sZW5ndGgtMTt5Pj0wO3ktLSl7aT1sW3ldLE9iamVjdChoLnNlbGVjdEFsbCkoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IodmFyIGc9MDtnPGkubm9kZXMubGVuZ3RoO2crKyljLndhcm4oIlNldHRpbmcgc3ViZ3JhcGgiLGkubm9kZXNbZ10sTG4ubG9va1VwRG9tSWQoaS5ub2Rlc1tnXSksTG4ubG9va1VwRG9tSWQoaS5pZCkpLHUuc2V0UGFyZW50KExuLmxvb2tVcERvbUlkKGkubm9kZXNbZ10pLExuLmxvb2tVcERvbUlkKGkuaWQpKX1lcihkLHUsZSksbnIocCx1KTt2YXIgdj1uZXcoMCxQbi5hLnJlbmRlcik7Sm4uYWRkVG9SZW5kZXIodiksdi5hcnJvd3MoKS5ub25lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwic3Ryb2tlV2lkdGgiKS5hdHRyKCJtYXJrZXJXaWR0aCIsOCkuYXR0cigibWFya2VySGVpZ2h0Iiw2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCAwIEwgMCAwIEwgMCAwIHoiKTtQbi5hLnV0aWwuYXBwbHlTdHlsZShpLG5bcisiU3R5bGUiXSl9LHYuYXJyb3dzKCkubm9ybWFsPWZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6IikuYXR0cigiY2xhc3MiLCJhcnJvd2hlYWRQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX07dmFyIG09T2JqZWN0KGguc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTttLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLGMud2Fybih1KTt2YXIgYj1PYmplY3QoaC5zZWxlY3QpKCIjIitlKyIgZyIpO3YoYix1KSxiLnNlbGVjdEFsbCgiZy5ub2RlIikuYXR0cigidGl0bGUiLChmdW5jdGlvbigpe3JldHVybiBMbi5nZXRUb29sdGlwKHRoaXMuaWQpfSkpO3ZhciBfPWEuZGlhZ3JhbVBhZGRpbmcsaz1tLm5vZGUoKS5nZXRCQm94KCksdz1rLndpZHRoKzIqXyxFPWsuaGVpZ2h0KzIqXztXKG0sRSx3LGEudXNlTWF4V2lkdGgpO3ZhciBUPSIiLmNvbmNhdChrLngtXywiICIpLmNvbmNhdChrLnktXywiICIpLmNvbmNhdCh3LCIgIikuY29uY2F0KEUpO2ZvcihjLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KFQpKSxtLmF0dHIoInZpZXdCb3giLFQpLExuLmluZGV4Tm9kZXMoInN1YkdyYXBoIit5KSx5PTA7eTxsLmxlbmd0aDt5KyspaWYoInVuZGVmaW5lZCIhPT0oaT1sW3ldKS50aXRsZSl7dmFyIEM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytMbi5sb29rVXBEb21JZChpLmlkKSsnIl0gcmVjdCcpLFM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytMbi5sb29rVXBEb21JZChpLmlkKSsnIl0nKSxBPUNbMF0ueC5iYXNlVmFsLnZhbHVlLE09Q1swXS55LmJhc2VWYWwudmFsdWUsTz1DWzBdLndpZHRoLmJhc2VWYWwudmFsdWUsQj1PYmplY3QoaC5zZWxlY3QpKFNbMF0pLnNlbGVjdCgiLmxhYmVsIik7Qi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoQStPLzIsIiwgIikuY29uY2F0KE0rMTQsIikiKSksQi5hdHRyKCJpZCIsZSsiVGV4dCIpO2Zvcih2YXIgTj0wO048aS5jbGFzc2VzLmxlbmd0aDtOKyspU1swXS5jbGFzc0xpc3QuYWRkKGkuY2xhc3Nlc1tOXSl9eChhLmh0bWxMYWJlbHMpO2Zvcih2YXIgRD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxMPTA7TDxELmxlbmd0aDtMKyspe3ZhciBJPURbTF0sUj1JLmdldEJCb3goKSxGPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Ri5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxGLnNldEF0dHJpYnV0ZSgicnkiLDApLEYuc2V0QXR0cmlidXRlKCJ3aWR0aCIsUi53aWR0aCksRi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsUi5oZWlnaHQpLEkuaW5zZXJ0QmVmb3JlKEYsSS5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhkKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1kW3RdO2lmKG4ubGluayl7dmFyIHI9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSsnIFtpZD0iJytMbi5sb29rVXBEb21JZCh0KSsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX0sb3I9e30sc3I9ZnVuY3Rpb24odCxlLG4pe3ZhciByPU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQobiwnIl0nKSk7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9dFtuXSxhPSJkZWZhdWx0IjtpLmNsYXNzZXMubGVuZ3RoPjAmJihhPWkuY2xhc3Nlcy5qb2luKCIgIikpO3ZhciBvLHM9TChpLnN0eWxlcyksdT12b2lkIDAhPT1pLnRleHQ/aS50ZXh0OmkuaWQ7aWYoeChfdCgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9e2xhYmVsOnUucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhvPVluKCkocixsKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobyl9ZWxzZXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2guc2V0QXR0cmlidXRlKCJzdHlsZSIscy5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgZj11LnNwbGl0KF8ubGluZUJyZWFrUmVnZXgpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRzcGFuIik7cC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwieG1sOnNwYWNlIiwicHJlc2VydmUiKSxwLnNldEF0dHJpYnV0ZSgiZHkiLCIxZW0iKSxwLnNldEF0dHJpYnV0ZSgieCIsIjEiKSxwLnRleHRDb250ZW50PWZbZF0saC5hcHBlbmRDaGlsZChwKX1vPWh9dmFyIHk9MCxnPSIiO3N3aXRjaChpLnR5cGUpe2Nhc2Uicm91bmQiOnk9NSxnPSJyZWN0IjticmVhaztjYXNlInNxdWFyZSI6Zz0icmVjdCI7YnJlYWs7Y2FzZSJkaWFtb25kIjpnPSJxdWVzdGlvbiI7YnJlYWs7Y2FzZSJoZXhhZ29uIjpnPSJoZXhhZ29uIjticmVhaztjYXNlIm9kZCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJsZWFuX3JpZ2h0IjpnPSJsZWFuX3JpZ2h0IjticmVhaztjYXNlImxlYW5fbGVmdCI6Zz0ibGVhbl9sZWZ0IjticmVhaztjYXNlInRyYXBlem9pZCI6Zz0idHJhcGV6b2lkIjticmVhaztjYXNlImludl90cmFwZXpvaWQiOmc9Imludl90cmFwZXpvaWQiO2JyZWFrO2Nhc2Uib2RkX3JpZ2h0IjpnPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImNpcmNsZSI6Zz0iY2lyY2xlIjticmVhaztjYXNlImVsbGlwc2UiOmc9ImVsbGlwc2UiO2JyZWFrO2Nhc2Uic3RhZGl1bSI6Zz0ic3RhZGl1bSI7YnJlYWs7Y2FzZSJzdWJyb3V0aW5lIjpnPSJzdWJyb3V0aW5lIjticmVhaztjYXNlImN5bGluZGVyIjpnPSJjeWxpbmRlciI7YnJlYWs7Y2FzZSJncm91cCI6Zz0icmVjdCI7YnJlYWs7ZGVmYXVsdDpnPSJyZWN0In1lLnNldE5vZGUoaS5pZCx7bGFiZWxTdHlsZTpzLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbFRleHQ6dSxyeDp5LHJ5OnksY2xhc3M6YSxzdHlsZTpzLnN0eWxlLGlkOmkuaWQsbGluazppLmxpbmssbGlua1RhcmdldDppLmxpbmtUYXJnZXQsdG9vbHRpcDpMbi5nZXRUb29sdGlwKGkuaWQpfHwiIixkb21JZDpMbi5sb29rVXBEb21JZChpLmlkKSxoYXZlQ2FsbGJhY2s6aS5oYXZlQ2FsbGJhY2ssd2lkdGg6Imdyb3VwIj09PWkudHlwZT81MDA6dm9pZCAwLGRpcjppLmRpcix0eXBlOmkudHlwZSxwYWRkaW5nOl90KCkuZmxvd2NoYXJ0LnBhZGRpbmd9KSxjLmluZm8oInNldE5vZGUiLHtsYWJlbFN0eWxlOnMubGFiZWxTdHlsZSxzaGFwZTpnLGxhYmVsVGV4dDp1LHJ4Onkscnk6eSxjbGFzczphLHN0eWxlOnMuc3R5bGUsaWQ6aS5pZCxkb21JZDpMbi5sb29rVXBEb21JZChpLmlkKSx3aWR0aDoiZ3JvdXAiPT09aS50eXBlPzUwMDp2b2lkIDAsdHlwZTppLnR5cGUsZGlyOmkuZGlyLHBhZGRpbmc6X3QoKS5mbG93Y2hhcnQucGFkZGluZ30pfSkpfSxjcj1mdW5jdGlvbih0LGUpe2MuaW5mbygiYWJjNzggZWRnZXMgPSAiLHQpO3ZhciBuLHIsaT0wLGE9e307aWYodm9pZCAwIT09dC5kZWZhdWx0U3R5bGUpe3ZhciBvPUwodC5kZWZhdWx0U3R5bGUpO249by5zdHlsZSxyPW8ubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKG8pe2krKzt2YXIgcz0iTC0iK28uc3RhcnQrIi0iK28uZW5kO3ZvaWQgMD09PWFbc10/KGFbc109MCxjLmluZm8oImFiYzc4IG5ldyBlbnRyeSIscyxhW3NdKSk6KGFbc10rKyxjLmluZm8oImFiYzc4IG5ldyBlbnRyeSIscyxhW3NdKSk7dmFyIHU9cysiLSIrYVtzXTtjLmluZm8oImFiYzc4IG5ldyBsaW5rIGlkIHRvIGJlIHVzZWQgaXMiLHMsdSxhW3NdKTt2YXIgbD0iTFMtIitvLnN0YXJ0LGY9IkxFLSIrby5lbmQsZD17c3R5bGU6IiIsbGFiZWxTdHlsZToiIn07c3dpdGNoKGQubWlubGVuPW8ubGVuZ3RofHwxLCJhcnJvd19vcGVuIj09PW8udHlwZT9kLmFycm93aGVhZD0ibm9uZSI6ZC5hcnJvd2hlYWQ9Im5vcm1hbCIsZC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfb3BlbiIsZC5hcnJvd1R5cGVFbmQ9ImFycm93X29wZW4iLG8udHlwZSl7Y2FzZSJkb3VibGVfYXJyb3dfY3Jvc3MiOmQuYXJyb3dUeXBlU3RhcnQ9ImFycm93X2Nyb3NzIjtjYXNlImFycm93X2Nyb3NzIjpkLmFycm93VHlwZUVuZD0iYXJyb3dfY3Jvc3MiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X3BvaW50IjpkLmFycm93VHlwZVN0YXJ0PSJhcnJvd19wb2ludCI7Y2FzZSJhcnJvd19wb2ludCI6ZC5hcnJvd1R5cGVFbmQ9ImFycm93X3BvaW50IjticmVhaztjYXNlImRvdWJsZV9hcnJvd19jaXJjbGUiOmQuYXJyb3dUeXBlU3RhcnQ9ImFycm93X2NpcmNsZSI7Y2FzZSJhcnJvd19jaXJjbGUiOmQuYXJyb3dUeXBlRW5kPSJhcnJvd19jaXJjbGUifXZhciBwPSIiLHk9IiI7c3dpdGNoKG8uc3Ryb2tlKXtjYXNlIm5vcm1hbCI6cD0iZmlsbDpub25lOyIsdm9pZCAwIT09biYmKHA9biksdm9pZCAwIT09ciYmKHk9ciksZC50aGlja25lc3M9Im5vcm1hbCIsZC5wYXR0ZXJuPSJzb2xpZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmQudGhpY2tuZXNzPSJub3JtYWwiLGQucGF0dGVybj0iZG90dGVkIixkLnN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlLXdpZHRoOjJweDtzdHJva2UtZGFzaGFycmF5OjM7IjticmVhaztjYXNlInRoaWNrIjpkLnRoaWNrbmVzcz0idGhpY2siLGQucGF0dGVybj0ic29saWQiLGQuc3R5bGU9InN0cm9rZS13aWR0aDogMy41cHg7ZmlsbDpub25lOyJ9aWYodm9pZCAwIT09by5zdHlsZSl7dmFyIGc9TChvLnN0eWxlKTtwPWcuc3R5bGUseT1nLmxhYmVsU3R5bGV9ZC5zdHlsZT1kLnN0eWxlKz1wLGQubGFiZWxTdHlsZT1kLmxhYmVsU3R5bGUrPXksdm9pZCAwIT09by5pbnRlcnBvbGF0ZT9kLmN1cnZlPU4oby5pbnRlcnBvbGF0ZSxoLmN1cnZlTGluZWFyKTp2b2lkIDAhPT10LmRlZmF1bHRJbnRlcnBvbGF0ZT9kLmN1cnZlPU4odC5kZWZhdWx0SW50ZXJwb2xhdGUsaC5jdXJ2ZUxpbmVhcik6ZC5jdXJ2ZT1OKG9yLmN1cnZlLGguY3VydmVMaW5lYXIpLHZvaWQgMD09PW8udGV4dD92b2lkIDAhPT1vLnN0eWxlJiYoZC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihkLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixkLmxhYmVscG9zPSJjIiksZC5sYWJlbFR5cGU9InRleHQiLGQubGFiZWw9by50ZXh0LnJlcGxhY2UoXy5saW5lQnJlYWtSZWdleCwiXG4iKSx2b2lkIDA9PT1vLnN0eWxlJiYoZC5zdHlsZT1kLnN0eWxlfHwic3Ryb2tlOiAjMzMzOyBzdHJva2Utd2lkdGg6IDEuNXB4O2ZpbGw6bm9uZTsiKSxkLmxhYmVsU3R5bGU9ZC5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IiksZC5pZD11LGQuY2xhc3Nlcz0iZmxvd2NoYXJ0LWxpbmsgIitsKyIgIitmLGUuc2V0RWRnZShvLnN0YXJ0LG8uZW5kLGQsaSl9KSl9LHVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspb3JbZVtuXV09dFtlW25dXX0sbHI9ZnVuY3Rpb24odCxlKXtjLmluZm8oIkRyYXdpbmcgZmxvd2NoYXJ0IiksTG4uY2xlYXIoKSxMbi5zZXRHZW4oImdlbi0yIik7dmFyIG49Um4uYS5wYXJzZXI7bi55eT1MbixuLnBhcnNlKHQpO3ZhciByPUxuLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJURCIpO3ZhciBpLGE9X3QoKS5mbG93Y2hhcnQsbz1hLm5vZGVTcGFjaW5nfHw1MCxzPWEucmFua1NwYWNpbmd8fDUwLHU9bmV3IFV0LmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpyLG5vZGVzZXA6byxyYW5rc2VwOnMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksbD1Mbi5nZXRTdWJHcmFwaHMoKTtjLmluZm8oIlN1YmdyYXBocyAtICIsbCk7Zm9yKHZhciBmPWwubGVuZ3RoLTE7Zj49MDtmLS0paT1sW2ZdLGMuaW5mbygiU3ViZ3JhcGggLSAiLGkpLExuLmFkZFZlcnRleChpLmlkLGkudGl0bGUsImdyb3VwIix2b2lkIDAsaS5jbGFzc2VzLGkuZGlyKTt2YXIgZD1Mbi5nZXRWZXJ0aWNlcygpLHA9TG4uZ2V0RWRnZXMoKTtjLmluZm8ocCk7dmFyIHk9MDtmb3IoeT1sLmxlbmd0aC0xO3k+PTA7eS0tKXtpPWxbeV0sT2JqZWN0KGguc2VsZWN0QWxsKSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgZz0wO2c8aS5ub2Rlcy5sZW5ndGg7ZysrKWMuaW5mbygiU2V0dGluZyB1cCBzdWJncmFwaHMiLGkubm9kZXNbZ10saS5pZCksdS5zZXRQYXJlbnQoaS5ub2Rlc1tnXSxpLmlkKX1zcihkLHUsZSksY3IocCx1KTt2YXIgdj1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO3YuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIik7dmFyIG09T2JqZWN0KGguc2VsZWN0KSgiIyIrZSsiIGciKTtVZShtLHUsWyJwb2ludCIsImNpcmNsZSIsImNyb3NzIl0sImZsb3djaGFydCIsZSk7dmFyIGI9YS5kaWFncmFtUGFkZGluZyx4PXYubm9kZSgpLmdldEJCb3goKSxfPXgud2lkdGgrMipiLGs9eC5oZWlnaHQrMipiO2lmKGMuZGVidWcoIm5ldyBWaWV3Qm94IDAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KGspLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXUuX2xhYmVsLm1hcmdpbnksIikiKSksVyh2LGssXyxhLnVzZU1heFdpZHRoKSx2LmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdChrKSksdi5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoYi11Ll9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdChiLXgueSwiKSIpKSxMbi5pbmRleE5vZGVzKCJzdWJHcmFwaCIreSksIWEuaHRtbExhYmVscylmb3IodmFyIHc9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksRT0wO0U8dy5sZW5ndGg7RSsrKXt2YXIgVD13W0VdLEM9VC5nZXRCQm94KCksUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1Muc2V0QXR0cmlidXRlKCJyeCIsMCksUy5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxTLnNldEF0dHJpYnV0ZSgid2lkdGgiLEMud2lkdGgpLFMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEMuaGVpZ2h0KSxULmluc2VydEJlZm9yZShTLFQuZmlyc3RDaGlsZCl9T2JqZWN0LmtleXMoZCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZFt0XTtpZihuLmxpbmspe3ZhciByPU9iamVjdChoLnNlbGVjdCkoIiMiK2UrJyBbaWQ9IicrdCsnIl0nKTtpZihyKXt2YXIgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYSIpO2kuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2xhc3MiLG4uY2xhc3Nlcy5qb2luKCIgIikpLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaHJlZiIsbi5saW5rKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlbCIsIm5vb3BlbmVyIiksbi5saW5rVGFyZ2V0JiZpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRhcmdldCIsbi5saW5rVGFyZ2V0KTt2YXIgYT1yLmluc2VydCgoZnVuY3Rpb24oKXtyZXR1cm4gaX0pLCI6Zmlyc3QtY2hpbGQiKSxvPXIuc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIik7byYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIG8ubm9kZSgpfSkpO3ZhciBzPXIuc2VsZWN0KCIubGFiZWwiKTtzJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gcy5ub2RlKCl9KSl9fX0pKX07ZnVuY3Rpb24gaHIodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIGZyLGRyLHByPSIiLHlyPSIiLGdyPSIiLHZyPVtdLG1yPSIiLGJyPVtdLHhyPVtdLF9yPSIiLGtyPVsiYWN0aXZlIiwiZG9uZSIsImNyaXQiLCJtaWxlc3RvbmUiXSx3cj1bXSxFcj0hMSxUcj0hMSxDcj0wLFNyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5pc29XZWVrZGF5KCk+PTYmJm4uaW5kZXhPZigid2Vla2VuZHMiKT49MHx8KG4uaW5kZXhPZih0LmZvcm1hdCgiZGRkZCIpLnRvTG93ZXJDYXNlKCkpPj0wfHxuLmluZGV4T2YodC5mb3JtYXQoZS50cmltKCkpKT49MCl9LEFyPWZ1bmN0aW9uKHQsZSxuKXtpZihuLmxlbmd0aCYmIXQubWFudWFsRW5kVGltZSl7dmFyIHI9bygpKHQuc3RhcnRUaW1lLGUsITApO3IuYWRkKDEsImQiKTt2YXIgaT1vKCkodC5lbmRUaW1lLGUsITApLGE9TXIocixpLGUsbik7dC5lbmRUaW1lPWkudG9EYXRlKCksdC5yZW5kZXJFbmRUaW1lPWF9fSxNcj1mdW5jdGlvbih0LGUsbixyKXtmb3IodmFyIGk9ITEsYT1udWxsO3Q8PWU7KWl8fChhPWUudG9EYXRlKCkpLChpPVNyKHQsbixyKSkmJmUuYWRkKDEsImQiKSx0LmFkZCgxLCJkIik7cmV0dXJuIGF9LE9yPWZ1bmN0aW9uKHQsZSxuKXtuPW4udHJpbSgpO3ZhciByPS9eYWZ0ZXJccysoW1xkXHctIF0rKS8uZXhlYyhuLnRyaW0oKSk7aWYobnVsbCE9PXIpe3ZhciBpPW51bGw7aWYoclsxXS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPUZyKHQpO3ZvaWQgMCE9PWUmJihpP2UuZW5kVGltZT5pLmVuZFRpbWUmJihpPWUpOmk9ZSl9KSksaSlyZXR1cm4gaS5lbmRUaW1lO3ZhciBhPW5ldyBEYXRlO3JldHVybiBhLnNldEhvdXJzKDAsMCwwLDApLGF9dmFyIHM9bygpKG4sZS50cmltKCksITApO3JldHVybiBzLmlzVmFsaWQoKT9zLnRvRGF0ZSgpOihjLmRlYnVnKCJJbnZhbGlkIGRhdGU6IituKSxjLmRlYnVnKCJXaXRoIGRhdGUgZm9ybWF0OiIrZS50cmltKCkpLG5ldyBEYXRlKX0sQnI9ZnVuY3Rpb24odCxlKXtpZihudWxsIT09dClzd2l0Y2godFsyXSl7Y2FzZSJzIjplLmFkZCh0WzFdLCJzZWNvbmRzIik7YnJlYWs7Y2FzZSJtIjplLmFkZCh0WzFdLCJtaW51dGVzIik7YnJlYWs7Y2FzZSJoIjplLmFkZCh0WzFdLCJob3VycyIpO2JyZWFrO2Nhc2UiZCI6ZS5hZGQodFsxXSwiZGF5cyIpO2JyZWFrO2Nhc2UidyI6ZS5hZGQodFsxXSwid2Vla3MiKX1yZXR1cm4gZS50b0RhdGUoKX0sTnI9ZnVuY3Rpb24odCxlLG4scil7cj1yfHwhMSxuPW4udHJpbSgpO3ZhciBpPW8oKShuLGUudHJpbSgpLCEwKTtyZXR1cm4gaS5pc1ZhbGlkKCk/KHImJmkuYWRkKDEsImQiKSxpLnRvRGF0ZSgpKTpCcigvXihbXGRdKykoW3dkaG1zXSkvLmV4ZWMobi50cmltKCkpLG8oKSh0KSl9LERyPTAsTHI9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/InRhc2siKyhEcis9MSk6dH0sSXI9W10sUnI9e30sRnI9ZnVuY3Rpb24odCl7dmFyIGU9UnJbdF07cmV0dXJuIElyW2VdfSxQcj1mdW5jdGlvbigpe2Zvcih2YXIgdD1mdW5jdGlvbih0KXt2YXIgZT1Jclt0XSxuPSIiO3N3aXRjaChJclt0XS5yYXcuc3RhcnRUaW1lLnR5cGUpe2Nhc2UicHJldlRhc2tFbmQiOnZhciByPUZyKGUucHJldlRhc2tJZCk7ZS5zdGFydFRpbWU9ci5lbmRUaW1lO2JyZWFrO2Nhc2UiZ2V0U3RhcnREYXRlIjoobj1PcigwLHByLElyW3RdLnJhdy5zdGFydFRpbWUuc3RhcnREYXRhKSkmJihJclt0XS5zdGFydFRpbWU9bil9cmV0dXJuIElyW3RdLnN0YXJ0VGltZSYmKElyW3RdLmVuZFRpbWU9TnIoSXJbdF0uc3RhcnRUaW1lLHByLElyW3RdLnJhdy5lbmRUaW1lLmRhdGEsRXIpLElyW3RdLmVuZFRpbWUmJihJclt0XS5wcm9jZXNzZWQ9ITAsSXJbdF0ubWFudWFsRW5kVGltZT1vKCkoSXJbdF0ucmF3LmVuZFRpbWUuZGF0YSwiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSxBcihJclt0XSxwcix2cikpKSxJclt0XS5wcm9jZXNzZWR9LGU9ITAsbj0wO248SXIubGVuZ3RoO24rKyl0KG4pLGU9ZSYmSXJbbl0ucHJvY2Vzc2VkO3JldHVybiBlfSxqcj1mdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1Gcih0KTt2b2lkIDAhPT1uJiZuLmNsYXNzZXMucHVzaChlKX0pKX0sWXI9ZnVuY3Rpb24odCxlKXt3ci5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnIl0nKSk7bnVsbCE9PW4mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2UoKX0pKX0pKSx3ci5wdXNoKChmdW5jdGlvbigpe3ZhciBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQodCwnLXRleHQiXScpKTtudWxsIT09biYmbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7ZSgpfSkpfSkpfSx6cj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5nYW50dH0sY2xlYXI6ZnVuY3Rpb24oKXticj1bXSx4cj1bXSxfcj0iIix3cj1bXSxtcj0iIixEcj0wLGZyPXZvaWQgMCxkcj12b2lkIDAsSXI9W10scHI9IiIseXI9IiIsZ3I9IiIsdnI9W10sRXI9ITEsVHI9ITEsQ3I9MH0sc2V0RGF0ZUZvcm1hdDpmdW5jdGlvbih0KXtwcj10fSxnZXREYXRlRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHByfSxlbmFibGVJbmNsdXNpdmVFbmREYXRlczpmdW5jdGlvbigpe0VyPSEwfSxlbmREYXRlc0FyZUluY2x1c2l2ZTpmdW5jdGlvbigpe3JldHVybiBFcn0sZW5hYmxlVG9wQXhpczpmdW5jdGlvbigpe1RyPSEwfSx0b3BBeGlzRW5hYmxlZDpmdW5jdGlvbigpe3JldHVybiBUcn0sc2V0QXhpc0Zvcm1hdDpmdW5jdGlvbih0KXt5cj10fSxnZXRBeGlzRm9ybWF0OmZ1bmN0aW9uKCl7cmV0dXJuIHlyfSxzZXRUb2RheU1hcmtlcjpmdW5jdGlvbih0KXtncj10fSxnZXRUb2RheU1hcmtlcjpmdW5jdGlvbigpe3JldHVybiBncn0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7bXI9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gbXJ9LGFkZFNlY3Rpb246ZnVuY3Rpb24odCl7X3I9dCxici5wdXNoKHQpfSxnZXRTZWN0aW9uczpmdW5jdGlvbigpe3JldHVybiBicn0sZ2V0VGFza3M6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9UHIoKSxlPTA7IXQmJmU8MTA7KXQ9UHIoKSxlKys7cmV0dXJuIHhyPUlyfSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49e3NlY3Rpb246X3IsdHlwZTpfcixwcm9jZXNzZWQ6ITEsbWFudWFsRW5kVGltZTohMSxyZW5kZXJFbmRUaW1lOm51bGwscmF3OntkYXRhOmV9LHRhc2s6dCxjbGFzc2VzOltdfSxyPWZ1bmN0aW9uKHQsZSl7dmFyIG49KCI6Ij09PWUuc3Vic3RyKDAsMSk/ZS5zdWJzdHIoMSxlLmxlbmd0aCk6ZSkuc3BsaXQoIiwiKSxyPXt9O1VyKG4scixrcik7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspbltpXT1uW2ldLnRyaW0oKTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpyLmlkPUxyKCksci5zdGFydFRpbWU9e3R5cGU6InByZXZUYXNrRW5kIixpZDp0fSxyLmVuZFRpbWU9e2RhdGE6blswXX07YnJlYWs7Y2FzZSAyOnIuaWQ9THIoKSxyLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blswXX0sci5lbmRUaW1lPXtkYXRhOm5bMV19O2JyZWFrO2Nhc2UgMzpyLmlkPUxyKG5bMF0pLHIuc3RhcnRUaW1lPXt0eXBlOiJnZXRTdGFydERhdGUiLHN0YXJ0RGF0YTpuWzFdfSxyLmVuZFRpbWU9e2RhdGE6blsyXX19cmV0dXJuIHJ9KGRyLGUpO24ucmF3LnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLnJhdy5lbmRUaW1lPXIuZW5kVGltZSxuLmlkPXIuaWQsbi5wcmV2VGFza0lkPWRyLG4uYWN0aXZlPXIuYWN0aXZlLG4uZG9uZT1yLmRvbmUsbi5jcml0PXIuY3JpdCxuLm1pbGVzdG9uZT1yLm1pbGVzdG9uZSxuLm9yZGVyPUNyLENyKys7dmFyIGk9SXIucHVzaChuKTtkcj1uLmlkLFJyW24uaWRdPWktMX0sZmluZFRhc2tCeUlkOkZyLGFkZFRhc2tPcmc6ZnVuY3Rpb24odCxlKXt2YXIgbj17c2VjdGlvbjpfcix0eXBlOl9yLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119LHI9ZnVuY3Rpb24odCxlKXt2YXIgbj0oIjoiPT09ZS5zdWJzdHIoMCwxKT9lLnN1YnN0cigxLGUubGVuZ3RoKTplKS5zcGxpdCgiLCIpLHI9e307VXIobixyLGtyKTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyluW2ldPW5baV0udHJpbSgpO3ZhciBhPSIiO3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAxOnIuaWQ9THIoKSxyLnN0YXJ0VGltZT10LmVuZFRpbWUsYT1uWzBdO2JyZWFrO2Nhc2UgMjpyLmlkPUxyKCksci5zdGFydFRpbWU9T3IoMCxwcixuWzBdKSxhPW5bMV07YnJlYWs7Y2FzZSAzOnIuaWQ9THIoblswXSksci5zdGFydFRpbWU9T3IoMCxwcixuWzFdKSxhPW5bMl19cmV0dXJuIGEmJihyLmVuZFRpbWU9TnIoci5zdGFydFRpbWUscHIsYSxFciksci5tYW51YWxFbmRUaW1lPW8oKShhLCJZWVlZLU1NLUREIiwhMCkuaXNWYWxpZCgpLEFyKHIscHIsdnIpKSxyfShmcixlKTtuLnN0YXJ0VGltZT1yLnN0YXJ0VGltZSxuLmVuZFRpbWU9ci5lbmRUaW1lLG4uaWQ9ci5pZCxuLmFjdGl2ZT1yLmFjdGl2ZSxuLmRvbmU9ci5kb25lLG4uY3JpdD1yLmNyaXQsbi5taWxlc3RvbmU9ci5taWxlc3RvbmUsZnI9bix4ci5wdXNoKG4pfSxzZXRFeGNsdWRlczpmdW5jdGlvbih0KXt2cj10LnRvTG93ZXJDYXNlKCkuc3BsaXQoL1tccyxdKy8pfSxnZXRFeGNsdWRlczpmdW5jdGlvbigpe3JldHVybiB2cn0sc2V0Q2xpY2tFdmVudDpmdW5jdGlvbih0LGUsbil7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUsbil7aWYoImxvb3NlIj09PV90KCkuc2VjdXJpdHlMZXZlbCYmdm9pZCAwIT09ZSl7dmFyIHI9W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtyPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0udHJpbSgpOyciJz09PWEuY2hhckF0KDApJiYnIic9PT1hLmNoYXJBdChhLmxlbmd0aC0xKSYmKGE9YS5zdWJzdHIoMSxhLmxlbmd0aC0yKSkscltpXT1hfX0wPT09ci5sZW5ndGgmJnIucHVzaCh0KSx2b2lkIDAhPT1Gcih0KSYmWXIodCwoZnVuY3Rpb24oKXtWLnJ1bkZ1bmMuYXBwbHkoVixbZV0uY29uY2F0KGhyKHIpKSl9KSl9fSh0LGUsbil9KSksanIodCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbj1lOyJsb29zZSIhPT1fdCgpLnNlY3VyaXR5TGV2ZWwmJihuPU9iamVjdCh5LnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PUZyKHQpJiZZcih0LChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKG4sIl9zZWxmIil9KSl9KSksanIodCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7d3IuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZHVyYXRpb25Ub0RhdGU6QnJ9O2Z1bmN0aW9uIFVyKHQsZSxuKXtmb3IodmFyIHI9ITA7cjspcj0hMSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW5ldyBSZWdFeHAoIl5cXHMqIituKyJcXHMqJCIpO3RbMF0ubWF0Y2goaSkmJihlW25dPSEwLHQuc2hpZnQoMSkscj0hMCl9KSl9dmFyICRyPW4oMjQpLHFyPW4ubigkcik7JHIucGFyc2VyLnl5PXpyO3ZhciBXcixWcj1mdW5jdGlvbigpe30sSHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1fdCgpLmdhbnR0OyRyLnBhcnNlci55eS5jbGVhcigpLCRyLnBhcnNlci5wYXJzZSh0KTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0oV3I9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKFdyPTEyMDApLHZvaWQgMCE9PW4udXNlV2lkdGgmJihXcj1uLnVzZVdpZHRoKTt2YXIgaT0kci5wYXJzZXIueXkuZ2V0VGFza3MoKSxhPWkubGVuZ3RoKihuLmJhckhlaWdodCtuLmJhckdhcCkrMipuLnRvcFBhZGRpbmc7ci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitXcisiICIrYSk7Zm9yKHZhciBvPU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSkscz1PYmplY3QoaC5zY2FsZVRpbWUpKCkuZG9tYWluKFtPYmplY3QoaC5taW4pKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0VGltZX0pKSxPYmplY3QoaC5tYXgpKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZFRpbWV9KSldKS5yYW5nZVJvdW5kKFswLFdyLW4ubGVmdFBhZGRpbmctbi5yaWdodFBhZGRpbmddKSxjPVtdLHU9MDt1PGkubGVuZ3RoO3UrKyljLnB1c2goaVt1XS50eXBlKTt2YXIgbD1jO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufWM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcillLmhhc093blByb3BlcnR5KHRbcl0pfHwoZVt0W3JdXT0hMCxuLnB1c2godFtyXSkpO3JldHVybiBufShjKSxpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zdGFydFRpbWUscj1lLnN0YXJ0VGltZSxpPTA7cmV0dXJuIG4+cj9pPTE6bjxyJiYoaT0tMSksaX0pKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXJIZWlnaHQsYT1pK24uYmFyR2FwLHU9bi50b3BQYWRkaW5nLGQ9bi5sZWZ0UGFkZGluZztPYmplY3QoaC5zY2FsZUxpbmVhcikoKS5kb21haW4oWzAsYy5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKGguaW50ZXJwb2xhdGVIY2wpOyhmdW5jdGlvbih0LGUscixpKXt2YXIgYT1PYmplY3QoaC5heGlzQm90dG9tKShzKS50aWNrU2l6ZSgtaStlK24uZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoT2JqZWN0KGgudGltZUZvcm1hdCkoJHIucGFyc2VyLnl5LmdldEF4aXNGb3JtYXQoKXx8bi5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoby5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKGktNTApKyIpIikuY2FsbChhKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLHpyLnRvcEF4aXNFbmFibGVkKCl8fG4udG9wQXhpcyl7dmFyIGM9T2JqZWN0KGguYXhpc1RvcCkocykudGlja1NpemUoLWkrZStuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KE9iamVjdChoLnRpbWVGb3JtYXQpKCRyLnBhcnNlci55eS5nZXRBeGlzRm9ybWF0KCl8fG4uYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO28uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiK2UrIikiKS5jYWxsKGMpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX0pKGQsdSwwLHIpLGZ1bmN0aW9uKHQsZSxyLGksYSx1LGwpe28uYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrci0yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC1uLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1jW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pKTt2YXIgaD1vLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodCkuZW50ZXIoKTtoLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP3ModC5zdGFydFRpbWUpK2krLjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYTpzKHQuc3RhcnRUaW1lKStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9hOnModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpfSkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG49dC5vcmRlciwocyh0LnN0YXJ0VGltZSkraSsuNSoocyh0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisobiplK3IrLjUqYSkudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoZT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIHI9MCxpPTA7aTxjLmxlbmd0aDtpKyspdC50eXBlPT09Y1tpXSYmKHI9aSVuLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBhPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/YSs9IiBhY3RpdmVDcml0IjphPSIgYWN0aXZlIjp0LmRvbmU/YT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihhKz0iIGNyaXQiKSwwPT09YS5sZW5ndGgmJihhPSIgdGFzayIpLHQubWlsZXN0b25lJiYoYT0iIG1pbGVzdG9uZSAiK2EpLGErPXIsInRhc2siKyhhKz0iICIrZSl9KSksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLG4uZm9udFNpemUpLmF0dHIoIngiLChmdW5jdGlvbih0KXt2YXIgZT1zKHQuc3RhcnRUaW1lKSxyPXModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYoZSs9LjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYSksdC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIG89dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIG8+ci1lP3IrbysxLjUqbi5sZWZ0UGFkZGluZz5sP2UraS01OnIraSs1OihyLWUpLzIrZStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGkpe3JldHVybiB0Lm9yZGVyKmUrbi5iYXJIZWlnaHQvMisobi5mb250U2l6ZS8yLTIpK3J9KSkuYXR0cigidGV4dC1oZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9cyh0LnN0YXJ0VGltZSkscj1zKHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIGk9dGhpcy5nZXRCQm94KCkud2lkdGgsbz0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihvPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgdT0wLGg9MDtoPGMubGVuZ3RoO2grKyl0LnR5cGU9PT1jW2hdJiYodT1oJW4ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGY9IiI7cmV0dXJuIHQuYWN0aXZlJiYoZj10LmNyaXQ/ImFjdGl2ZUNyaXRUZXh0Iit1OiJhY3RpdmVUZXh0Iit1KSx0LmRvbmU/Zj10LmNyaXQ/ZisiIGRvbmVDcml0VGV4dCIrdTpmKyIgZG9uZVRleHQiK3U6dC5jcml0JiYoZj1mKyIgY3JpdFRleHQiK3UpLHQubWlsZXN0b25lJiYoZis9IiBtaWxlc3RvbmVUZXh0IiksaT5yLWU/citpKzEuNSpuLmxlZnRQYWRkaW5nPmw/bysiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIit1KyIgIitmOm8rIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK3UrIiAiK2YrIiB3aWR0aC0iK2k6bysiIHRhc2tUZXh0IHRhc2tUZXh0Iit1KyIgIitmKyIgd2lkdGgtIitpfSkpfSh0LGEsdSxkLGksMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTAsYT0wO2E8Yy5sZW5ndGg7YSsrKXJbYV09W2NbYV0sKHM9Y1thXSx1PWwsZih1KVtzXXx8MCldO3ZhciBzLHU7by5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHIpLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KF8ubGluZUJyZWFrUmVnZXgpLG49LShlLmxlbmd0aC0xKS8yLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtyLnNldEF0dHJpYnV0ZSgiZHkiLG4rImVtIik7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2Euc2V0QXR0cmlidXRlKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIiksYS5zZXRBdHRyaWJ1dGUoIngiLCIxMCIpLGk+MCYmYS5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksYS50ZXh0Q29udGVudD1lW2ldLHIuYXBwZW5kQ2hpbGQoYSl9cmV0dXJuIHJ9KSkuYXR0cigieCIsMTApLmF0dHIoInkiLChmdW5jdGlvbihuLGEpe2lmKCEoYT4wKSlyZXR1cm4gblsxXSp0LzIrZTtmb3IodmFyIG89MDtvPGE7bysrKXJldHVybiBpKz1yW2EtMV1bMV0sblsxXSp0LzIraSp0K2V9KSkuYXR0cigiZm9udC1zaXplIixuLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiZm9udC1zaXplIixuLnNlY3Rpb25Gb250U2l6ZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0WzBdPT09Y1tlXSlyZXR1cm4ic2VjdGlvblRpdGxlIHNlY3Rpb25UaXRsZSIrZSVuLm51bWJlclNlY3Rpb25TdHlsZXM7cmV0dXJuInNlY3Rpb25UaXRsZSJ9KSl9KGEsdSksZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9enIuZ2V0VG9kYXlNYXJrZXIoKTtpZigib2ZmIj09PWEpcmV0dXJuO3ZhciBjPW8uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0b2RheSIpLHU9bmV3IERhdGUsbD1jLmFwcGVuZCgibGluZSIpO2wuYXR0cigieDEiLHModSkrdCkuYXR0cigieDIiLHModSkrdCkuYXR0cigieTEiLG4udGl0bGVUb3BNYXJnaW4pLmF0dHIoInkyIixpLW4udGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidG9kYXkiKSwiIiE9PWEmJmwuYXR0cigic3R5bGUiLGEucmVwbGFjZSgvLC9nLCI7IikpfShkLDAsMCxyKX0oaSxXcixhKSxXKG8sYSxXcixuLnVzZU1heFdpZHRoKSxvLmFwcGVuZCgidGV4dCIpLnRleHQoJHIucGFyc2VyLnl5LmdldFRpdGxlKCkpLmF0dHIoIngiLFdyLzIpLmF0dHIoInkiLG4udGl0bGVUb3BNYXJnaW4pLmF0dHIoImNsYXNzIiwidGl0bGVUZXh0Iil9LEdyPXt9LFhyPW51bGwsWnI9e21hc3RlcjpYcn0sUXI9Im1hc3RlciIsS3I9IkxSIixKcj0wO2Z1bmN0aW9uIHRpKCl7cmV0dXJuIEYoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gZWkodCxlKXtmb3IoYy5kZWJ1ZygiRW50ZXJpbmcgaXNmYXN0Zm9yd2FyZGFibGU6Iix0LmlkLGUuaWQpO3Quc2VxPD1lLnNlcSYmdCE9PWUmJm51bGwhPWUucGFyZW50Oyl7aWYoQXJyYXkuaXNBcnJheShlLnBhcmVudCkpcmV0dXJuIGMuZGVidWcoIkluIG1lcmdlIGNvbW1pdDoiLGUucGFyZW50KSxlaSh0LEdyW2UucGFyZW50WzBdXSl8fGVpKHQsR3JbZS5wYXJlbnRbMV1dKTtlPUdyW2UucGFyZW50XX1yZXR1cm4gYy5kZWJ1Zyh0LmlkLGUuaWQpLHQuaWQ9PT1lLmlkfXZhciBuaT17fTtmdW5jdGlvbiByaSh0LGUsbil7dmFyIHI9dC5pbmRleE9mKGUpOy0xPT09cj90LnB1c2gobik6dC5zcGxpY2UociwxLG4pfWZ1bmN0aW9uIGlpKHQpe3ZhciBlPXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcT90OmV9KSx0WzBdKSxuPSIiO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9dD09PWU/Ilx0KiI6Ilx0fCJ9KSk7dmFyIHIsaSxhLG89W24sZS5pZCxlLnNlcV07Zm9yKHZhciBzIGluIFpyKVpyW3NdPT09ZS5pZCYmby5wdXNoKHMpO2lmKGMuZGVidWcoby5qb2luKCIgIikpLEFycmF5LmlzQXJyYXkoZS5wYXJlbnQpKXt2YXIgdT1HcltlLnBhcmVudFswXV07cmkodCxlLHUpLHQucHVzaChHcltlLnBhcmVudFsxXV0pfWVsc2V7aWYobnVsbD09ZS5wYXJlbnQpcmV0dXJuO3ZhciBsPUdyW2UucGFyZW50XTtyaSh0LGUsbCl9cj10LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9LGE9T2JqZWN0LmNyZWF0ZShudWxsKSxpaSh0PXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWkoZSk7cmV0dXJuIGFbbl18fChhW25dPSEwLHQucHVzaChlKSksdH0pLFtdKSl9dmFyIGFpLG9pPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXMoR3IpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEdyW3RdfSkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2MuZGVidWcodC5pZCl9KSksdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnNlcS10LnNlcX0pKSx0fSxzaT17c2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpe0tyPXR9LHNldE9wdGlvbnM6ZnVuY3Rpb24odCl7Yy5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9KHQ9dCYmdC50cmltKCkpfHwie30iO3RyeXtuaT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe2MuZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsdC5tZXNzYWdlKX19LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gbml9LGNvbW1pdDpmdW5jdGlvbih0KXt2YXIgZT17aWQ6dGkoKSxtZXNzYWdlOnQsc2VxOkpyKysscGFyZW50Om51bGw9PVhyP251bGw6WHIuaWR9O1hyPWUsR3JbZS5pZF09ZSxacltRcl09ZS5pZCxjLmRlYnVnKCJpbiBwdXNoQ29tbWl0ICIrZS5pZCl9LGJyYW5jaDpmdW5jdGlvbih0KXtaclt0XT1udWxsIT1Ycj9Yci5pZDpudWxsLGMuZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSxtZXJnZTpmdW5jdGlvbih0KXt2YXIgZT1HcltacltRcl1dLG49R3JbWnJbdF1dO2lmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxJiZlaShlLHQpfShlLG4pKWMuZGVidWcoIkFscmVhZHkgbWVyZ2VkIik7ZWxzZXtpZihlaShlLG4pKVpyW1FyXT1aclt0XSxYcj1HcltacltRcl1dO2Vsc2V7dmFyIHI9e2lkOnRpKCksbWVzc2FnZToibWVyZ2VkIGJyYW5jaCAiK3QrIiBpbnRvICIrUXIsc2VxOkpyKysscGFyZW50OltudWxsPT1Ycj9udWxsOlhyLmlkLFpyW3RdXX07WHI9cixHcltyLmlkXT1yLFpyW1FyXT1yLmlkfWMuZGVidWcoWnIpLGMuZGVidWcoImluIG1lcmdlQnJhbmNoIil9fSxjaGVja291dDpmdW5jdGlvbih0KXtjLmRlYnVnKCJpbiBjaGVja291dCIpO3ZhciBlPVpyW1FyPXRdO1hyPUdyW2VdfSxyZXNldDpmdW5jdGlvbih0KXtjLmRlYnVnKCJpbiByZXNldCIsdCk7dmFyIGU9dC5zcGxpdCgiOiIpWzBdLG49cGFyc2VJbnQodC5zcGxpdCgiOiIpWzFdKSxyPSJIRUFEIj09PWU/WHI6R3JbWnJbZV1dO2ZvcihjLmRlYnVnKHIsbik7bj4wOylpZihuLS0sIShyPUdyW3IucGFyZW50XSkpe3ZhciBpPSJDcml0aWNhbCBlcnJvciAtIHVuaXF1ZSBwYXJlbnQgY29tbWl0IG5vdCBmb3VuZCBkdXJpbmcgcmVzZXQiO3Rocm93IGMuZXJyb3IoaSksaX1Ycj1yLFpyW1FyXT1yLmlkfSxwcmV0dHlQcmludDpmdW5jdGlvbigpe2MuZGVidWcoR3IpLGlpKFtvaSgpWzBdXSl9LGNsZWFyOmZ1bmN0aW9uKCl7R3I9e30sWnI9e21hc3RlcjpYcj1udWxsfSxRcj0ibWFzdGVyIixKcj0wfSxnZXRCcmFuY2hlc0FzT2JqQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gWnIpdC5wdXNoKHtuYW1lOmUsY29tbWl0OkdyW1pyW2VdXX0pO3JldHVybiB0fSxnZXRCcmFuY2hlczpmdW5jdGlvbigpe3JldHVybiBacn0sZ2V0Q29tbWl0czpmdW5jdGlvbigpe3JldHVybiBHcn0sZ2V0Q29tbWl0c0FycmF5Om9pLGdldEN1cnJlbnRCcmFuY2g6ZnVuY3Rpb24oKXtyZXR1cm4gUXJ9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBLcn0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiBYcn19LGNpPW4oNzIpLHVpPW4ubihjaSksbGk9e30saGk9e25vZGVTcGFjaW5nOjE1MCxub2RlRmlsbENvbG9yOiJ5ZWxsb3ciLG5vZGVTdHJva2VXaWR0aDoyLG5vZGVTdHJva2VDb2xvcjoiZ3JleSIsbGluZVN0cm9rZVdpZHRoOjQsYnJhbmNoT2Zmc2V0OjUwLGxpbmVDb2xvcjoiZ3JleSIsbGVmdE1hcmdpbjo1MCxicmFuY2hDb2xvcnM6WyIjNDQyZjc0IiwiIzk4MzM1MSIsIiM2MDk3MzIiLCIjQUE5QTM5Il0sbm9kZVJhZGl1czoxMCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfX0sZmk9e307ZnVuY3Rpb24gZGkodCxlLG4scil7dmFyIGk9TihyLGguY3VydmVCYXNpcyksYT1oaS5icmFuY2hDb2xvcnNbbiVoaS5icmFuY2hDb2xvcnMubGVuZ3RoXSxvPU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC54KX0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0LnkpfSkpLmN1cnZlKGkpO3QuYXBwZW5kKCJzdmc6cGF0aCIpLmF0dHIoImQiLG8oZSkpLnN0eWxlKCJzdHJva2UiLGEpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGhpLmxpbmVTdHJva2VXaWR0aCkuc3R5bGUoImZpbGwiLCJub25lIil9ZnVuY3Rpb24gcGkodCxlKXtlPWV8fHQubm9kZSgpLmdldEJCb3goKTt2YXIgbj10Lm5vZGUoKS5nZXRDVE0oKTtyZXR1cm57bGVmdDpuLmUrZS54Km4uYSx0b3A6bi5mK2UueSpuLmQsd2lkdGg6ZS53aWR0aCxoZWlnaHQ6ZS5oZWlnaHR9fWZ1bmN0aW9uIHlpKHQsZSxuLHIsaSl7Yy5kZWJ1Zygic3ZnRHJhd0xpbmVGb3JDb21taXRzOiAiLGUsbik7dmFyIGE9cGkodC5zZWxlY3QoIiNub2RlLSIrZSsiIGNpcmNsZSIpKSxvPXBpKHQuc2VsZWN0KCIjbm9kZS0iK24rIiBjaXJjbGUiKSk7c3dpdGNoKHIpe2Nhc2UiTFIiOmlmKGEubGVmdC1vLmxlZnQ+aGkubm9kZVNwYWNpbmcpe3ZhciBzPXt4OmEubGVmdC1oaS5ub2RlU3BhY2luZyx5Om8udG9wK28uaGVpZ2h0LzJ9O2RpKHQsW3Mse3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSwibGluZWFyIiksZGkodCxbe3g6YS5sZWZ0LHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LWhpLm5vZGVTcGFjaW5nLzIseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtaGkubm9kZVNwYWNpbmcvMix5OnMueX0sc10saSl9ZWxzZSBkaSh0LFt7eDphLmxlZnQseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtaGkubm9kZVNwYWNpbmcvMix5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC1oaS5ub2RlU3BhY2luZy8yLHk6by50b3Arby5oZWlnaHQvMn0se3g6by5sZWZ0K28ud2lkdGgseTpvLnRvcCtvLmhlaWdodC8yfV0saSk7YnJlYWs7Y2FzZSJCVCI6aWYoby50b3AtYS50b3A+aGkubm9kZVNwYWNpbmcpe3ZhciB1PXt4Om8ubGVmdCtvLndpZHRoLzIseTphLnRvcCthLmhlaWdodCtoaS5ub2RlU3BhY2luZ307ZGkodCxbdSx7eDpvLmxlZnQrby53aWR0aC8yLHk6by50b3B9XSxpLCJsaW5lYXIiKSxkaSh0LFt7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHR9LHt4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodCtoaS5ub2RlU3BhY2luZy8yfSx7eDpvLmxlZnQrby53aWR0aC8yLHk6dS55LWhpLm5vZGVTcGFjaW5nLzJ9LHVdLGkpfWVsc2UgZGkodCxbe3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0fSx7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3AraGkubm9kZVNwYWNpbmcvMn0se3g6by5sZWZ0K28ud2lkdGgvMix5Om8udG9wLWhpLm5vZGVTcGFjaW5nLzJ9LHt4Om8ubGVmdCtvLndpZHRoLzIseTpvLnRvcH1dLGkpfX1mdW5jdGlvbiBnaSh0LGUpe3JldHVybiB0LnNlbGVjdChlKS5ub2RlKCkuY2xvbmVOb2RlKCEwKX1mdW5jdGlvbiB2aSh0LGUsbixyKXt2YXIgaSxhPU9iamVjdC5rZXlzKGxpKS5sZW5ndGg7aWYoInN0cmluZyI9PXR5cGVvZiBlKWRve2lmKGk9bGlbZV0sYy5kZWJ1ZygiaW4gcmVuZGVyQ29tbWl0SGlzdG9yeSIsaS5pZCxpLnNlcSksdC5zZWxlY3QoIiNub2RlLSIrZSkuc2l6ZSgpPjApcmV0dXJuO3QuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBnaSh0LCIjZGVmLWNvbW1pdCIpfSkpLmF0dHIoImNsYXNzIiwiY29tbWl0IikuYXR0cigiaWQiLChmdW5jdGlvbigpe3JldHVybiJub2RlLSIraS5pZH0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbigpe3N3aXRjaChyKXtjYXNlIkxSIjpyZXR1cm4idHJhbnNsYXRlKCIrKGkuc2VxKmhpLm5vZGVTcGFjaW5nK2hpLmxlZnRNYXJnaW4pKyIsICIrYWkqaGkuYnJhbmNoT2Zmc2V0KyIpIjtjYXNlIkJUIjpyZXR1cm4idHJhbnNsYXRlKCIrKGFpKmhpLmJyYW5jaE9mZnNldCtoaS5sZWZ0TWFyZ2luKSsiLCAiKyhhLWkuc2VxKSpoaS5ub2RlU3BhY2luZysiKSJ9fSkpLmF0dHIoImZpbGwiLGhpLm5vZGVGaWxsQ29sb3IpLmF0dHIoInN0cm9rZSIsaGkubm9kZVN0cm9rZUNvbG9yKS5hdHRyKCJzdHJva2Utd2lkdGgiLGhpLm5vZGVTdHJva2VXaWR0aCk7dmFyIG89dm9pZCAwO2Zvcih2YXIgcyBpbiBuKWlmKG5bc10uY29tbWl0PT09aSl7bz1uW3NdO2JyZWFrfW8mJihjLmRlYnVnKCJmb3VuZCBicmFuY2ggIixvLm5hbWUpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJicmFuY2gtbGFiZWwiKS50ZXh0KG8ubmFtZSsiLCAiKSksdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1pZCIpLnRleHQoaS5pZCksIiIhPT1pLm1lc3NhZ2UmJiJCVCI9PT1yJiZ0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiY29tbWl0LW1zZyIpLnRleHQoIiwgIitpLm1lc3NhZ2UpLGU9aS5wYXJlbnR9d2hpbGUoZSYmbGlbZV0pO0FycmF5LmlzQXJyYXkoZSkmJihjLmRlYnVnKCJmb3VuZCBtZXJnZSBjb21tbWl0IixlKSx2aSh0LGVbMF0sbixyKSxhaSsrLHZpKHQsZVsxXSxuLHIpLGFpLS0pfWZ1bmN0aW9uIG1pKHQsZSxuLHIpe2ZvcihyPXJ8fDA7ZS5zZXE+MCYmIWUubGluZURyYXduOykic3RyaW5nIj09dHlwZW9mIGUucGFyZW50Pyh5aSh0LGUuaWQsZS5wYXJlbnQsbixyKSxlLmxpbmVEcmF3bj0hMCxlPWxpW2UucGFyZW50XSk6QXJyYXkuaXNBcnJheShlLnBhcmVudCkmJih5aSh0LGUuaWQsZS5wYXJlbnRbMF0sbixyKSx5aSh0LGUuaWQsZS5wYXJlbnRbMV0sbixyKzEpLG1pKHQsbGlbZS5wYXJlbnRbMV1dLG4scisxKSxlLmxpbmVEcmF3bj0hMCxlPWxpW2UucGFyZW50WzBdXSl9dmFyIGJpLHhpPWZ1bmN0aW9uKHQpe2ZpPXR9LF9pPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9dWkuYS5wYXJzZXI7ci55eT1zaSxyLnl5LmNsZWFyKCksYy5kZWJ1ZygiaW4gZ2l0Z3JhcGggcmVuZGVyZXIiLHQrIlxuIiwiaWQ6IixlLG4pLHIucGFyc2UodCsiXG4iKSxoaT1PYmplY3QuYXNzaWduKGhpLGZpLHNpLmdldE9wdGlvbnMoKSksYy5kZWJ1ZygiZWZmZWN0aXZlIG9wdGlvbnMiLGhpKTt2YXIgaT1zaS5nZXREaXJlY3Rpb24oKTtsaT1zaS5nZXRDb21taXRzKCk7dmFyIGE9c2kuZ2V0QnJhbmNoZXNBc09iakFycmF5KCk7IkJUIj09PWkmJihoaS5ub2RlTGFiZWwueD1hLmxlbmd0aCpoaS5icmFuY2hPZmZzZXQsaGkubm9kZUxhYmVsLndpZHRoPSIxMDAlIixoaS5ub2RlTGFiZWwueT0tMipoaS5ub2RlUmFkaXVzKTt2YXIgbz1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO2Zvcih2YXIgcyBpbiBmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgiZyIpLmF0dHIoImlkIiwiZGVmLWNvbW1pdCIpLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsaGkubm9kZVJhZGl1cykuYXR0cigiY3giLDApLmF0dHIoImN5IiwwKSx0LnNlbGVjdCgiI2RlZi1jb21taXQiKS5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ3aWR0aCIsaGkubm9kZUxhYmVsLndpZHRoKS5hdHRyKCJoZWlnaHQiLGhpLm5vZGVMYWJlbC5oZWlnaHQpLmF0dHIoIngiLGhpLm5vZGVMYWJlbC54KS5hdHRyKCJ5IixoaS5ub2RlTGFiZWwueSkuYXR0cigiY2xhc3MiLCJub2RlLWxhYmVsIikuYXR0cigicmVxdWlyZWRGZWF0dXJlcyIsImh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZlYXR1cmUjRXh0ZW5zaWJpbGl0eSIpLmFwcGVuZCgicCIpLmh0bWwoIiIpfShvKSxhaT0xLGEpe3ZhciB1PWFbc107dmkobyx1LmNvbW1pdC5pZCxhLGkpLG1pKG8sdS5jb21taXQsaSksYWkrK31vLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIkJUIj09PWk/T2JqZWN0LmtleXMobGkpLmxlbmd0aCpoaS5ub2RlU3BhY2luZzooYS5sZW5ndGgrMSkqaGkuYnJhbmNoT2Zmc2V0fSkpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBnaXRncmFwaCIpLGMuZXJyb3IodC5tZXNzYWdlKX19LGtpPSIiLHdpPSExLEVpPXtzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2MuZGVidWcoIlNldHRpbmcgbWVzc2FnZSB0bzogIit0KSxraT10fSxnZXRNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIGtpfSxzZXRJbmZvOmZ1bmN0aW9uKHQpe3dpPXR9LGdldEluZm86ZnVuY3Rpb24oKXtyZXR1cm4gd2l9fSxUaT1uKDczKSxDaT1uLm4oVGkpLFNpPXt9LEFpPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe1NpW2VdPXRbZV19KSl9LE1pPWZ1bmN0aW9uKHQsZSxuKXt0cnl7dmFyIHI9Q2kuYS5wYXJzZXI7ci55eT1FaSxjLmRlYnVnKCJSZW5lcmluZyBpbmZvIGRpYWdyYW1cbiIrdCksci5wYXJzZSh0KSxjLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIGk9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSk7aS5hcHBlbmQoImciKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwxMDApLmF0dHIoInkiLDQwKS5hdHRyKCJjbGFzcyIsInZlcnNpb24iKS5hdHRyKCJmb250LXNpemUiLCIzMnB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgidiAiK24pLGkuYXR0cigiaGVpZ2h0IiwxMDApLGkuYXR0cigid2lkdGgiLDQwMCl9Y2F0Y2godCl7Yy5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbSIpLGMuZXJyb3IodC5tZXNzYWdlKX19LE9pPW4oNzQpLEJpPW4ubihPaSksTmk9e30sRGk9IiIsTGk9ITEsSWk9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt2cy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkucGllfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09TmlbdF0mJihOaVt0XT1lLGMuZGVidWcoIkFkZGVkIG5ldyBzZWN0aW9uIDoiLHQpKX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gTml9LGNsZWFudXBWYWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4iOiI9PT10LnN1YnN0cmluZygwLDEpPyh0PXQuc3Vic3RyaW5nKDEpLnRyaW0oKSxOdW1iZXIodC50cmltKCkpKTpOdW1iZXIodC50cmltKCkpfSxjbGVhcjpmdW5jdGlvbigpe05pPXt9LERpPSIiLExpPSExfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtEaT10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBEaX0sc2V0U2hvd0RhdGE6ZnVuY3Rpb24odCl7TGk9dH0sZ2V0U2hvd0RhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gTGl9fSxSaT1fdCgpLEZpPWZ1bmN0aW9uKHQsZSl7dHJ5e1JpPV90KCk7dmFyIG49QmkuYS5wYXJzZXI7bi55eT1JaSxjLmRlYnVnKCJSZW5kZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpLG4ueXkuY2xlYXIoKSxuLnBhcnNlKHQpLGMuZGVidWcoIlBhcnNlZCBpbmZvIGRpYWdyYW0iKTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0oYmk9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKGJpPTEyMDApLHZvaWQgMCE9PVJpLnVzZVdpZHRoJiYoYmk9UmkudXNlV2lkdGgpLHZvaWQgMCE9PVJpLnBpZS51c2VXaWR0aCYmKGJpPVJpLnBpZS51c2VXaWR0aCk7dmFyIGk9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSk7VyhpLDQ1MCxiaSxSaS5waWUudXNlTWF4V2lkdGgpLHIuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IiwiMCAwICIrYmkrIiA0NTAiKTt2YXIgYT1NYXRoLm1pbihiaSw0NTApLzItNDAsbz1pLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2JpLzIrIiwyMjUpIikscz1JaS5nZXRTZWN0aW9ucygpLHU9MDtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXt1Kz1zW3RdfSkpO3ZhciBsPVJpLnRoZW1lVmFyaWFibGVzLGY9W2wucGllMSxsLnBpZTIsbC5waWUzLGwucGllNCxsLnBpZTUsbC5waWU2LGwucGllNyxsLnBpZTgsbC5waWU5LGwucGllMTAsbC5waWUxMSxsLnBpZTEyXSxkPU9iamVjdChoLnNjYWxlT3JkaW5hbCkoKS5kb21haW4ocykucmFuZ2UoZikscD1PYmplY3QoaC5waWUpKCkudmFsdWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlfSkpKE9iamVjdChoLmVudHJpZXMpKHMpKSx5PU9iamVjdChoLmFyYykoKS5pbm5lclJhZGl1cygwKS5vdXRlclJhZGl1cyhhKTtvLnNlbGVjdEFsbCgibXlTbGljZXMiKS5kYXRhKHApLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIseSkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiBkKHQuZGF0YS5rZXkpfSkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIiksby5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmRhdGEudmFsdWV9KSkpLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuZGF0YS52YWx1ZS91KjEwMCkudG9GaXhlZCgwKSsiJSJ9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuInRyYW5zbGF0ZSgiK3kuY2VudHJvaWQodCkrIikifSkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImNsYXNzIiwic2xpY2UiKSxvLmFwcGVuZCgidGV4dCIpLnRleHQobi55eS5nZXRUaXRsZSgpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwtMjAwKS5hdHRyKCJjbGFzcyIsInBpZVRpdGxlVGV4dCIpO3ZhciBnPW8uc2VsZWN0QWxsKCIubGVnZW5kIikuZGF0YShkLmRvbWFpbigpKS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGVnZW5kIikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4idHJhbnNsYXRlKDIxNiwiKygyMiplLTIyKmQuZG9tYWluKCkubGVuZ3RoLzIpKyIpIn0pKTtnLmFwcGVuZCgicmVjdCIpLmF0dHIoIndpZHRoIiwxOCkuYXR0cigiaGVpZ2h0IiwxOCkuc3R5bGUoImZpbGwiLGQpLnN0eWxlKCJzdHJva2UiLGQpLGcuZGF0YShwLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10LmRhdGEudmFsdWV9KSkpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDIyKS5hdHRyKCJ5IiwxNCkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIG4ueXkuZ2V0U2hvd0RhdGEoKXx8Umkuc2hvd0RhdGF8fFJpLnBpZS5zaG93RGF0YT90LmRhdGEua2V5KyIgWyIrdC5kYXRhLnZhbHVlKyJdIjp0LmRhdGEua2V5fSkpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxjLmVycm9yKHQpfX0sUGk9big0NSksamk9bi5uKFBpKSxZaT1bXSx6aT17fSxVaT17fSwkaT17fSxxaT17fSxXaT17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7dnMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBfdCgpLnJlcX0sYWRkUmVxdWlyZW1lbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09VWlbdF0mJihVaVt0XT17bmFtZTp0LHR5cGU6ZSxpZDp6aS5pZCx0ZXh0OnppLnRleHQscmlzazp6aS5yaXNrLHZlcmlmeU1ldGhvZDp6aS52ZXJpZnlNZXRob2R9KSx6aT17fSxVaVt0XX0sZ2V0UmVxdWlyZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIFVpfSxzZXROZXdSZXFJZDpmdW5jdGlvbih0KXt2b2lkIDAhPT16aSYmKHppLmlkPXQpfSxzZXROZXdSZXFUZXh0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXppJiYoemkudGV4dD10KX0sc2V0TmV3UmVxUmlzazpmdW5jdGlvbih0KXt2b2lkIDAhPT16aSYmKHppLnJpc2s9dCl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDpmdW5jdGlvbih0KXt2b2lkIDAhPT16aSYmKHppLnZlcmlmeU1ldGhvZD10KX0sYWRkRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09cWlbdF0mJihxaVt0XT17bmFtZTp0LHR5cGU6JGkudHlwZSxkb2NSZWY6JGkuZG9jUmVmfSxjLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KSksJGk9e30scWlbdF19LGdldEVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHFpfSxzZXROZXdFbGVtZW50VHlwZTpmdW5jdGlvbih0KXt2b2lkIDAhPT0kaSYmKCRpLnR5cGU9dCl9LHNldE5ld0VsZW1lbnREb2NSZWY6ZnVuY3Rpb24odCl7dm9pZCAwIT09JGkmJigkaS5kb2NSZWY9dCl9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbil7WWkucHVzaCh7dHlwZTp0LHNyYzplLGRzdDpufSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gWWl9LGNsZWFyOmZ1bmN0aW9uKCl7WWk9W10semk9e30sVWk9e30sJGk9e30scWk9e319fSxWaT17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxIaT1WaSxHaT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsVmkuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGUubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGUubGluZV9oZWlnaHQpLmF0dHIoInkxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGUubGluZV9oZWlnaHQpLmF0dHIoIngxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixWaS5BUlJPVysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsZS5saW5lX2hlaWdodCkuYXR0cigicmVmWSIsLjUqZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwXG4gICAgICBMIi5jb25jYXQoZS5saW5lX2hlaWdodCwiLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LzIsIlxuICAgICAgTSIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LCIsIikuY29uY2F0KGUubGluZV9oZWlnaHQvMiwiXG4gICAgICBMMCwiKS5jb25jYXQoZS5saW5lX2hlaWdodCkpLmF0dHIoInN0cm9rZS13aWR0aCIsMSl9LFhpPXt9LFppPTAsUWk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCIjIitlKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsWGkucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixYaS5yZWN0X21pbl9oZWlnaHQrInB4Iil9LEtpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1YaS5yZWN0X21pbl93aWR0aC8yLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixYaS5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MDtuLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PWE/aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixYaS5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dCh0KTppLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLFhpLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IiwuNzUqWGkubGluZV9oZWlnaHQpLnRleHQodCksYSsrfSkpO3ZhciBvPTEuNSpYaS5yZWN0X3BhZGRpbmcrYSpYaS5saW5lX2hlaWdodCouNzU7cmV0dXJuIHQuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJyZXEtdGl0bGUtbGluZSIpLmF0dHIoIngxIiwiMCIpLmF0dHIoIngyIixYaS5yZWN0X21pbl93aWR0aCkuYXR0cigieTEiLG8pLmF0dHIoInkyIixvKSx7dGl0bGVOb2RlOmkseTpvfX0sSmk9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixYaS5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLHIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MCxvPVtdO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlPjMwJiZhPDM7KXt2YXIgbj10LnN1YnN0cmluZygwLDMwKTtlPSh0PXQuc3Vic3RyaW5nKDMwLHQubGVuZ3RoKSkubGVuZ3RoLG9bby5sZW5ndGhdPW4sYSsrfWlmKDM9PWEpe3ZhciByPW9bby5sZW5ndGgtMV07b1tvLmxlbmd0aC0xXT1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTQpKyIuLi4ifWVsc2Ugb1tvLmxlbmd0aF09dDthPTB9KSksby5mb3JFYWNoKChmdW5jdGlvbih0KXtpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixYaS5yZWN0X3BhZGRpbmcpLmF0dHIoImR5IixYaS5saW5lX2hlaWdodCkudGV4dCh0KX0pKSxpfSx0YT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLmVkZ2UoZWEoZS5zcmMpLGVhKGUuZHN0KSksYT1PYmplY3QoaC5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKSxvPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsYShpLnBvaW50cykpLmF0dHIoImZpbGwiLCJub25lIik7ZS50eXBlPT1XaS5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP28uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrXy5nZXRVcmwoWGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK2UudHlwZSsiX2xpbmVfZW5kaW5nKSIpOihvLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCIxMCw3Iiksby5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrXy5nZXRVcmwoWGkuYXJyb3dNYXJrZXJBYnNvbHV0ZSkrIiMiK0hpLkFSUk9XKyJfbGluZV9lbmRpbmcpIikpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWUubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCksYT1lLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKC41KmkpLG89InJlbCIrWmk7WmkrKzt2YXIgcz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwicmVxIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLG8pLmF0dHIoIngiLGEueCkuYXR0cigieSIsYS55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikudGV4dChyKS5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiIyIrbykuYXR0cigiY2xhc3MiLCJyZXEgcmVxTGFiZWxCb3giKS5hdHRyKCJ4IixhLngtcy53aWR0aC8yKS5hdHRyKCJ5IixhLnktcy5oZWlnaHQvMikuYXR0cigid2lkdGgiLHMud2lkdGgpLmF0dHIoImhlaWdodCIscy5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfSh0LG8sMCwiPDwiLmNvbmNhdChlLnR5cGUsIj4+IikpfSxlYT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9ccy9nLCIiKS5yZXBsYWNlKC9cLi9nLCJfIil9LG5hPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpZm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylYaVtlW25dXT10W2Vbbl1dfSxyYT1mdW5jdGlvbih0LGUpe1BpLnBhcnNlci55eT1XaSxQaS5wYXJzZXIueXkuY2xlYXIoKSxQaS5wYXJzZXIucGFyc2UodCk7dmFyIG49T2JqZWN0KGguc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtHaShuLFhpKTt2YXIgcixpLGEsbz1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMSxjb21wb3VuZDohMSxkaXJlY3RlZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOlhpLmxheW91dERpcmVjdGlvbixtYXJnaW54OjIwLG1hcmdpbnk6MjAsbm9kZXNlcDoxMDAsZWRnZXNlcDoxMDAscmFua3NlcDoxMDB9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLHM9V2kuZ2V0UmVxdWlyZW1lbnRzKCksdT1XaS5nZXRFbGVtZW50cygpLGw9V2kuZ2V0UmVsYXRpb25zaGlwcygpO3I9cyxpPW8sYT1uLE9iamVjdC5rZXlzKHIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07dD1lYSh0KSxjLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KTt2YXIgbj1hLmFwcGVuZCgiZyIpLmF0dHIoImlkIix0KSxvPVFpKG4sInJlcS0iK3QpLHM9W10sdT1LaShuLHQrIl90aXRsZSIsWyI8PCIuY29uY2F0KGUudHlwZSwiPj4iKSwiIi5jb25jYXQoZS5uYW1lKV0pO3MucHVzaCh1LnRpdGxlTm9kZSk7dmFyIGw9Smkobix0KyJfYm9keSIsWyJJZDogIi5jb25jYXQoZS5pZCksIlRleHQ6ICIuY29uY2F0KGUudGV4dCksIlJpc2s6ICIuY29uY2F0KGUucmlzayksIlZlcmlmaWNhdGlvbjogIi5jb25jYXQoZS52ZXJpZnlNZXRob2QpXSx1LnkpO3MucHVzaChsKTt2YXIgaD1vLm5vZGUoKS5nZXRCQm94KCk7aS5zZXROb2RlKHQse3dpZHRoOmgud2lkdGgsaGVpZ2h0OmguaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDp0fSl9KSksZnVuY3Rpb24odCxlLG4pe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPXRbcl0sYT1lYShyKSxvPW4uYXBwZW5kKCJnIikuYXR0cigiaWQiLGEpLHM9ImVsZW1lbnQtIithLGM9UWkobyxzKSx1PVtdLGw9S2kobyxzKyJfdGl0bGUiLFsiPDxFbGVtZW50Pj4iLCIiLmNvbmNhdChyKV0pO3UucHVzaChsLnRpdGxlTm9kZSk7dmFyIGg9SmkobyxzKyJfYm9keSIsWyJUeXBlOiAiLmNvbmNhdChpLnR5cGV8fCJOb3QgU3BlY2lmaWVkIiksIkRvYyBSZWY6ICIuY29uY2F0KGkuZG9jUmVmfHwiTm9uZSIpXSxsLnkpO3UucHVzaChoKTt2YXIgZj1jLm5vZGUoKS5nZXRCQm94KCk7ZS5zZXROb2RlKGEse3dpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0LHNoYXBlOiJyZWN0IixpZDphfSl9KSl9KHUsbyxuKSxmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZWEodC5zcmMpLHI9ZWEodC5kc3QpO2Uuc2V0RWRnZShuLHIse3JlbGF0aW9uc2hpcDp0fSl9KSl9KGwsbyksWXQuYS5sYXlvdXQobyksZnVuY3Rpb24odCxlKXtlLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24obil7dm9pZCAwIT09biYmdm9pZCAwIT09ZS5ub2RlKG4pJiYodC5zZWxlY3QoIiMiK24pLHQuc2VsZWN0KCIjIituKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoZS5ub2RlKG4pLngtZS5ub2RlKG4pLndpZHRoLzIpKyIsIisoZS5ub2RlKG4pLnktZS5ub2RlKG4pLmhlaWdodC8yKSsiICkiKSl9KSl9KG4sbyksbC5mb3JFYWNoKChmdW5jdGlvbih0KXt0YShuLHQsbyxlKX0pKTt2YXIgZj1YaS5yZWN0X3BhZGRpbmcsZD1uLm5vZGUoKS5nZXRCQm94KCkscD1kLndpZHRoKzIqZix5PWQuaGVpZ2h0KzIqZjtXKG4seSxwLFhpLnVzZU1heFdpZHRoKSxuLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChkLngtZiwiICIpLmNvbmNhdChkLnktZiwiICIpLmNvbmNhdChwLCIgIikuY29uY2F0KHkpKX0saWE9bigyKSxhYT1uLm4oaWEpLG9hPXZvaWQgMCxzYT17fSxjYT1bXSx1YT1bXSxsYT0iIixoYT0hMSxmYT0hMSxkYT0hMSxwYT1mdW5jdGlvbih0LGUsbil7dmFyIHI9c2FbdF07ciYmZT09PXIubmFtZSYmbnVsbD09bnx8KG51bGwhPW4mJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGx9KSxzYVt0XT17bmFtZTplLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAscHJldkFjdG9yOm9hfSxvYSYmc2Fbb2FdJiYoc2Fbb2FdLm5leHRBY3Rvcj10KSxvYT10KX0seWE9ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxjYS5sZW5ndGg7ZSsrKWNhW2VdLnR5cGU9PT1tYS5BQ1RJVkVfU1RBUlQmJmNhW2VdLmZyb20uYWN0b3I9PT10JiZuKyssY2FbZV0udHlwZT09PW1hLkFDVElWRV9FTkQmJmNhW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LGdhPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09bWEuQUNUSVZFX0VORCl7dmFyIGk9eWEodC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiBjYS5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LHZhPWZ1bmN0aW9uKCl7cmV0dXJuIGRhfSxtYT17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjV9LGJhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17YWN0b3I6dCxwbGFjZW1lbnQ6ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXB9LGk9W10uY29uY2F0KHQsdCk7dWEucHVzaChyKSxjYS5wdXNoKHtmcm9tOmlbMF0sdG86aVsxXSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAsdHlwZTptYS5OT1RFLHBsYWNlbWVudDplfSl9LHhhPWZ1bmN0aW9uKHQpe2xhPXQudGV4dCxoYT12b2lkIDA9PT10LndyYXAmJnZhKCl8fCEhdC53cmFwfSxfYT17YWRkQWN0b3I6cGEsYWRkTWVzc2FnZTpmdW5jdGlvbih0LGUsbixyKXtjYS5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmdmEoKXx8ISFuLndyYXAsYW5zd2VyOnJ9KX0sYWRkU2lnbmFsOmdhLGF1dG9XcmFwOnZhLHNldFdyYXA6ZnVuY3Rpb24odCl7ZGE9dH0sZW5hYmxlU2VxdWVuY2VOdW1iZXJzOmZ1bmN0aW9uKCl7ZmE9ITB9LHNob3dTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gZmF9LGdldE1lc3NhZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGNhfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gc2F9LGdldEFjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiBzYVt0XX0sZ2V0QWN0b3JLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHNhKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gbGF9LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt2cy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIF90KCkuc2VxdWVuY2V9LGdldFRpdGxlV3JhcHBlZDpmdW5jdGlvbigpe3JldHVybiBoYX0sY2xlYXI6ZnVuY3Rpb24oKXtzYT17fSxjYT1bXX0scGFyc2VNZXNzYWdlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49e3RleHQ6ZS5yZXBsYWNlKC9eWzpdPyg/Om5vKT93cmFwOi8sIiIpLnRyaW0oKSx3cmFwOm51bGwhPT1lLm1hdGNoKC9eWzpdP3dyYXA6Lyl8fG51bGw9PT1lLm1hdGNoKC9eWzpdP25vd3JhcDovKSYmdm9pZCAwfTtyZXR1cm4gYy5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsbiksbn0sTElORVRZUEU6bWEsQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sYWRkTm90ZTpiYSxzZXRUaXRsZTp4YSxhcHBseTpmdW5jdGlvbiB0KGUpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSllLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QoZSl9KSk7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImFkZEFjdG9yIjpwYShlLmFjdG9yLGUuYWN0b3IsZS5kZXNjcmlwdGlvbik7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6Y2FzZSJhY3RpdmVFbmQiOmdhKGUuYWN0b3Isdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6YmEoZS5hY3RvcixlLnBsYWNlbWVudCxlLnRleHQpO2JyZWFrO2Nhc2UiYWRkTWVzc2FnZSI6Z2EoZS5mcm9tLGUudG8sZS5tc2csZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BTdGFydCI6Z2Eodm9pZCAwLHZvaWQgMCxlLmxvb3BUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjpnYSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0IjpnYSh2b2lkIDAsdm9pZCAwLGUuY29sb3IsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOmdhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6Z2Eodm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6Z2Eodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpjYXNlImVsc2UiOmdhKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRFbmQiOmdhKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRUaXRsZSI6eGEoZS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpjYXNlImFuZCI6Z2Eodm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6Z2Eodm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKX19fSxrYT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIG4uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJ3aWR0aCIsZS53aWR0aCksbi5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxuLmF0dHIoInJ4IixlLnJ4KSxuLmF0dHIoInJ5IixlLnJ5KSx2b2lkIDAhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSx3YT1mdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wLGk9ZS50ZXh0LnNwbGl0KF8ubGluZUJyZWFrUmVnZXgpLGE9W10sbz0wLHM9ZnVuY3Rpb24oKXtyZXR1cm4gZS55fTtpZih2b2lkIDAhPT1lLnZhbGlnbiYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZlLnRleHRNYXJnaW4+MClzd2l0Y2goZS52YWxpZ24pe2Nhc2UidG9wIjpjYXNlInN0YXJ0IjpzPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucm91bmQoZS55K2UudGV4dE1hcmdpbil9O2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityK2UudGV4dE1hcmdpbikvMil9O2JyZWFrO2Nhc2UiYm90dG9tIjpjYXNlImVuZCI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueSsobityKzIqZS50ZXh0TWFyZ2luKS1lLnRleHRNYXJnaW4pfX1pZih2b2lkIDAhPT1lLmFuY2hvciYmdm9pZCAwIT09ZS50ZXh0TWFyZ2luJiZ2b2lkIDAhPT1lLndpZHRoKXN3aXRjaChlLmFuY2hvcil7Y2FzZSJsZWZ0IjpjYXNlInN0YXJ0IjplLng9TWF0aC5yb3VuZChlLngrZS50ZXh0TWFyZ2luKSxlLmFuY2hvcj0ic3RhcnQiLGUuZG9taW5hbnRCYXNlbGluZT0idGV4dC1hZnRlci1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UibWlkZGxlIjpjYXNlImNlbnRlciI6ZS54PU1hdGgucm91bmQoZS54K2Uud2lkdGgvMiksZS5hbmNob3I9Im1pZGRsZSIsZS5kb21pbmFudEJhc2VsaW5lPSJtaWRkbGUiLGUuYWxpZ25tZW50QmFzZWxpbmU9Im1pZGRsZSI7YnJlYWs7Y2FzZSJyaWdodCI6Y2FzZSJlbmQiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLWUudGV4dE1hcmdpbiksZS5hbmNob3I9ImVuZCIsZS5kb21pbmFudEJhc2VsaW5lPSJ0ZXh0LWJlZm9yZS1lZGdlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUifWZvcih2YXIgYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdO3ZvaWQgMCE9PWUudGV4dE1hcmdpbiYmMD09PWUudGV4dE1hcmdpbiYmdm9pZCAwIT09ZS5mb250U2l6ZSYmKG89YyplLmZvbnRTaXplKTt2YXIgbD10LmFwcGVuZCgidGV4dCIpO2lmKGwuYXR0cigieCIsZS54KSxsLmF0dHIoInkiLHMoKSksdm9pZCAwIT09ZS5hbmNob3ImJmwuYXR0cigidGV4dC1hbmNob3IiLGUuYW5jaG9yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsZS5kb21pbmFudEJhc2VsaW5lKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLGUuYWxpZ25tZW50QmFzZWxpbmUpLHZvaWQgMCE9PWUuZm9udEZhbWlseSYmbC5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksdm9pZCAwIT09ZS5mb250U2l6ZSYmbC5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSx2b2lkIDAhPT1lLmZvbnRXZWlnaHQmJmwuc3R5bGUoImZvbnQtd2VpZ2h0IixlLmZvbnRXZWlnaHQpLHZvaWQgMCE9PWUuZmlsbCYmbC5hdHRyKCJmaWxsIixlLmZpbGwpLHZvaWQgMCE9PWUuY2xhc3MmJmwuYXR0cigiY2xhc3MiLGUuY2xhc3MpLHZvaWQgMCE9PWUuZHk/bC5hdHRyKCJkeSIsZS5keSk6MCE9PW8mJmwuYXR0cigiZHkiLG8pLGUudHNwYW4pe3ZhciBoPWwuYXBwZW5kKCJ0c3BhbiIpO2guYXR0cigieCIsZS54KSx2b2lkIDAhPT1lLmZpbGwmJmguYXR0cigiZmlsbCIsZS5maWxsKSxoLnRleHQodSl9ZWxzZSBsLnRleHQodSk7dm9pZCAwIT09ZS52YWxpZ24mJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmZS50ZXh0TWFyZ2luPjAmJihyKz0obC5fZ3JvdXBzfHxsKVswXVswXS5nZXRCQm94KCkuaGVpZ2h0LG49ciksYS5wdXNoKGwpfXJldHVybiBhfSxFYT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhLG8scz10LmFwcGVuZCgicG9seWdvbiIpO3JldHVybiBzLmF0dHIoInBvaW50cyIsKG49ZS54LHI9ZS55LGk9ZS53aWR0aCxhPWUuaGVpZ2h0LG4rIiwiK3IrIiAiKyhuK2kpKyIsIityKyIgIisobitpKSsiLCIrKHIrYS0obz03KSkrIiAiKyhuK2ktMS4yKm8pKyIsIisocithKSsiICIrbisiLCIrKHIrYSkpKSxzLmF0dHIoImNsYXNzIiwibGFiZWxCb3giKSxlLnk9ZS55K2UuaGVpZ2h0LzIsd2EodCxlKSxzfSxUYT0tMSxDYT1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6dm9pZCAwLGFuY2hvcjp2b2lkIDAsc3R5bGU6IiM2NjYiLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdHNwYW46ITAsdmFsaWduOnZvaWQgMH19LFNhPWZ1bmN0aW9uKCl7cmV0dXJue3g6MCx5OjAsZmlsbDoiI0VERjJBRSIsc3Ryb2tlOiIjNjY2Iix3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxBYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyl7cihlLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJ5IixpK28vMis1KS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjKXtmb3IodmFyIHU9Yy5hY3RvckZvbnRTaXplLGw9Yy5hY3RvckZvbnRGYW1pbHksaD1jLmFjdG9yRm9udFdlaWdodCxmPXQuc3BsaXQoXy5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kKnUtdSooZi5sZW5ndGgtMSkvMix5PWUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJmb250LXNpemUiLHUpLnN0eWxlKCJmb250LXdlaWdodCIsaCkuc3R5bGUoImZvbnQtZmFtaWx5IixsKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXBwZW5kKCJkaXYiKS5zdHlsZSgiZGlzcGxheSIsInRhYmxlIikuc3R5bGUoImhlaWdodCIsIjEwMCUiKS5zdHlsZSgid2lkdGgiLCIxMDAlIik7aC5hcHBlbmQoImRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUtY2VsbCIpLnN0eWxlKCJ0ZXh0LWFsaWduIiwiY2VudGVyIikuc3R5bGUoInZlcnRpY2FsLWFsaWduIiwibWlkZGxlIikudGV4dCh0KSxlKHQsbCxpLGEsbyxzLGMsdSkscihoLGMpfWZ1bmN0aW9uIHIodCxlKXtmb3IodmFyIG4gaW4gZSllLmhhc093blByb3BlcnR5KG4pJiZ0LmF0dHIobixlW25dKX1yZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuImZvIj09PXIudGV4dFBsYWNlbWVudD9uOiJvbGQiPT09ci50ZXh0UGxhY2VtZW50P3Q6ZX19KCksTWE9e2RyYXdSZWN0OmthLGRyYXdUZXh0OndhLGRyYXdMYWJlbDpFYSxkcmF3QWN0b3I6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUueCtlLndpZHRoLzIsaT10LmFwcGVuZCgiZyIpOzA9PT1lLnkmJihUYSsrLGkuYXBwZW5kKCJsaW5lIikuYXR0cigiaWQiLCJhY3RvciIrVGEpLmF0dHIoIngxIixyKS5hdHRyKCJ5MSIsNSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiwyZTMpLmF0dHIoImNsYXNzIiwiYWN0b3ItbGluZSIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjAuNXB4IikuYXR0cigic3Ryb2tlIiwiIzk5OSIpKTt2YXIgYT1TYSgpO2EueD1lLngsYS55PWUueSxhLmZpbGw9IiNlYWVhZWEiLGEud2lkdGg9ZS53aWR0aCxhLmhlaWdodD1lLmhlaWdodCxhLmNsYXNzPSJhY3RvciIsYS5yeD0zLGEucnk9MyxrYShpLGEpLEFhKG4pKGUuZGVzY3JpcHRpb24saSxhLngsYS55LGEud2lkdGgsYS5oZWlnaHQse2NsYXNzOiJhY3RvciJ9LG4pfSxhbmNob3JFbGVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGVuZCgiZyIpfSxkcmF3QWN0aXZhdGlvbjpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhPVNhKCksbz1lLmFuY2hvcmVkO2EueD1lLnN0YXJ0eCxhLnk9ZS5zdGFydHksYS5jbGFzcz0iYWN0aXZhdGlvbiIraSUzLGEud2lkdGg9ZS5zdG9weC1lLnN0YXJ0eCxhLmhlaWdodD1uLWUuc3RhcnR5LGthKG8sYSl9LGRyYXdMb29wOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXIuYm94TWFyZ2luLGE9ci5ib3hUZXh0TWFyZ2luLG89ci5sYWJlbEJveEhlaWdodCxzPXIubGFiZWxCb3hXaWR0aCxjPXIubWVzc2FnZUZvbnRGYW1pbHksdT1yLm1lc3NhZ2VGb250U2l6ZSxsPXIubWVzc2FnZUZvbnRXZWlnaHQsaD10LmFwcGVuZCgiZyIpLGY9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIGguYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLHQpLmF0dHIoInkxIixlKS5hdHRyKCJ4MiIsbikuYXR0cigieTIiLHIpLmF0dHIoImNsYXNzIiwibG9vcExpbmUiKX07ZihlLnN0YXJ0eCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RhcnR5KSxmKGUuc3RvcHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RvcHksZS5zdG9weCxlLnN0b3B5KSxmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RhcnR4LGUuc3RvcHkpLHZvaWQgMCE9PWUuc2VjdGlvbnMmJmUuc2VjdGlvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZihlLnN0YXJ0eCx0LnksZS5zdG9weCx0LnkpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpfSkpO3ZhciBkPUNhKCk7ZC50ZXh0PW4sZC54PWUuc3RhcnR4LGQueT1lLnN0YXJ0eSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLndpZHRoPXN8fDUwLGQuaGVpZ2h0PW98fDIwLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9ImxhYmVsVGV4dCIsRWEoaCxkKSwoZD1DYSgpKS50ZXh0PWUudGl0bGUsZC54PWUuc3RhcnR4K3MvMisoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zdGFydHkraSthLGQuYW5jaG9yPSJtaWRkbGUiLGQudmFsaWduPSJtaWRkbGUiLGQudGV4dE1hcmdpbj1hLGQuY2xhc3M9Imxvb3BUZXh0IixkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPSEwO3ZhciBwPXdhKGgsZCk7cmV0dXJuIHZvaWQgMCE9PWUuc2VjdGlvblRpdGxlcyYmZS5zZWN0aW9uVGl0bGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsbil7aWYodC5tZXNzYWdlKXtkLnRleHQ9dC5tZXNzYWdlLGQueD1lLnN0YXJ0eCsoZS5zdG9weC1lLnN0YXJ0eCkvMixkLnk9ZS5zZWN0aW9uc1tuXS55K2krYSxkLmNsYXNzPSJsb29wVGV4dCIsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50c3Bhbj0hMSxkLmZvbnRGYW1pbHk9YyxkLmZvbnRTaXplPXUsZC5mb250V2VpZ2h0PWwsZC53cmFwPWUud3JhcCxwPXdhKGgsZCk7dmFyIHI9TWF0aC5yb3VuZChwLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7ZS5zZWN0aW9uc1tuXS5oZWlnaHQrPXItKGkrYSl9fSkpLGUuaGVpZ2h0PU1hdGgucm91bmQoZS5zdG9weS1lLnN0YXJ0eSksaH0sZHJhd0JhY2tncm91bmRSZWN0OmZ1bmN0aW9uKHQsZSl7a2EodCx7eDplLnN0YXJ0eCx5OmUuc3RhcnR5LHdpZHRoOmUuc3RvcHgtZS5zdGFydHgsaGVpZ2h0OmUuc3RvcHktZS5zdGFydHksZmlsbDplLmZpbGwsY2xhc3M6InJlY3QifSkubG93ZXIoKX0saW5zZXJ0QXJyb3dIZWFkOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDkpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iil9LGluc2VydEFycm93RmlsbGVkSGVhZDpmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJmaWxsZWQtaGVhZCIpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxpbnNlcnRTZXF1ZW5jZU51bWJlcjpmdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJzZXF1ZW5jZW51bWJlciIpLmF0dHIoInJlZlgiLDE1KS5hdHRyKCJyZWZZIiwxNSkuYXR0cigibWFya2VyV2lkdGgiLDYwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsMTUpLmF0dHIoImN5IiwxNSkuYXR0cigiciIsNil9LGluc2VydEFycm93Q3Jvc3NIZWFkOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImNyb3NzaGVhZCIpLmF0dHIoIm1hcmtlcldpZHRoIiwxNSkuYXR0cigibWFya2VySGVpZ2h0Iiw4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXR0cigicmVmWCIsMTYpLmF0dHIoInJlZlkiLDQpO2UuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigic3Ryb2tlIiwiIzAwMDAwMCIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMCwgMCIpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLmF0dHIoImQiLCJNIDksMiBWIDYgTDE2LDQgWiIpLGUuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gMCwxIEwgNiw3IE0gNiwxIEwgMCw3Iil9LGdldFRleHRPYmo6Q2EsZ2V0Tm90ZVJlY3Q6U2F9O2lhLnBhcnNlci55eT1fYTt2YXIgT2E9e30sQmE9e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10sYWN0aXZhdGlvbnM6W10sbW9kZWxzOntnZXRIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwwPT09dGhpcy5hY3RvcnMubGVuZ3RoP1swXTp0aGlzLmFjdG9ycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKSkrKDA9PT10aGlzLmxvb3BzLmxlbmd0aD8wOnRoaXMubG9vcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpKygwPT09dGhpcy5tZXNzYWdlcy5sZW5ndGg/MDp0aGlzLm1lc3NhZ2VzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKSsoMD09PXRoaXMubm90ZXMubGVuZ3RoPzA6dGhpcy5ub3Rlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5hY3RvcnM9W10sdGhpcy5sb29wcz1bXSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMubm90ZXM9W119LGFkZEFjdG9yOmZ1bmN0aW9uKHQpe3RoaXMuYWN0b3JzLnB1c2godCl9LGFkZExvb3A6ZnVuY3Rpb24odCl7dGhpcy5sb29wcy5wdXNoKHQpfSxhZGRNZXNzYWdlOmZ1bmN0aW9uKHQpe3RoaXMubWVzc2FnZXMucHVzaCh0KX0sYWRkTm90ZTpmdW5jdGlvbih0KXt0aGlzLm5vdGVzLnB1c2godCl9LGxhc3RBY3RvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdG9yc1t0aGlzLmFjdG9ycy5sZW5ndGgtMV19LGxhc3RMb29wOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9vcHNbdGhpcy5sb29wcy5sZW5ndGgtMV19LGxhc3RNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZXNbdGhpcy5tZXNzYWdlcy5sZW5ndGgtMV19LGxhc3ROb3RlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm90ZXNbdGhpcy5ub3Rlcy5sZW5ndGgtMV19LGFjdG9yczpbXSxsb29wczpbXSxtZXNzYWdlczpbXSxub3RlczpbXX0saW5pdDpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VJdGVtcz1bXSx0aGlzLmFjdGl2YXRpb25zPVtdLHRoaXMubW9kZWxzLmNsZWFyKCksdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wLFJhKGlhLnBhcnNlci55eS5nZXRDb25maWcoKSl9LHVwZGF0ZVZhbDpmdW5jdGlvbih0LGUsbixyKXt2b2lkIDA9PT10W2VdP3RbZV09bjp0W2VdPXIobix0W2VdKX0sdXBkYXRlQm91bmRzOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMsYT0wO2Z1bmN0aW9uIG8obyl7cmV0dXJuIGZ1bmN0aW9uKHMpe2ErKzt2YXIgYz1pLnNlcXVlbmNlSXRlbXMubGVuZ3RoLWErMTtpLnVwZGF0ZVZhbChzLCJzdGFydHkiLGUtYypPYS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHMsInN0b3B5IixyK2MqT2EuYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChCYS5kYXRhLCJzdGFydHgiLHQtYypPYS5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKEJhLmRhdGEsInN0b3B4IixuK2MqT2EuYm94TWFyZ2luLE1hdGgubWF4KSwiYWN0aXZhdGlvbiIhPT1vJiYoaS51cGRhdGVWYWwocywic3RhcnR4Iix0LWMqT2EuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChzLCJzdG9weCIsbitjKk9hLmJveE1hcmdpbixNYXRoLm1heCksaS51cGRhdGVWYWwoQmEuZGF0YSwic3RhcnR5IixlLWMqT2EuYm94TWFyZ2luLE1hdGgubWluKSxpLnVwZGF0ZVZhbChCYS5kYXRhLCJzdG9weSIscitjKk9hLmJveE1hcmdpbixNYXRoLm1heCkpfX10aGlzLnNlcXVlbmNlSXRlbXMuZm9yRWFjaChvKCkpLHRoaXMuYWN0aXZhdGlvbnMuZm9yRWFjaChvKCJhY3RpdmF0aW9uIikpfSxpbnNlcnQ6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9TWF0aC5taW4odCxuKSxhPU1hdGgubWF4KHQsbiksbz1NYXRoLm1pbihlLHIpLHM9TWF0aC5tYXgoZSxyKTt0aGlzLnVwZGF0ZVZhbChCYS5kYXRhLCJzdGFydHgiLGksTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKEJhLmRhdGEsInN0YXJ0eSIsbyxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoQmEuZGF0YSwic3RvcHgiLGEsTWF0aC5tYXgpLHRoaXMudXBkYXRlVmFsKEJhLmRhdGEsInN0b3B5IixzLE1hdGgubWF4KSx0aGlzLnVwZGF0ZUJvdW5kcyhpLG8sYSxzKX0sbmV3QWN0aXZhdGlvbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9blt0LmZyb20uYWN0b3JdLGk9RmEodC5mcm9tLmFjdG9yKS5sZW5ndGh8fDAsYT1yLngrci53aWR0aC8yKyhpLTEpKk9hLmFjdGl2YXRpb25XaWR0aC8yO3RoaXMuYWN0aXZhdGlvbnMucHVzaCh7c3RhcnR4OmEsc3RhcnR5OnRoaXMudmVydGljYWxQb3MrMixzdG9weDphK09hLmFjdGl2YXRpb25XaWR0aCxzdG9weTp2b2lkIDAsYWN0b3I6dC5mcm9tLmFjdG9yLGFuY2hvcmVkOk1hLmFuY2hvckVsZW1lbnQoZSl9KX0sZW5kQWN0aXZhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtyZXR1cm4gdGhpcy5hY3RpdmF0aW9ucy5zcGxpY2UoZSwxKVswXX0sY3JlYXRlTG9vcDpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7bWVzc2FnZTp2b2lkIDAsd3JhcDohMSx3aWR0aDp2b2lkIDB9LGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDA7cmV0dXJue3N0YXJ0eDp2b2lkIDAsc3RhcnR5OnRoaXMudmVydGljYWxQb3Msc3RvcHg6dm9pZCAwLHN0b3B5OnZvaWQgMCx0aXRsZTp0Lm1lc3NhZ2Usd3JhcDp0LndyYXAsd2lkdGg6dC53aWR0aCxoZWlnaHQ6MCxmaWxsOmV9fSxuZXdMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDt0aGlzLnNlcXVlbmNlSXRlbXMucHVzaCh0aGlzLmNyZWF0ZUxvb3AodCxlKSl9LGVuZExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpfSxhZGRTZWN0aW9uVG9Mb29wOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2VxdWVuY2VJdGVtcy5wb3AoKTtlLnNlY3Rpb25zPWUuc2VjdGlvbnN8fFtdLGUuc2VjdGlvblRpdGxlcz1lLnNlY3Rpb25UaXRsZXN8fFtdLGUuc2VjdGlvbnMucHVzaCh7eTpCYS5nZXRWZXJ0aWNhbFBvcygpLGhlaWdodDowfSksZS5zZWN0aW9uVGl0bGVzLnB1c2godCksdGhpcy5zZXF1ZW5jZUl0ZW1zLnB1c2goZSl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJue2JvdW5kczp0aGlzLmRhdGEsbW9kZWxzOnRoaXMubW9kZWxzfX19LE5hPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQubWVzc2FnZUZvbnRGYW1pbHksZm9udFNpemU6dC5tZXNzYWdlRm9udFNpemUsZm9udFdlaWdodDp0Lm1lc3NhZ2VGb250V2VpZ2h0fX0sRGE9ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5ub3RlRm9udEZhbWlseSxmb250U2l6ZTp0Lm5vdGVGb250U2l6ZSxmb250V2VpZ2h0OnQubm90ZUZvbnRXZWlnaHR9fSxMYT1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0LmFjdG9yRm9udEZhbWlseSxmb250U2l6ZTp0LmFjdG9yRm9udFNpemUsZm9udFdlaWdodDp0LmFjdG9yRm9udFdlaWdodH19LElhPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT0wLGE9MCxvPTA7bzxuLmxlbmd0aDtvKyspe3ZhciBzPWVbbltvXV07cy53aWR0aD1zLndpZHRofHxPYS53aWR0aCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodHx8T2EuaGVpZ2h0LE9hLmhlaWdodCkscy5tYXJnaW49cy5tYXJnaW58fE9hLmFjdG9yTWFyZ2luLHMueD1pK2Escy55PXIsTWEuZHJhd0FjdG9yKHQscyxPYSksQmEuaW5zZXJ0KHMueCxyLHMueCtzLndpZHRoLHMuaGVpZ2h0KSxpKz1zLndpZHRoLGErPXMubWFyZ2luLEJhLm1vZGVscy5hZGRBY3RvcihzKX1CYS5idW1wVmVydGljYWxQb3MoT2EuaGVpZ2h0KX0sUmE9ZnVuY3Rpb24odCl7UChPYSx0KSx0LmZvbnRGYW1pbHkmJihPYS5hY3RvckZvbnRGYW1pbHk9T2Eubm90ZUZvbnRGYW1pbHk9T2EubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoT2EuYWN0b3JGb250U2l6ZT1PYS5ub3RlRm9udFNpemU9T2EubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKE9hLmFjdG9yRm9udFdlaWdodD1PYS5ub3RlRm9udFdlaWdodD1PYS5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSxGYT1mdW5jdGlvbih0KXtyZXR1cm4gQmEuYWN0aXZhdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3Rvcj09PXR9KSl9LFBhPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVt0XSxyPUZhKHQpO3JldHVybltyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4odCxlLnN0YXJ0eCl9KSxuLngrbi53aWR0aC8yKSxyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnN0b3B4KX0pLG4ueCtuLndpZHRoLzIpXX07ZnVuY3Rpb24gamEodCxlLG4scixpKXtCYS5idW1wVmVydGljYWxQb3Mobik7dmFyIGE9cjtpZihlLmlkJiZlLm1lc3NhZ2UmJnRbZS5pZF0pe3ZhciBvPXRbZS5pZF0ud2lkdGgscz1OYShPYSk7ZS5tZXNzYWdlPVYud3JhcExhYmVsKCJbIi5jb25jYXQoZS5tZXNzYWdlLCJdIiksby0yKk9hLndyYXBQYWRkaW5nLHMpLGUud2lkdGg9byxlLndyYXA9ITA7dmFyIHU9Vi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhlLm1lc3NhZ2UscyksbD1NYXRoLm1heCh1LmhlaWdodCxPYS5sYWJlbEJveEhlaWdodCk7YT1yK2wsYy5kZWJ1ZygiIi5jb25jYXQobCwiIC0gIikuY29uY2F0KGUubWVzc2FnZSkpfWkoZSksQmEuYnVtcFZlcnRpY2FsUG9zKGEpfXZhciBZYT1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2lmKHRbZS50b10mJnRbZS5mcm9tXSl7dmFyIHI9dFtlLnRvXTtpZihlLnBsYWNlbWVudD09PWlhLnBhcnNlci55eS5QTEFDRU1FTlQuTEVGVE9GJiYhci5wcmV2QWN0b3IpcmV0dXJuO2lmKGUucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GJiYhci5uZXh0QWN0b3IpcmV0dXJuO3ZhciBpPXZvaWQgMCE9PWUucGxhY2VtZW50LGE9IWksbz1pP0RhKE9hKTpOYShPYSkscz1lLndyYXA/Vi53cmFwTGFiZWwoZS5tZXNzYWdlLE9hLndpZHRoLTIqT2Eud3JhcFBhZGRpbmcsbyk6ZS5tZXNzYWdlLGM9Vi5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhzLG8pLndpZHRoKzIqT2Eud3JhcFBhZGRpbmc7YSYmZS5mcm9tPT09ci5uZXh0QWN0b3I/bltlLnRvXT1NYXRoLm1heChuW2UudG9dfHwwLGMpOmEmJmUuZnJvbT09PXIucHJldkFjdG9yP25bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYyk6YSYmZS5mcm9tPT09ZS50bz8obltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjLzIpLG5bZS50b109TWF0aC5tYXgobltlLnRvXXx8MCxjLzIpKTplLnBsYWNlbWVudD09PWlhLnBhcnNlci55eS5QTEFDRU1FTlQuUklHSFRPRj9uW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMpOmUucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/bltyLnByZXZBY3Rvcl09TWF0aC5tYXgobltyLnByZXZBY3Rvcl18fDAsYyk6ZS5wbGFjZW1lbnQ9PT1pYS5wYXJzZXIueXkuUExBQ0VNRU5ULk9WRVImJihyLnByZXZBY3RvciYmKG5bci5wcmV2QWN0b3JdPU1hdGgubWF4KG5bci5wcmV2QWN0b3JdfHwwLGMvMikpLHIubmV4dEFjdG9yJiYobltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjLzIpKSl9fSkpLGMuZGVidWcoIm1heE1lc3NhZ2VXaWR0aFBlckFjdG9yOiIsbiksbn0semE9ZnVuY3Rpb24odCxlKXt2YXIgbj0wO2Zvcih2YXIgciBpbiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgcj10W2VdO3Iud3JhcCYmKHIuZGVzY3JpcHRpb249Vi53cmFwTGFiZWwoci5kZXNjcmlwdGlvbixPYS53aWR0aC0yKk9hLndyYXBQYWRkaW5nLExhKE9hKSkpO3ZhciBpPVYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoci5kZXNjcmlwdGlvbixMYShPYSkpO3Iud2lkdGg9ci53cmFwP09hLndpZHRoOk1hdGgubWF4KE9hLndpZHRoLGkud2lkdGgrMipPYS53cmFwUGFkZGluZyksci5oZWlnaHQ9ci53cmFwP01hdGgubWF4KGkuaGVpZ2h0LE9hLmhlaWdodCk6T2EuaGVpZ2h0LG49TWF0aC5tYXgobixyLmhlaWdodCl9KSksZSl7dmFyIGk9dFtyXTtpZihpKXt2YXIgYT10W2kubmV4dEFjdG9yXTtpZihhKXt2YXIgbz1lW3JdK09hLmFjdG9yTWFyZ2luLWkud2lkdGgvMi1hLndpZHRoLzI7aS5tYXJnaW49TWF0aC5tYXgobyxPYS5hY3Rvck1hcmdpbil9fX1yZXR1cm4gTWF0aC5tYXgobixPYS5oZWlnaHQpfSxVYT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXt9LG89W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7c3dpdGNoKHQuaWQ9Vi5yYW5kb20oe2xlbmd0aDoxMH0pLHQudHlwZSl7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9TVEFSVDpjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOmNhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDpvLnB1c2goe2lkOnQuaWQsbXNnOnQubWVzc2FnZSxmcm9tOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRvOk51bWJlci5NSU5fU0FGRV9JTlRFR0VSLHdpZHRoOjB9KTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfRUxTRTpjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOnQubWVzc2FnZSYmKG49by5wb3AoKSxhW24uaWRdPW4sYVt0LmlkXT1uLG8ucHVzaChuKSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9FTkQ6Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDpjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5PUFRfRU5EOmNhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6bj1vLnBvcCgpLGFbbi5pZF09bjticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6dmFyIHM9ZVt0LmZyb20/dC5mcm9tLmFjdG9yOnQudG8uYWN0b3JdLHU9RmEodC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yKS5sZW5ndGgsbD1zLngrcy53aWR0aC8yKyh1LTEpKk9hLmFjdGl2YXRpb25XaWR0aC8yLGg9e3N0YXJ0eDpsLHN0b3B4OmwrT2EuYWN0aXZhdGlvbldpZHRoLGFjdG9yOnQuZnJvbS5hY3RvcixlbmFibGVkOiEwfTtCYS5hY3RpdmF0aW9ucy5wdXNoKGgpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9FTkQ6dmFyIGY9QmEuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO2RlbGV0ZSBCYS5hY3RpdmF0aW9ucy5zcGxpY2UoZiwxKVswXX12b2lkIDAhPT10LnBsYWNlbWVudD8ocj1mdW5jdGlvbih0LGUpe3ZhciBuPWVbdC5mcm9tXS54LHI9ZVt0LnRvXS54LGk9dC53cmFwJiZ0Lm1lc3NhZ2UsYT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGk/Vi53cmFwTGFiZWwodC5tZXNzYWdlLE9hLndpZHRoLERhKE9hKSk6dC5tZXNzYWdlLERhKE9hKSksbz17d2lkdGg6aT9PYS53aWR0aDpNYXRoLm1heChPYS53aWR0aCxhLndpZHRoKzIqT2Eubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OmVbdC5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GPyhvLndpZHRoPWk/TWF0aC5tYXgoT2Eud2lkdGgsYS53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipPYS5ub3RlTWFyZ2luKSxvLnN0YXJ0eD1uKyhlW3QuZnJvbV0ud2lkdGgrT2EuYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09aWEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/KG8ud2lkdGg9aT9NYXRoLm1heChPYS53aWR0aCxhLndpZHRoKzIqT2Eubm90ZU1hcmdpbik6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipPYS5ub3RlTWFyZ2luKSxvLnN0YXJ0eD1uLW8ud2lkdGgrKGVbdC5mcm9tXS53aWR0aC1PYS5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8oYT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGk/Vi53cmFwTGFiZWwodC5tZXNzYWdlLE1hdGgubWF4KE9hLndpZHRoLGVbdC5mcm9tXS53aWR0aCksRGEoT2EpKTp0Lm1lc3NhZ2UsRGEoT2EpKSxvLndpZHRoPWk/TWF0aC5tYXgoT2Eud2lkdGgsZVt0LmZyb21dLndpZHRoKTpNYXRoLm1heChlW3QuZnJvbV0ud2lkdGgsT2Eud2lkdGgsYS53aWR0aCsyKk9hLm5vdGVNYXJnaW4pLG8uc3RhcnR4PW4rKGVbdC5mcm9tXS53aWR0aC1vLndpZHRoKS8yKTooby53aWR0aD1NYXRoLmFicyhuK2VbdC5mcm9tXS53aWR0aC8yLShyK2VbdC50b10ud2lkdGgvMikpK09hLmFjdG9yTWFyZ2luLG8uc3RhcnR4PW48cj9uK2VbdC5mcm9tXS53aWR0aC8yLU9hLmFjdG9yTWFyZ2luLzI6citlW3QudG9dLndpZHRoLzItT2EuYWN0b3JNYXJnaW4vMiksaSYmKG8ubWVzc2FnZT1WLndyYXBMYWJlbCh0Lm1lc3NhZ2Usby53aWR0aC0yKk9hLndyYXBQYWRkaW5nLERhKE9hKSkpLGMuZGVidWcoIk5NOlsiLmNvbmNhdChvLnN0YXJ0eCwiLCIpLmNvbmNhdChvLnN0b3B4LCIsIikuY29uY2F0KG8uc3RhcnR5LCIsIikuY29uY2F0KG8uc3RvcHksIjoiKS5jb25jYXQoby53aWR0aCwiLCIpLmNvbmNhdChvLmhlaWdodCwiPSIpLmNvbmNhdCh0Lm1lc3NhZ2UsIl0iKSksb30odCxlKSx0Lm5vdGVNb2RlbD1yLG8uZm9yRWFjaCgoZnVuY3Rpb24odCl7KG49dCkuZnJvbT1NYXRoLm1pbihuLmZyb20sci5zdGFydHgpLG4udG89TWF0aC5tYXgobi50byxyLnN0YXJ0eCtyLndpZHRoKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsTWF0aC5hYnMobi5mcm9tLW4udG8pKS1PYS5sYWJlbEJveFdpZHRofSkpKTooaT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO2lmKFtpYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixpYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4saWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihuPSEwKSwhbilyZXR1cm57fTt2YXIgcj1QYSh0LmZyb20sZSksaT1QYSh0LnRvLGUpLGE9clswXTw9aVswXT8xOjAsbz1yWzBdPGlbMF0/MDoxLHM9ci5jb25jYXQoaSksYz1NYXRoLmFicyhpW29dLXJbYV0pO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPVYud3JhcExhYmVsKHQubWVzc2FnZSxNYXRoLm1heChjKzIqT2Eud3JhcFBhZGRpbmcsT2Eud2lkdGgpLE5hKE9hKSkpO3ZhciB1PVYuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnModC5tZXNzYWdlLE5hKE9hKSk7cmV0dXJue3dpZHRoOk1hdGgubWF4KHQud3JhcD8wOnUud2lkdGgrMipPYS53cmFwUGFkZGluZyxjKzIqT2Eud3JhcFBhZGRpbmcsT2Eud2lkdGgpLGhlaWdodDowLHN0YXJ0eDpyW2FdLHN0b3B4Omlbb10sc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZSx0eXBlOnQudHlwZSx3cmFwOnQud3JhcCxmcm9tQm91bmRzOk1hdGgubWluLmFwcGx5KG51bGwscyksdG9Cb3VuZHM6TWF0aC5tYXguYXBwbHkobnVsbCxzKX19KHQsZSksdC5tc2dNb2RlbD1pLGkuc3RhcnR4JiZpLnN0b3B4JiZvLmxlbmd0aD4wJiZvLmZvckVhY2goKGZ1bmN0aW9uKHIpe2lmKG49cixpLnN0YXJ0eD09PWkuc3RvcHgpe3ZhciBhPWVbdC5mcm9tXSxvPWVbdC50b107bi5mcm9tPU1hdGgubWluKGEueC1pLndpZHRoLzIsYS54LWEud2lkdGgvMixuLmZyb20pLG4udG89TWF0aC5tYXgoby54K2kud2lkdGgvMixvLngrYS53aWR0aC8yLG4udG8pLG4ud2lkdGg9TWF0aC5tYXgobi53aWR0aCxNYXRoLmFicyhuLnRvLW4uZnJvbSkpLU9hLmxhYmVsQm94V2lkdGh9ZWxzZSBuLmZyb209TWF0aC5taW4oaS5zdGFydHgsbi5mcm9tKSxuLnRvPU1hdGgubWF4KGkuc3RvcHgsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLGkud2lkdGgpLU9hLmxhYmVsQm94V2lkdGh9KSkpfSkpLEJhLmFjdGl2YXRpb25zPVtdLGMuZGVidWcoIkxvb3AgdHlwZSB3aWR0aHM6IixhKSxhfSwkYT17Ym91bmRzOkJhLGRyYXdBY3RvcnM6SWEsc2V0Q29uZjpSYSxkcmF3OmZ1bmN0aW9uKHQsZSl7T2E9X3QoKS5zZXF1ZW5jZSxpYS5wYXJzZXIueXkuY2xlYXIoKSxpYS5wYXJzZXIueXkuc2V0V3JhcChPYS53cmFwKSxpYS5wYXJzZXIucGFyc2UodCsiXG4iKSxCYS5pbml0KCksYy5kZWJ1ZygiQzoiLmNvbmNhdChKU09OLnN0cmluZ2lmeShPYSxudWxsLDIpKSk7dmFyIG49T2JqZWN0KGguc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKSxyPWlhLnBhcnNlci55eS5nZXRBY3RvcnMoKSxpPWlhLnBhcnNlci55eS5nZXRBY3RvcktleXMoKSxhPWlhLnBhcnNlci55eS5nZXRNZXNzYWdlcygpLG89aWEucGFyc2VyLnl5LmdldFRpdGxlKCkscz1ZYShyLGEpO09hLmhlaWdodD16YShyLHMpLElhKG4scixpLDApO3ZhciB1PVVhKGEscixzKTtNYS5pbnNlcnRBcnJvd0hlYWQobiksTWEuaW5zZXJ0QXJyb3dDcm9zc0hlYWQobiksTWEuaW5zZXJ0QXJyb3dGaWxsZWRIZWFkKG4pLE1hLmluc2VydFNlcXVlbmNlTnVtYmVyKG4pO3ZhciBsPTE7YS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZSxpLGE7c3dpdGNoKHQudHlwZSl7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuTk9URTppPXQubm90ZU1vZGVsLGZ1bmN0aW9uKHQsZSl7QmEuYnVtcFZlcnRpY2FsUG9zKE9hLmJveE1hcmdpbiksZS5oZWlnaHQ9T2EuYm94TWFyZ2luLGUuc3RhcnR5PUJhLmdldFZlcnRpY2FsUG9zKCk7dmFyIG49TWEuZ2V0Tm90ZVJlY3QoKTtuLng9ZS5zdGFydHgsbi55PWUuc3RhcnR5LG4ud2lkdGg9ZS53aWR0aHx8T2Eud2lkdGgsbi5jbGFzcz0ibm90ZSI7dmFyIHI9dC5hcHBlbmQoImciKSxpPU1hLmRyYXdSZWN0KHIsbiksYT1NYS5nZXRUZXh0T2JqKCk7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLndpZHRoPW4ud2lkdGgsYS5keT0iMWVtIixhLnRleHQ9ZS5tZXNzYWdlLGEuY2xhc3M9Im5vdGVUZXh0IixhLmZvbnRGYW1pbHk9T2Eubm90ZUZvbnRGYW1pbHksYS5mb250U2l6ZT1PYS5ub3RlRm9udFNpemUsYS5mb250V2VpZ2h0PU9hLm5vdGVGb250V2VpZ2h0LGEuYW5jaG9yPU9hLm5vdGVBbGlnbixhLnRleHRNYXJnaW49T2Eubm90ZU1hcmdpbixhLnZhbGlnbj1PYS5ub3RlQWxpZ247dmFyIG89d2EocixhKSxzPU1hdGgucm91bmQoby5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0Ll9ncm91cHN8fHQpWzBdWzBdLmdldEJCb3goKS5oZWlnaHR9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpO2kuYXR0cigiaGVpZ2h0IixzKzIqT2Eubm90ZU1hcmdpbiksZS5oZWlnaHQrPXMrMipPYS5ub3RlTWFyZ2luLEJhLmJ1bXBWZXJ0aWNhbFBvcyhzKzIqT2Eubm90ZU1hcmdpbiksZS5zdG9weT1lLnN0YXJ0eStzKzIqT2Eubm90ZU1hcmdpbixlLnN0b3B4PWUuc3RhcnR4K24ud2lkdGgsQmEuaW5zZXJ0KGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdG9weSksQmEubW9kZWxzLmFkZE5vdGUoZSl9KG4saSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOkJhLm5ld0FjdGl2YXRpb24odCxuLHIpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFDVElWRV9FTkQ6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9QmEuZW5kQWN0aXZhdGlvbih0KTtyLnN0YXJ0eSsxOD5lJiYoci5zdGFydHk9ZS02LGUrPTEyKSxNYS5kcmF3QWN0aXZhdGlvbihuLHIsZSxPYSxGYSh0LmZyb20uYWN0b3IpLmxlbmd0aCksQmEuaW5zZXJ0KHIuc3RhcnR4LGUtMTAsci5zdG9weCxlKX0odCxCYS5nZXRWZXJ0aWNhbFBvcygpKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5MT09QX1NUQVJUOmphKHUsdCxPYS5ib3hNYXJnaW4sT2EuYm94TWFyZ2luK09hLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdMb29wKG4sZSwibG9vcCIsT2EpLEJhLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LUJhLmdldFZlcnRpY2FsUG9zKCkpLEJhLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfU1RBUlQ6amEodSx0LE9hLmJveE1hcmdpbixPYS5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5uZXdMb29wKHZvaWQgMCx0Lm1lc3NhZ2UpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLlJFQ1RfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdCYWNrZ3JvdW5kUmVjdChuLGUpLEJhLm1vZGVscy5hZGRMb29wKGUpLEJhLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LUJhLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9TVEFSVDpqYSh1LHQsT2EuYm94TWFyZ2luLE9hLmJveE1hcmdpbitPYS5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gQmEubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5PUFRfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdMb29wKG4sZSwib3B0IixPYSksQmEuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktQmEuZ2V0VmVydGljYWxQb3MoKSksQmEubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX1NUQVJUOmphKHUsdCxPYS5ib3hNYXJnaW4sT2EuYm94TWFyZ2luK09hLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTFNFOmphKHUsdCxPYS5ib3hNYXJnaW4rT2EuYm94VGV4dE1hcmdpbixPYS5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBCYS5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgaWEucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTkQ6ZT1CYS5lbmRMb29wKCksTWEuZHJhd0xvb3AobixlLCJhbHQiLE9hKSxCYS5idW1wVmVydGljYWxQb3MoZS5zdG9weS1CYS5nZXRWZXJ0aWNhbFBvcygpKSxCYS5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfU1RBUlQ6amEodSx0LE9hLmJveE1hcmdpbixPYS5ib3hNYXJnaW4rT2EuYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIEJhLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBpYS5wYXJzZXIueXkuTElORVRZUEUuUEFSX0FORDpqYSh1LHQsT2EuYm94TWFyZ2luK09hLmJveFRleHRNYXJnaW4sT2EuYm94TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gQmEuYWRkU2VjdGlvblRvTG9vcCh0KX0pKTticmVhaztjYXNlIGlhLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfRU5EOmU9QmEuZW5kTG9vcCgpLE1hLmRyYXdMb29wKG4sZSwicGFyIixPYSksQmEuYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktQmEuZ2V0VmVydGljYWxQb3MoKSksQmEubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7ZGVmYXVsdDp0cnl7KGE9dC5tc2dNb2RlbCkuc3RhcnR5PUJhLmdldFZlcnRpY2FsUG9zKCksYS5zZXF1ZW5jZUluZGV4PWwsZnVuY3Rpb24odCxlKXtCYS5idW1wVmVydGljYWxQb3MoMTApO3ZhciBuPWUuc3RhcnR4LHI9ZS5zdG9weCxpPWUuc3RhcnR5LGE9ZS5tZXNzYWdlLG89ZS50eXBlLHM9ZS5zZXF1ZW5jZUluZGV4LGM9Xy5zcGxpdEJyZWFrcyhhKS5sZW5ndGgsdT1WLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGEsTmEoT2EpKSxsPXUuaGVpZ2h0L2M7ZS5oZWlnaHQrPWwsQmEuYnVtcFZlcnRpY2FsUG9zKGwpO3ZhciBoPU1hLmdldFRleHRPYmooKTtoLng9bixoLnk9aSsxMCxoLndpZHRoPXItbixoLmNsYXNzPSJtZXNzYWdlVGV4dCIsaC5keT0iMWVtIixoLnRleHQ9YSxoLmZvbnRGYW1pbHk9T2EubWVzc2FnZUZvbnRGYW1pbHksaC5mb250U2l6ZT1PYS5tZXNzYWdlRm9udFNpemUsaC5mb250V2VpZ2h0PU9hLm1lc3NhZ2VGb250V2VpZ2h0LGguYW5jaG9yPU9hLm1lc3NhZ2VBbGlnbixoLnZhbGlnbj1PYS5tZXNzYWdlQWxpZ24saC50ZXh0TWFyZ2luPU9hLndyYXBQYWRkaW5nLGgudHNwYW49ITEsd2EodCxoKTt2YXIgZixkLHA9dS5oZWlnaHQtMTAseT11LndpZHRoO2lmKG49PT1yKXtkPUJhLmdldFZlcnRpY2FsUG9zKCkrcCxPYS5yaWdodEFuZ2xlcz9mPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gICIuY29uY2F0KG4sIiwiKS5jb25jYXQoZCwiIEggIikuY29uY2F0KG4rTWF0aC5tYXgoT2Eud2lkdGgvMix5LzIpLCIgViAiKS5jb25jYXQoZCsyNSwiIEggIikuY29uY2F0KG4pKToocCs9T2EuYm94TWFyZ2luLGQ9QmEuZ2V0VmVydGljYWxQb3MoKStwLGY9dC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAiK24rIiwiK2QrIiBDICIrKG4rNjApKyIsIisoZC0xMCkrIiAiKyhuKzYwKSsiLCIrKGQrMzApKyIgIituKyIsIisoZCsyMCkpKSxwKz0zMDt2YXIgZz1NYXRoLm1heCh5LzIsT2Eud2lkdGgvMik7QmEuaW5zZXJ0KG4tZyxCYS5nZXRWZXJ0aWNhbFBvcygpLTEwK3AscitnLEJhLmdldFZlcnRpY2FsUG9zKCkrMzArcCl9ZWxzZSBwKz1PYS5ib3hNYXJnaW4sZD1CYS5nZXRWZXJ0aWNhbFBvcygpK3AsKGY9dC5hcHBlbmQoImxpbmUiKSkuYXR0cigieDEiLG4pLGYuYXR0cigieTEiLGQpLGYuYXR0cigieDIiLHIpLGYuYXR0cigieTIiLGQpLEJhLmluc2VydChuLGQtMTAscixkKTtvPT09aWEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRHx8bz09PWlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fG89PT1pYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxvPT09aWEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9PUEVOPyhmLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLGYuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTEiKSk6Zi5hdHRyKCJjbGFzcyIsIm1lc3NhZ2VMaW5lMCIpO3ZhciB2PSIiO09hLmFycm93TWFya2VyQWJzb2x1dGUmJih2PSh2PSh2PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGYuYXR0cigic3Ryb2tlLXdpZHRoIiwyKSxmLmF0dHIoInN0cm9rZSIsIm5vbmUiKSxmLnN0eWxlKCJmaWxsIiwibm9uZSIpLG8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuU09MSUQmJm8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEfHxmLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjYXJyb3doZWFkKSIpLG8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfUE9JTlQmJm8hPT1pYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX1BPSU5UfHxmLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIit2KyIjZmlsbGVkLWhlYWQpIiksbyE9PWlhLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9DUk9TUyYmbyE9PWlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1N8fGYuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3YrIiNjcm9zc2hlYWQpIiksKF9hLnNob3dTZXF1ZW5jZU51bWJlcnMoKXx8T2Euc2hvd1NlcXVlbmNlTnVtYmVycykmJihmLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3YrIiNzZXF1ZW5jZW51bWJlcikiKSx0LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLG4pLmF0dHIoInkiLGQrNCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigiZm9udC1zaXplIiwiMTJweCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigidGV4dExlbmd0aCIsIjE2cHgiKS5hdHRyKCJjbGFzcyIsInNlcXVlbmNlTnVtYmVyIikudGV4dChzKSksQmEuYnVtcFZlcnRpY2FsUG9zKHApLGUuaGVpZ2h0Kz1wLGUuc3RvcHk9ZS5zdGFydHkrZS5oZWlnaHQsQmEuaW5zZXJ0KGUuZnJvbUJvdW5kcyxlLnN0YXJ0eSxlLnRvQm91bmRzLGUuc3RvcHkpfShuLGEpLEJhLm1vZGVscy5hZGRNZXNzYWdlKGEpfWNhdGNoKHQpe2MuZXJyb3IoImVycm9yIHdoaWxlIGRyYXdpbmcgbWVzc2FnZSIsdCl9fVtpYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixpYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4saWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsaWEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULGlhLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJmwrK30pKSxPYS5taXJyb3JBY3RvcnMmJihCYS5idW1wVmVydGljYWxQb3MoMipPYS5ib3hNYXJnaW4pLElhKG4scixpLEJhLmdldFZlcnRpY2FsUG9zKCkpKTt2YXIgZj1CYS5nZXRCb3VuZHMoKS5ib3VuZHM7Yy5kZWJ1ZygiRm9yIGxpbmUgaGVpZ2h0IGZpeCBRdWVyeWluZzogIyIrZSsiIC5hY3Rvci1saW5lIiksT2JqZWN0KGguc2VsZWN0QWxsKSgiIyIrZSsiIC5hY3Rvci1saW5lIikuYXR0cigieTIiLGYuc3RvcHkpO3ZhciBkPWYuc3RvcHktZi5zdGFydHkrMipPYS5kaWFncmFtTWFyZ2luWTtPYS5taXJyb3JBY3RvcnMmJihkPWQtT2EuYm94TWFyZ2luK09hLmJvdHRvbU1hcmdpbkFkaik7dmFyIHA9Zi5zdG9weC1mLnN0YXJ0eCsyKk9hLmRpYWdyYW1NYXJnaW5YO28mJm4uYXBwZW5kKCJ0ZXh0IikudGV4dChvKS5hdHRyKCJ4IiwoZi5zdG9weC1mLnN0YXJ0eCkvMi0yKk9hLmRpYWdyYW1NYXJnaW5YKS5hdHRyKCJ5IiwtMjUpLFcobixkLHAsT2EudXNlTWF4V2lkdGgpO3ZhciB5PW8/NDA6MDtuLmF0dHIoInZpZXdCb3giLGYuc3RhcnR4LU9hLmRpYWdyYW1NYXJnaW5YKyIgLSIrKE9hLmRpYWdyYW1NYXJnaW5ZK3kpKyIgIitwKyIgIisoZCt5KSksYy5kZWJ1ZygibW9kZWxzOiIsQmEubW9kZWxzKX19LHFhPW4oMjIpLFdhPW4ubihxYSk7ZnVuY3Rpb24gVmEodCl7cmV0dXJuKFZhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIEhhLEdhPWZ1bmN0aW9uKHQpe3JldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHQpKX0sWGE9W10sWmE9e3Jvb3Q6e3JlbGF0aW9uczpbXSxzdGF0ZXM6e30sZG9jdW1lbnRzOnt9fX0sUWE9WmEucm9vdCxLYT0wLEphPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dm9pZCAwPT09UWEuc3RhdGVzW3RdP1FhLnN0YXRlc1t0XT17aWQ6dCxkZXNjcmlwdGlvbnM6W10sdHlwZTplLGRvYzpuLG5vdGU6aX06KFFhLnN0YXRlc1t0XS5kb2N8fChRYS5zdGF0ZXNbdF0uZG9jPW4pLFFhLnN0YXRlc1t0XS50eXBlfHwoUWEuc3RhdGVzW3RdLnR5cGU9ZSkpLHImJihjLmluZm8oIkFkZGluZyBzdGF0ZSAiLHQsciksInN0cmluZyI9PXR5cGVvZiByJiZubyh0LHIudHJpbSgpKSwib2JqZWN0Ij09PVZhKHIpJiZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBubyh0LGUudHJpbSgpKX0pKSksaSYmKFFhLnN0YXRlc1t0XS5ub3RlPWkpfSx0bz1mdW5jdGlvbigpe1FhPShaYT17cm9vdDp7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319fSkucm9vdCxRYT1aYS5yb290LEthPTAsMCxpbz1bXX0sZW89ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQsaT1lLGE9ImRlZmF1bHQiLG89ImRlZmF1bHQiOyJbKl0iPT09dCYmKHI9InN0YXJ0IisgKytLYSxhPSJzdGFydCIpLCJbKl0iPT09ZSYmKGk9ImVuZCIrS2Esbz0iZW5kIiksSmEocixhKSxKYShpLG8pLFFhLnJlbGF0aW9ucy5wdXNoKHtpZDE6cixpZDI6aSx0aXRsZTpufSl9LG5vPWZ1bmN0aW9uKHQsZSl7dmFyIG49UWEuc3RhdGVzW3RdLHI9ZTsiOiI9PT1yWzBdJiYocj1yLnN1YnN0cigxKS50cmltKCkpLG4uZGVzY3JpcHRpb25zLnB1c2gocil9LHJvPTAsaW89W10sYW89IlRCIixvbz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5zdGF0ZX0sYWRkU3RhdGU6SmEsY2xlYXI6dG8sZ2V0U3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIFFhLnN0YXRlc1t0XX0sZ2V0U3RhdGVzOmZ1bmN0aW9uKCl7cmV0dXJuIFFhLnN0YXRlc30sZ2V0UmVsYXRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIFFhLnJlbGF0aW9uc30sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBpb30sZ2V0RGlyZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGFvfSxhZGRSZWxhdGlvbjplbyxnZXREaXZpZGVySWQ6ZnVuY3Rpb24oKXtyZXR1cm4iZGl2aWRlci1pZC0iKyArK3JvfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7YW89dH0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/dC5zdWJzdHIoMikudHJpbSgpOnQudHJpbSgpfSxsaW5lVHlwZTp7TElORTowLERPVFRFRF9MSU5FOjF9LHJlbGF0aW9uVHlwZTp7QUdHUkVHQVRJT046MCxFWFRFTlNJT046MSxDT01QT1NJVElPTjoyLERFUEVOREVOQ1k6M30sbG9nRG9jdW1lbnRzOmZ1bmN0aW9uKCl7Yy5pbmZvKCJEb2N1bWVudHMgPSAiLFphKX0sZ2V0Um9vdERvYzpmdW5jdGlvbigpe3JldHVybiBYYX0sc2V0Um9vdERvYzpmdW5jdGlvbih0KXtjLmluZm8oIlNldHRpbmcgcm9vdCBkb2MiLHQpLFhhPXR9LGdldFJvb3REb2NWMjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUsbixyKXtpZigicmVsYXRpb24iPT09bi5zdG10KXQoZSxuLnN0YXRlMSwhMCksdChlLG4uc3RhdGUyLCExKTtlbHNlIGlmKCJzdGF0ZSI9PT1uLnN0bXQmJiJbKl0iPT09bi5pZCYmKG4uaWQ9cj9lLmlkKyJfc3RhcnQiOmUuaWQrIl9lbmQiLG4uc3RhcnQ9ciksbi5kb2Mpe3ZhciBpPVtdLGE9MCxvPVtdO2ZvcihhPTA7YTxuLmRvYy5sZW5ndGg7YSsrKWlmKCJkaXZpZGVyIj09PW4uZG9jW2FdLnR5cGUpe3ZhciBzPUdhKG4uZG9jW2FdKTtzLmRvYz1HYShvKSxpLnB1c2gocyksbz1bXX1lbHNlIG8ucHVzaChuLmRvY1thXSk7aWYoaS5sZW5ndGg+MCYmby5sZW5ndGg+MCl7dmFyIGM9e3N0bXQ6InN0YXRlIixpZDpSKCksdHlwZToiZGl2aWRlciIsZG9jOkdhKG8pfTtpLnB1c2goR2EoYykpLG4uZG9jPWl9bi5kb2MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlLCEwKX0pKX19KHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOlhhfSwhMCkse2lkOiJyb290Iixkb2M6WGF9fSxleHRyYWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9dC5kb2M/dC5kb2M6dCxjLmluZm8oZSksdG8oKSxjLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmSmEodC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJmVvKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfX0sc289e30sY289ZnVuY3Rpb24odCxlKXtzb1t0XT1lfSx1bz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLF90KCkuc3RhdGUudGV4dEhlaWdodCsxLjMqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLF90KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuZGVzY3JpcHRpb25zWzBdKS5ub2RlKCkuZ2V0QkJveCgpLHI9bi5oZWlnaHQsaT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLF90KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIscisuNCpfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luK190KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJzdGF0ZS1kZXNjcmlwdGlvbiIpLGE9ITAsbz0hMDtlLmRlc2NyaXB0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXthfHwoIWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IiwyKl90KCkuc3RhdGUucGFkZGluZykudGV4dChlKTtufHxyLmF0dHIoImR5IixfdCgpLnN0YXRlLnRleHRIZWlnaHQpfShpLHQsbyksbz0hMSksYT0hMX0pKTt2YXIgcz10LmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkxIixfdCgpLnN0YXRlLnBhZGRpbmcrcitfdCgpLnN0YXRlLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLF90KCkuc3RhdGUucGFkZGluZytyK190KCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJjbGFzcyIsImRlc2NyLWRpdmlkZXIiKSxjPWkubm9kZSgpLmdldEJCb3goKSx1PU1hdGgubWF4KGMud2lkdGgsbi53aWR0aCk7cmV0dXJuIHMuYXR0cigieDIiLHUrMypfdCgpLnN0YXRlLnBhZGRpbmcpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIix1KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGMuaGVpZ2h0K3IrMipfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInJ4IixfdCgpLnN0YXRlLnJhZGl1cyksdH0sbG89ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9X3QoKS5zdGF0ZS5wYWRkaW5nLGE9MipfdCgpLnN0YXRlLnBhZGRpbmcsbz10Lm5vZGUoKS5nZXRCQm94KCkscz1vLndpZHRoLGM9by54LHU9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnRpdGxlU2hpZnQpLmF0dHIoImZvbnQtc2l6ZSIsX3QoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5pZCksbD11Lm5vZGUoKS5nZXRCQm94KCkud2lkdGgrYSxoPU1hdGgubWF4KGwscyk7aD09PXMmJihoKz1hKTt2YXIgZj10Lm5vZGUoKS5nZXRCQm94KCk7ZS5kb2Mscj1jLWksbD5zJiYocj0ocy1oKS8yK2kpLE1hdGguYWJzKGMtZi54KTxpJiZsPnMmJihyPWMtKGwtcykvMik7dmFyIGQ9MS1fdCgpLnN0YXRlLnRleHRIZWlnaHQ7cmV0dXJuIHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsZCkuYXR0cigiY2xhc3MiLG4/ImFsdC1jb21wb3NpdCI6ImNvbXBvc2l0IikuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0K190KCkuc3RhdGUudGl0bGVTaGlmdCsxKS5hdHRyKCJyeCIsIjAiKSx1LmF0dHIoIngiLHIraSksbDw9cyYmdS5hdHRyKCJ4IixjKyhoLWEpLzItbC8yK2kpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsX3QoKS5zdGF0ZS50aXRsZVNoaWZ0LV90KCkuc3RhdGUudGV4dEhlaWdodC1fdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLDMqX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJyeCIsX3QoKS5zdGF0ZS5yYWRpdXMpLHQuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIscikuYXR0cigieSIsX3QoKS5zdGF0ZS50aXRsZVNoaWZ0LV90KCkuc3RhdGUudGV4dEhlaWdodC1fdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixoKS5hdHRyKCJoZWlnaHQiLGYuaGVpZ2h0KzMrMipfdCgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixfdCgpLnN0YXRlLnJhZGl1cyksdH0saG89ZnVuY3Rpb24odCxlKXtlLmF0dHIoImNsYXNzIiwic3RhdGUtbm90ZSIpO3ZhciBuPWUuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsMCkuYXR0cigieSIsX3QoKS5zdGF0ZS5wYWRkaW5nKSxyPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPTAsYT1yLmFwcGVuZCgidGV4dCIpO2Euc3R5bGUoInRleHQtYW5jaG9yIiwic3RhcnQiKSxhLmF0dHIoImNsYXNzIiwibm90ZVRleHQiKTt2YXIgbz10LnJlcGxhY2UoL1xyXG4vZywiPGJyLz4iKSxzPShvPW8ucmVwbGFjZSgvXG4vZywiPGJyLz4iKSkuc3BsaXQoXy5saW5lQnJlYWtSZWdleCksYz0xLjI1Kl90KCkuc3RhdGUubm90ZU1hcmdpbix1PSEwLGw9ITEsaD12b2lkIDA7dHJ5e2Zvcih2YXIgZixkPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0oZj1kLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIHA9Zi52YWx1ZS50cmltKCk7aWYocC5sZW5ndGg+MCl7dmFyIHk9YS5hcHBlbmQoInRzcGFuIik7aWYoeS50ZXh0KHApLDA9PT1jKWMrPXkubm9kZSgpLmdldEJCb3goKS5oZWlnaHQ7aSs9Yyx5LmF0dHIoIngiLGUrX3QoKS5zdGF0ZS5ub3RlTWFyZ2luKSx5LmF0dHIoInkiLG4raSsxLjI1Kl90KCkuc3RhdGUubm90ZU1hcmdpbil9fX1jYXRjaCh0KXtsPSEwLGg9dH1maW5hbGx5e3RyeXt1fHxudWxsPT1kLnJldHVybnx8ZC5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgaH19cmV0dXJue3RleHRXaWR0aDphLm5vZGUoKS5nZXRCQm94KCkud2lkdGgsdGV4dEhlaWdodDppfX0odCwwLDAsZS5hcHBlbmQoImciKSksaT1yLnRleHRXaWR0aCxhPXIudGV4dEhlaWdodDtyZXR1cm4gbi5hdHRyKCJoZWlnaHQiLGErMipfdCgpLnN0YXRlLm5vdGVNYXJnaW4pLG4uYXR0cigid2lkdGgiLGkrMipfdCgpLnN0YXRlLm5vdGVNYXJnaW4pLG59LGZvPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5pZCxyPXtpZDpuLGxhYmVsOmUuaWQsd2lkdGg6MCxoZWlnaHQ6MH0saT10LmFwcGVuZCgiZyIpLmF0dHIoImlkIixuKS5hdHRyKCJjbGFzcyIsInN0YXRlR3JvdXAiKTsic3RhcnQiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJzdGFydC1zdGF0ZSIpLmF0dHIoInIiLF90KCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN4IixfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3kiLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0KX0oaSksImVuZCI9PT1lLnR5cGUmJmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImVuZC1zdGF0ZS1vdXRlciIpLmF0dHIoInIiLF90KCkuc3RhdGUuc2l6ZVVuaXQrX3QoKS5zdGF0ZS5taW5pUGFkZGluZykuYXR0cigiY3giLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0K190KCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN5IixfdCgpLnN0YXRlLnBhZGRpbmcrX3QoKS5zdGF0ZS5zaXplVW5pdCtfdCgpLnN0YXRlLm1pbmlQYWRkaW5nKSx0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtaW5uZXIiKS5hdHRyKCJyIixfdCgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsX3QoKS5zdGF0ZS5wYWRkaW5nK190KCkuc3RhdGUuc2l6ZVVuaXQrMikuYXR0cigiY3kiLF90KCkuc3RhdGUucGFkZGluZytfdCgpLnN0YXRlLnNpemVVbml0KzIpfShpKSwiZm9yayIhPT1lLnR5cGUmJiJqb2luIiE9PWUudHlwZXx8ZnVuY3Rpb24odCxlKXt2YXIgbj1fdCgpLnN0YXRlLmZvcmtXaWR0aCxyPV90KCkuc3RhdGUuZm9ya0hlaWdodDtpZihlLnBhcmVudElkKXt2YXIgaT1uO249cixyPWl9dC5hcHBlbmQoInJlY3QiKS5zdHlsZSgic3Ryb2tlIiwiYmxhY2siKS5zdHlsZSgiZmlsbCIsImJsYWNrIikuYXR0cigid2lkdGgiLG4pLmF0dHIoImhlaWdodCIscikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpfShpLGUpLCJub3RlIj09PWUudHlwZSYmaG8oZS5ub3RlLnRleHQsaSksImRpdmlkZXIiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJncmV5Iikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzIikuYXR0cigieDEiLF90KCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDIiLDIqX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDApfShpKSwiZGVmYXVsdCI9PT1lLnR5cGUmJjA9PT1lLmRlc2NyaXB0aW9ucy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKl90KCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsX3QoKS5zdGF0ZS50ZXh0SGVpZ2h0KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJmb250LXNpemUiLF90KCkuc3RhdGUuZm9udFNpemUpLmF0dHIoImNsYXNzIiwic3RhdGUtdGl0bGUiKS50ZXh0KGUuaWQpLHI9bi5ub2RlKCkuZ2V0QkJveCgpO3QuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigieCIsX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixfdCgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoIndpZHRoIixyLndpZHRoKzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHIuaGVpZ2h0KzIqX3QoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJyeCIsX3QoKS5zdGF0ZS5yYWRpdXMpfShpLGUpLCJkZWZhdWx0Ij09PWUudHlwZSYmZS5kZXNjcmlwdGlvbnMubGVuZ3RoPjAmJnVvKGksZSk7dmFyIGE9aS5ub2RlKCkuZ2V0QkJveCgpO3JldHVybiByLndpZHRoPWEud2lkdGgrMipfdCgpLnN0YXRlLnBhZGRpbmcsci5oZWlnaHQ9YS5oZWlnaHQrMipfdCgpLnN0YXRlLnBhZGRpbmcsY28obixyKSxyfSxwbz0wO3FhLnBhcnNlci55eT1vbzt2YXIgeW89e30sZ289ZnVuY3Rpb24gdChlLG4scixpKXt2YXIgYSxvPW5ldyBVdC5hLkdyYXBoKHtjb21wb3VuZDohMCxtdWx0aWdyYXBoOiEwfSkscz0hMDtmb3IoYT0wO2E8ZS5sZW5ndGg7YSsrKWlmKCJyZWxhdGlvbiI9PT1lW2FdLnN0bXQpe3M9ITE7YnJlYWt9cj9vLnNldEdyYXBoKHtyYW5rZGlyOiJMUiIsbXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZXI6InRpZ2h0LXRyZWUiLHJhbmtzZXA6cz8xOkhhLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpzPzE6NTAsaXNNdWx0aUdyYXBoOiEwfSk6by5zZXRHcmFwaCh7cmFua2RpcjoiVEIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua3NlcDpzPzE6SGEuZWRnZUxlbmd0aEZhY3Rvcixub2RlU2VwOnM/MTo1MCxyYW5rZXI6InRpZ2h0LXRyZWUiLGlzTXVsdGlHcmFwaDohMH0pLG8uc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKSxvby5leHRyYWN0KGUpO2Zvcih2YXIgdT1vby5nZXRTdGF0ZXMoKSxsPW9vLmdldFJlbGF0aW9ucygpLGY9T2JqZWN0LmtleXModSksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD11W2ZbZF1dO3ImJihwLnBhcmVudElkPXIpO3ZhciB5PXZvaWQgMDtpZihwLmRvYyl7dmFyIGc9bi5hcHBlbmQoImciKS5hdHRyKCJpZCIscC5pZCkuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7eT10KHAuZG9jLGcscC5pZCwhaSk7dmFyIHY9KGc9bG8oZyxwLGkpKS5ub2RlKCkuZ2V0QkJveCgpO3kud2lkdGg9di53aWR0aCx5LmhlaWdodD12LmhlaWdodCtIYS5wYWRkaW5nLzIseW9bcC5pZF09e3k6SGEuY29tcG9zaXRUaXRsZVNpemV9fWVsc2UgeT1mbyhuLHApO2lmKHAubm90ZSl7dmFyIG09e2Rlc2NyaXB0aW9uczpbXSxpZDpwLmlkKyItbm90ZSIsbm90ZTpwLm5vdGUsdHlwZToibm90ZSJ9LGI9Zm8obixtKTsibGVmdCBvZiI9PT1wLm5vdGUucG9zaXRpb24/KG8uc2V0Tm9kZSh5LmlkKyItbm90ZSIsYiksby5zZXROb2RlKHkuaWQseSkpOihvLnNldE5vZGUoeS5pZCx5KSxvLnNldE5vZGUoeS5pZCsiLW5vdGUiLGIpKSxvLnNldFBhcmVudCh5LmlkLHkuaWQrIi1ncm91cCIpLG8uc2V0UGFyZW50KHkuaWQrIi1ub3RlIix5LmlkKyItZ3JvdXAiKX1lbHNlIG8uc2V0Tm9kZSh5LmlkLHkpfWMuZGVidWcoIkNvdW50PSIsby5ub2RlQ291bnQoKSxvKTt2YXIgeD0wO2wuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU7eCsrLGMuZGVidWcoIlNldHRpbmcgZWRnZSIsdCksby5zZXRFZGdlKHQuaWQxLHQuaWQyLHtyZWxhdGlvbjp0LHdpZHRoOihlPXQudGl0bGUsZT9lLmxlbmd0aCpIYS5mb250U2l6ZUZhY3RvcjoxKSxoZWlnaHQ6SGEubGFiZWxIZWlnaHQqXy5nZXRSb3dzKHQudGl0bGUpLmxlbmd0aCxsYWJlbHBvczoiYyJ9LCJpZCIreCl9KSksWXQuYS5sYXlvdXQobyksYy5kZWJ1ZygiR3JhcGggYWZ0ZXIgbGF5b3V0IixvLm5vZGVzKCkpO3ZhciBrPW4ubm9kZSgpO28ubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1vLm5vZGUodCk/KGMud2FybigiTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShvLm5vZGUodCkpKSxPYmplY3QoaC5zZWxlY3QpKCIjIitrLmlkKyIgIyIrdCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKG8ubm9kZSh0KS54LW8ubm9kZSh0KS53aWR0aC8yKSsiLCIrKG8ubm9kZSh0KS55Kyh5b1t0XT95b1t0XS55OjApLW8ubm9kZSh0KS5oZWlnaHQvMikrIiApIiksT2JqZWN0KGguc2VsZWN0KSgiIyIray5pZCsiICMiK3QpLmF0dHIoImRhdGEteC1zaGlmdCIsby5ub2RlKHQpLngtby5ub2RlKHQpLndpZHRoLzIpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiMiK2suaWQrIiAjIit0KyIgLmRpdmlkZXIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudEVsZW1lbnQsbj0wLHI9MDtlJiYoZS5wYXJlbnRFbGVtZW50JiYobj1lLnBhcmVudEVsZW1lbnQuZ2V0QkJveCgpLndpZHRoKSxyPXBhcnNlSW50KGUuZ2V0QXR0cmlidXRlKCJkYXRhLXgtc2hpZnQiKSwxMCksTnVtYmVyLmlzTmFOKHIpJiYocj0wKSksdC5zZXRBdHRyaWJ1dGUoIngxIiwwLXIrOCksdC5zZXRBdHRyaWJ1dGUoIngyIixuLXItOCl9KSkpOmMuZGVidWcoIk5vIE5vZGUgIit0KyI6ICIrSlNPTi5zdHJpbmdpZnkoby5ub2RlKHQpKSl9KSk7dmFyIHc9ay5nZXRCQm94KCk7by5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PW8uZWRnZSh0KSYmKGMuZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KG8uZWRnZSh0KSkpLGZ1bmN0aW9uKHQsZSxuKXtlLnBvaW50cz1lLnBvaW50cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTt2YXIgcj1lLnBvaW50cyxpPU9iamVjdChoLmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKGguY3VydmVCYXNpcyksYT10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGkocikpLmF0dHIoImlkIiwiZWRnZSIrcG8pLmF0dHIoImNsYXNzIiwidHJhbnNpdGlvbiIpLG89IiI7aWYoX3QoKS5zdGF0ZS5hcnJvd01hcmtlckFic29sdXRlJiYobz0obz0obz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxhLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitvKyIjIitmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBvby5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlIG9vLnJlbGF0aW9uVHlwZS5FWFRFTlNJT046cmV0dXJuImV4dGVuc2lvbiI7Y2FzZSBvby5yZWxhdGlvblR5cGUuQ09NUE9TSVRJT046cmV0dXJuImNvbXBvc2l0aW9uIjtjYXNlIG9vLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19KG9vLnJlbGF0aW9uVHlwZS5ERVBFTkRFTkNZKSsiRW5kKSIpLHZvaWQgMCE9PW4udGl0bGUpe2Zvcih2YXIgcz10LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwic3RhdGVMYWJlbCIpLHU9Vi5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyksbD11LngsZj11LnksZD1fLmdldFJvd3Mobi50aXRsZSkscD0wLHk9W10sZz0wLHY9MCxtPTA7bTw9ZC5sZW5ndGg7bSsrKXt2YXIgYj1zLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dChkW21dKS5hdHRyKCJ4IixsKS5hdHRyKCJ5IixmK3ApLHg9Yi5ub2RlKCkuZ2V0QkJveCgpO2lmKGc9TWF0aC5tYXgoZyx4LndpZHRoKSx2PU1hdGgubWluKHYseC54KSxjLmluZm8oeC54LGwsZitwKSwwPT09cCl7dmFyIGs9Yi5ub2RlKCkuZ2V0QkJveCgpO3A9ay5oZWlnaHQsYy5pbmZvKCJUaXRsZSBoZWlnaHQiLHAsZil9eS5wdXNoKGIpfXZhciB3PXAqZC5sZW5ndGg7aWYoZC5sZW5ndGg+MSl7dmFyIEU9KGQubGVuZ3RoLTEpKnAqLjU7eS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmF0dHIoInkiLGYrZSpwLUUpfSkpLHc9cCpkLmxlbmd0aH12YXIgVD1zLm5vZGUoKS5nZXRCQm94KCk7cy5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJjbGFzcyIsImJveCIpLmF0dHIoIngiLGwtZy8yLV90KCkuc3RhdGUucGFkZGluZy8yKS5hdHRyKCJ5IixmLXcvMi1fdCgpLnN0YXRlLnBhZGRpbmcvMi0zLjUpLmF0dHIoIndpZHRoIixnK190KCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0Iix3K190KCkuc3RhdGUucGFkZGluZyksYy5pbmZvKFQpfXBvKyt9KG4sby5lZGdlKHQpLG8uZWRnZSh0KS5yZWxhdGlvbikpfSkpLHc9ay5nZXRCQm94KCk7dmFyIEU9e2lkOnJ8fCJyb290IixsYWJlbDpyfHwicm9vdCIsd2lkdGg6MCxoZWlnaHQ6MH07cmV0dXJuIEUud2lkdGg9dy53aWR0aCsyKkhhLnBhZGRpbmcsRS5oZWlnaHQ9dy5oZWlnaHQrMipIYS5wYWRkaW5nLGMuZGVidWcoIkRvYyByZW5kZXJlZCIsRSxvKSxFfSx2bz1mdW5jdGlvbigpe30sbW89ZnVuY3Rpb24odCxlKXtIYT1fdCgpLnN0YXRlLHFhLnBhcnNlci55eS5jbGVhcigpLHFhLnBhcnNlci5wYXJzZSh0KSxjLmRlYnVnKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK3QpO3ZhciBuPU9iamVjdChoLnNlbGVjdCkoIltpZD0nIi5jb25jYXQoZSwiJ10iKSk7bi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZGVwZW5kZW5jeUVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpLG5ldyBVdC5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtkaXI6IlJMIn0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7dmFyIHI9b28uZ2V0Um9vdERvYygpO2dvKHIsbix2b2lkIDAsITEpO3ZhciBpPUhhLnBhZGRpbmcsYT1uLm5vZGUoKS5nZXRCQm94KCksbz1hLndpZHRoKzIqaSxzPWEuaGVpZ2h0KzIqaTtXKG4scywxLjc1Km8sSGEudXNlTWF4V2lkdGgpLG4uYXR0cigidmlld0JveCIsIiIuY29uY2F0KGEueC1IYS5wYWRkaW5nLCIgICIpLmNvbmNhdChhLnktSGEucGFkZGluZywiICIpK28rIiAiK3MpfSxibz17fSx4bz17fSxfbz1mdW5jdGlvbih0LGUsbixyKXtpZigicm9vdCIhPT1uLmlkKXt2YXIgaT0icmVjdCI7ITA9PT1uLnN0YXJ0JiYoaT0ic3RhcnQiKSwhMT09PW4uc3RhcnQmJihpPSJlbmQiKSwiZGVmYXVsdCIhPT1uLnR5cGUmJihpPW4udHlwZSkseG9bbi5pZF18fCh4b1tuLmlkXT17aWQ6bi5pZCxzaGFwZTppLGRlc2NyaXB0aW9uOm4uaWQsY2xhc3Nlczoic3RhdGVkaWFncmFtLXN0YXRlIn0pLG4uZGVzY3JpcHRpb24mJihBcnJheS5pc0FycmF5KHhvW24uaWRdLmRlc2NyaXB0aW9uKT8oeG9bbi5pZF0uc2hhcGU9InJlY3RXaXRoVGl0bGUiLHhvW24uaWRdLmRlc2NyaXB0aW9uLnB1c2gobi5kZXNjcmlwdGlvbikpOnhvW24uaWRdLmRlc2NyaXB0aW9uLmxlbmd0aD4wPyh4b1tuLmlkXS5zaGFwZT0icmVjdFdpdGhUaXRsZSIseG9bbi5pZF0uZGVzY3JpcHRpb249PT1uLmlkP3hvW24uaWRdLmRlc2NyaXB0aW9uPVtuLmRlc2NyaXB0aW9uXTp4b1tuLmlkXS5kZXNjcmlwdGlvbj1beG9bbi5pZF0uZGVzY3JpcHRpb24sbi5kZXNjcmlwdGlvbl0pOih4b1tuLmlkXS5zaGFwZT0icmVjdCIseG9bbi5pZF0uZGVzY3JpcHRpb249bi5kZXNjcmlwdGlvbikpLCF4b1tuLmlkXS50eXBlJiZuLmRvYyYmKGMuaW5mbygiU2V0dGluZyBjbHVzdGVyIGZvciAiLG4uaWQsRW8obikpLHhvW24uaWRdLnR5cGU9Imdyb3VwIix4b1tuLmlkXS5kaXI9RW8obikseG9bbi5pZF0uc2hhcGU9ImRpdmlkZXIiPT09bi50eXBlPyJkaXZpZGVyIjoicm91bmRlZFdpdGhUaXRsZSIseG9bbi5pZF0uY2xhc3Nlcz14b1tuLmlkXS5jbGFzc2VzKyIgIisocj8ic3RhdGVkaWFncmFtLWNsdXN0ZXIgc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0Ijoic3RhdGVkaWFncmFtLWNsdXN0ZXIiKSk7dmFyIGE9e2xhYmVsU3R5bGU6IiIsc2hhcGU6eG9bbi5pZF0uc2hhcGUsbGFiZWxUZXh0OnhvW24uaWRdLmRlc2NyaXB0aW9uLGNsYXNzZXM6eG9bbi5pZF0uY2xhc3NlcyxzdHlsZToiIixpZDpuLmlkLGRpcjp4b1tuLmlkXS5kaXIsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLSIra28sdHlwZTp4b1tuLmlkXS50eXBlLHBhZGRpbmc6MTV9O2lmKG4ubm90ZSl7dmFyIG89e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGUiLGxhYmVsVGV4dDpuLm5vdGUudGV4dCxjbGFzc2VzOiJzdGF0ZWRpYWdyYW0tbm90ZSIsc3R5bGU6IiIsaWQ6bi5pZCsiLS0tLW5vdGUtIitrbyxkb21JZDoic3RhdGUtIituLmlkKyItLS0tbm90ZS0iK2tvLHR5cGU6eG9bbi5pZF0udHlwZSxwYWRkaW5nOjE1fSxzPXtsYWJlbFN0eWxlOiIiLHNoYXBlOiJub3RlR3JvdXAiLGxhYmVsVGV4dDpuLm5vdGUudGV4dCxjbGFzc2VzOnhvW24uaWRdLmNsYXNzZXMsc3R5bGU6IiIsaWQ6bi5pZCsiLS0tLXBhcmVudCIsZG9tSWQ6InN0YXRlLSIrbi5pZCsiLS0tLXBhcmVudC0iK2tvLHR5cGU6Imdyb3VwIixwYWRkaW5nOjB9O2tvKyssdC5zZXROb2RlKG4uaWQrIi0tLS1wYXJlbnQiLHMpLHQuc2V0Tm9kZShvLmlkLG8pLHQuc2V0Tm9kZShuLmlkLGEpLHQuc2V0UGFyZW50KG4uaWQsbi5pZCsiLS0tLXBhcmVudCIpLHQuc2V0UGFyZW50KG8uaWQsbi5pZCsiLS0tLXBhcmVudCIpO3ZhciB1PW4uaWQsbD1vLmlkOyJsZWZ0IG9mIj09PW4ubm90ZS5wb3NpdGlvbiYmKHU9by5pZCxsPW4uaWQpLHQuc2V0RWRnZSh1LGwse2Fycm93aGVhZDoibm9uZSIsYXJyb3dUeXBlOiIiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsY2xhc3NlczoidHJhbnNpdGlvbiBub3RlLWVkZ2UiLGFycm93aGVhZFN0eWxlOiJmaWxsOiAjMzMzIixsYWJlbHBvczoiYyIsbGFiZWxUeXBlOiJ0ZXh0Iix0aGlja25lc3M6Im5vcm1hbCJ9KX1lbHNlIHQuc2V0Tm9kZShuLmlkLGEpfWUmJiJyb290IiE9PWUuaWQmJihjLnRyYWNlKCJTZXR0aW5nIG5vZGUgIixuLmlkLCIgdG8gYmUgY2hpbGQgb2YgaXRzIHBhcmVudCAiLGUuaWQpLHQuc2V0UGFyZW50KG4uaWQsZS5pZCkpLG4uZG9jJiYoYy50cmFjZSgiQWRkaW5nIG5vZGVzIGNoaWxkcmVuICIpLHdvKHQsbixuLmRvYywhcikpfSxrbz0wLHdvPWZ1bmN0aW9uKHQsZSxuLHIpe2MudHJhY2UoIml0ZW1zIixuKSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2lmKCJzdGF0ZSI9PT1uLnN0bXR8fCJkZWZhdWx0Ij09PW4uc3RtdClfbyh0LGUsbixyKTtlbHNlIGlmKCJyZWxhdGlvbiI9PT1uLnN0bXQpe19vKHQsZSxuLnN0YXRlMSxyKSxfbyh0LGUsbi5zdGF0ZTIscik7dmFyIGk9e2lkOiJlZGdlIitrbyxhcnJvd2hlYWQ6Im5vcm1hbCIsYXJyb3dUeXBlRW5kOiJhcnJvd19iYXJiIixzdHlsZToiZmlsbDpub25lIixsYWJlbFN0eWxlOiIiLGxhYmVsOm4uZGVzY3JpcHRpb24sYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIixjbGFzc2VzOiJ0cmFuc2l0aW9uIn0sYT1uLnN0YXRlMS5pZCxvPW4uc3RhdGUyLmlkO3Quc2V0RWRnZShhLG8saSxrbyksa28rK319KSl9LEVvPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZXx8IlRCIjtpZih0LmRvYylmb3IodmFyIHI9MDtyPHQuZG9jLmxlbmd0aDtyKyspe3ZhciBpPXQuZG9jW3JdOyJkaXIiPT09aS5zdG10JiYobj1pLnZhbHVlKX1yZXR1cm4gbn0sVG89ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLG49MDtuPGUubGVuZ3RoO24rKylib1tlW25dXT10W2Vbbl1dfSxDbz1mdW5jdGlvbih0LGUpe2MuaW5mbygiRHJhd2luZyBzdGF0ZSBkaWFncmFtICh2MikiLGUpLG9vLmNsZWFyKCkseG89e307dmFyIG49V2EuYS5wYXJzZXI7bi55eT1vbyxuLnBhcnNlKHQpO3ZhciByPW9vLmdldERpcmVjdGlvbigpO3ZvaWQgMD09PXImJihyPSJMUiIpO3ZhciBpPV90KCkuc3RhdGUsYT1pLm5vZGVTcGFjaW5nfHw1MCxvPWkucmFua1NwYWNpbmd8fDUwO2MuaW5mbyhvby5nZXRSb290RG9jVjIoKSksb28uZXh0cmFjdChvby5nZXRSb290RG9jVjIoKSksYy5pbmZvKG9vLmdldFJvb3REb2NWMigpKTt2YXIgcz1uZXcgVXQuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOkVvKG9vLmdldFJvb3REb2NWMigpKSxub2Rlc2VwOmEscmFua3NlcDpvLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO19vKHMsdm9pZCAwLG9vLmdldFJvb3REb2NWMigpLCEwKTt2YXIgdT1PYmplY3QoaC5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLGw9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSsiIGciKTtVZShsLHMsWyJiYXJiIl0sInN0YXRlZGlhZ3JhbSIsZSk7dmFyIGY9dS5ub2RlKCkuZ2V0QkJveCgpLGQ9Zi53aWR0aCsxNixwPWYuaGVpZ2h0KzE2O3UuYXR0cigiY2xhc3MiLCJzdGF0ZWRpYWdyYW0iKTt2YXIgeT11Lm5vZGUoKS5nZXRCQm94KCk7Vyh1LHAsMS43NSpkLGkudXNlTWF4V2lkdGgpO3ZhciBnPSIiLmNvbmNhdCh5LngtOCwiICIpLmNvbmNhdCh5LnktOCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApO2MuZGVidWcoInZpZXdCb3ggIi5jb25jYXQoZykpLHUuYXR0cigidmlld0JveCIsZyk7Zm9yKHZhciB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLG09MDttPHYubGVuZ3RoO20rKyl7dmFyIGI9dlttXSx4PWIuZ2V0QkJveCgpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtfLnNldEF0dHJpYnV0ZSgicngiLDApLF8uc2V0QXR0cmlidXRlKCJyeSIsMCksXy5zZXRBdHRyaWJ1dGUoIndpZHRoIix4LndpZHRoKSxfLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix4LmhlaWdodCksYi5pbnNlcnRCZWZvcmUoXyxiLmZpcnN0Q2hpbGQpfX07ZnVuY3Rpb24gU28odCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49bmV3IEFycmF5KHQubGVuZ3RoKTtlPHQubGVuZ3RoO2UrKyluW2VdPXRbZV07cmV0dXJuIG59fSh0KXx8ZnVuY3Rpb24odCl7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdCh0KXx8IltvYmplY3QgQXJndW1lbnRzXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIEFvPSIiLE1vPSIiLE9vPVtdLEJvPVtdLE5vPVtdLERvPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PSEwLGU9MDtlPE5vLmxlbmd0aDtlKyspTm9bZV0ucHJvY2Vzc2VkLHQ9dCYmTm9bZV0ucHJvY2Vzc2VkO3JldHVybiB0fSxMbz17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ZzLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxnZXRDb25maWc6ZnVuY3Rpb24oKXtyZXR1cm4gX3QoKS5qb3VybmV5fSxjbGVhcjpmdW5jdGlvbigpe09vLmxlbmd0aD0wLEJvLmxlbmd0aD0wLE1vPSIiLEFvPSIiLE5vLmxlbmd0aD0wfSxzZXRUaXRsZTpmdW5jdGlvbih0KXtBbz10fSxnZXRUaXRsZTpmdW5jdGlvbigpe3JldHVybiBBb30sYWRkU2VjdGlvbjpmdW5jdGlvbih0KXtNbz10LE9vLnB1c2godCl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIE9vfSxnZXRUYXNrczpmdW5jdGlvbigpe2Zvcih2YXIgdD1EbygpLGU9MDshdCYmZTwxMDA7KXQ9RG8oKSxlKys7cmV0dXJuIEJvLnB1c2guYXBwbHkoQm8sTm8pLEJvfSxhZGRUYXNrOmZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5zdWJzdHIoMSkuc3BsaXQoIjoiKSxyPTAsaT1bXTsxPT09bi5sZW5ndGg/KHI9TnVtYmVyKG5bMF0pLGk9W10pOihyPU51bWJlcihuWzBdKSxpPW5bMV0uc3BsaXQoIiwiKSk7dmFyIGE9aS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyaW0oKX0pKSxvPXtzZWN0aW9uOk1vLHR5cGU6TW8scGVvcGxlOmEsdGFzazp0LHNjb3JlOnJ9O05vLnB1c2gobyl9LGFkZFRhc2tPcmc6ZnVuY3Rpb24odCl7dmFyIGU9e3NlY3Rpb246TW8sdHlwZTpNbyxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfTtCby5wdXNoKGUpfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gdD1bXSxCby5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnBlb3BsZSYmdC5wdXNoLmFwcGx5KHQsU28oZS5wZW9wbGUpKX0pKSxTbyhuZXcgU2V0KHQpKS5zb3J0KCk7dmFyIHR9fSxJbz1uKDI4KSxSbz1uLm4oSW8pLEZvPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInJlY3QiKTtyZXR1cm4gbi5hdHRyKCJ4IixlLngpLG4uYXR0cigieSIsZS55KSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoIndpZHRoIixlLndpZHRoKSxuLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLG4uYXR0cigicngiLGUucngpLG4uYXR0cigicnkiLGUucnkpLHZvaWQgMCE9PWUuY2xhc3MmJm4uYXR0cigiY2xhc3MiLGUuY2xhc3MpLG59LFBvPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoImNpcmNsZSIpO3JldHVybiBuLmF0dHIoImN4IixlLmN4KSxuLmF0dHIoImN5IixlLmN5KSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoInIiLGUuciksdm9pZCAwIT09bi5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsbi5jbGFzcyksdm9pZCAwIT09ZS50aXRsZSYmbi5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxufSxqbz1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLnRleHQobikscn0sWW89LTEsem89ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCx3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxVbz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyxjKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixjKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjLHUpe2Zvcih2YXIgbD1jLnRhc2tGb250U2l6ZSxoPWMudGFza0ZvbnRGYW1pbHksZj10LnNwbGl0KC88YnJccypcLz8+L2dpKSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqbC1sKihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuYXR0cigiZmlsbCIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbCkuc3R5bGUoImZvbnQtZmFtaWx5IixoKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKW4gaW4gZSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpLCRvPVBvLHFvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgiZyIpLGk9em8oKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPW4ud2lkdGgsaS5oZWlnaHQ9bi5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsRm8ocixpKSxVbyhuKShlLnRleHQscixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LG4sZS5jb2xvdXIpfSxXbz1qbyxWbz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K24ud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7WW8rKzt2YXIgYSxvLHM7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK1lvKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiw0NTApLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxhPWksbz17Y3g6cixjeTozMDArMzAqKDUtZS5zY29yZSksc2NvcmU6ZS5zY29yZX0sYS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KS5hdHRyKCJjeSIsby5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksKHM9YS5hcHBlbmQoImciKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeC01KS5hdHRyKCJjeSIsby5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iikscy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KzUpLmF0dHIoImN5IixvLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxvLnNjb3JlPjM/ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGguYXJjKSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZShNYXRoLlBJLzIqMykuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cygxNS8yLjIpO3QuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28uY3grIiwiKyhvLmN5KzIpKyIpIil9KHMpOm8uc2NvcmU8Mz9mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QoaC5hcmMpKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjUpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmN4KyIsIisoby5jeSs3KSsiKSIpfShzKTpmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixvLmN4LTUpLmF0dHIoInkxIixvLmN5KzcpLmF0dHIoIngyIixvLmN4KzUpLmF0dHIoInkyIixvLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9KHMpO3ZhciBjPXpvKCk7Yy54PWUueCxjLnk9ZS55LGMuZmlsbD1lLmZpbGwsYy53aWR0aD1uLndpZHRoLGMuaGVpZ2h0PW4uaGVpZ2h0LGMuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrZS5udW0sYy5yeD0zLGMucnk9MyxGbyhpLGMpO3ZhciB1PWUueCsxNDtlLnBlb3BsZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmFjdG9yc1t0XSxyPXtjeDp1LGN5OmUueSxyOjcsZmlsbDpuLHN0cm9rZToiIzAwMCIsdGl0bGU6dH07UG8oaSxyKSx1Kz0xMH0pKSxVbyhuKShlLnRhc2ssaSxjLngsYy55LGMud2lkdGgsYy5oZWlnaHQse2NsYXNzOiJ0YXNrIn0sbixlLmNvbG91cil9LEhvPWZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImFycm93aGVhZCIpLmF0dHIoInJlZlgiLDUpLmF0dHIoInJlZlkiLDIpLmF0dHIoIm1hcmtlcldpZHRoIiw2KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDQpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwLDAgViA0IEw2LDIgWiIpfTtJby5wYXJzZXIueXk9TG87dmFyIEdvPXt9O3ZhciBYbz1fdCgpLmpvdXJuZXksWm89X3QoKS5qb3VybmV5LmxlZnRNYXJnaW4sUW89e2RhdGE6e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx2ZXJ0aWNhbFBvczowLHNlcXVlbmNlSXRlbXM6W10saW5pdDpmdW5jdGlvbigpe3RoaXMuc2VxdWVuY2VJdGVtcz1bXSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTB9LHVwZGF0ZVZhbDpmdW5jdGlvbih0LGUsbixyKXt2b2lkIDA9PT10W2VdP3RbZV09bjp0W2VdPXIobix0W2VdKX0sdXBkYXRlQm91bmRzOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGE9X3QoKS5qb3VybmV5LG89dGhpcyxzPTA7dGhpcy5zZXF1ZW5jZUl0ZW1zLmZvckVhY2goKGZ1bmN0aW9uKGMpe3MrKzt2YXIgdT1vLnNlcXVlbmNlSXRlbXMubGVuZ3RoLXMrMTtvLnVwZGF0ZVZhbChjLCJzdGFydHkiLGUtdSphLmJveE1hcmdpbixNYXRoLm1pbiksby51cGRhdGVWYWwoYywic3RvcHkiLHIrdSphLmJveE1hcmdpbixNYXRoLm1heCksby51cGRhdGVWYWwoUW8uZGF0YSwic3RhcnR4Iix0LXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKFFvLmRhdGEsInN0b3B4IixuK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PWkmJihvLnVwZGF0ZVZhbChjLCJzdGFydHgiLHQtdSphLmJveE1hcmdpbixNYXRoLm1pbiksby51cGRhdGVWYWwoYywic3RvcHgiLG4rdSphLmJveE1hcmdpbixNYXRoLm1heCksby51cGRhdGVWYWwoUW8uZGF0YSwic3RhcnR5IixlLXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKFFvLmRhdGEsInN0b3B5IixyK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpKX0pKX0saW5zZXJ0OmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU1hdGgubWluKHQsbiksYT1NYXRoLm1heCh0LG4pLG89TWF0aC5taW4oZSxyKSxzPU1hdGgubWF4KGUscik7dGhpcy51cGRhdGVWYWwoUW8uZGF0YSwic3RhcnR4IixpLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChRby5kYXRhLCJzdGFydHkiLG8sTWF0aC5taW4pLHRoaXMudXBkYXRlVmFsKFFvLmRhdGEsInN0b3B4IixhLE1hdGgubWF4KSx0aGlzLnVwZGF0ZVZhbChRby5kYXRhLCJzdG9weSIscyxNYXRoLm1heCksdGhpcy51cGRhdGVCb3VuZHMoaSxvLGEscyl9LGJ1bXBWZXJ0aWNhbFBvczpmdW5jdGlvbih0KXt0aGlzLnZlcnRpY2FsUG9zPXRoaXMudmVydGljYWxQb3MrdCx0aGlzLmRhdGEuc3RvcHk9dGhpcy52ZXJ0aWNhbFBvc30sZ2V0VmVydGljYWxQb3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52ZXJ0aWNhbFBvc30sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEtvPVhvLnNlY3Rpb25GaWxscyxKbz1Yby5zZWN0aW9uQ29sb3Vycyx0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPV90KCkuam91cm5leSxpPSIiLGE9bisoMipyLmhlaWdodCtyLmRpYWdyYW1NYXJnaW5ZKSxvPTAscz0iI0NDQyIsYz0iYmxhY2siLHU9MCxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBoPWVbbF07aWYoaSE9PWguc2VjdGlvbil7cz1Lb1tvJUtvLmxlbmd0aF0sdT1vJUtvLmxlbmd0aCxjPUpvW28lSm8ubGVuZ3RoXTt2YXIgZj17eDpsKnIudGFza01hcmdpbitsKnIud2lkdGgrWm8seTo1MCx0ZXh0Omguc2VjdGlvbixmaWxsOnMsbnVtOnUsY29sb3VyOmN9O3FvKHQsZixyKSxpPWguc2VjdGlvbixvKyt9dmFyIGQ9aC5wZW9wbGUucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBHb1tlXSYmKHRbZV09R29bZV0pLHR9KSx7fSk7aC54PWwqci50YXNrTWFyZ2luK2wqci53aWR0aCtabyxoLnk9YSxoLndpZHRoPXIuZGlhZ3JhbU1hcmdpblgsaC5oZWlnaHQ9ci5kaWFncmFtTWFyZ2luWSxoLmNvbG91cj1jLGguZmlsbD1zLGgubnVtPXUsaC5hY3RvcnM9ZCxWbyh0LGgsciksUW8uaW5zZXJ0KGgueCxoLnksaC54K2gud2lkdGgrci50YXNrTWFyZ2luLDQ1MCl9fSxlcz1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtYb1tlXT10W2VdfSkpfSxucz1mdW5jdGlvbih0LGUpe3ZhciBuPV90KCkuam91cm5leTtJby5wYXJzZXIueXkuY2xlYXIoKSxJby5wYXJzZXIucGFyc2UodCsiXG4iKSxRby5pbml0KCk7dmFyIHI9T2JqZWN0KGguc2VsZWN0KSgiIyIrZSk7ci5hdHRyKCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSxIbyhyKTt2YXIgaT1Jby5wYXJzZXIueXkuZ2V0VGFza3MoKSxhPUlvLnBhcnNlci55eS5nZXRUaXRsZSgpLG89SW8ucGFyc2VyLnl5LmdldEFjdG9ycygpO2Zvcih2YXIgcyBpbiBHbylkZWxldGUgR29bc107dmFyIGM9MDtvLmZvckVhY2goKGZ1bmN0aW9uKHQpe0dvW3RdPW4uYWN0b3JDb2xvdXJzW2Mlbi5hY3RvckNvbG91cnMubGVuZ3RoXSxjKyt9KSksZnVuY3Rpb24odCl7dmFyIGU9X3QoKS5qb3VybmV5LG49NjA7T2JqZWN0LmtleXMoR28pLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPUdvW3JdOyRvKHQse2N4OjIwLGN5Om4scjo3LGZpbGw6aSxzdHJva2U6IiMwMDAifSk7dmFyIGE9e3g6NDAseTpuKzcsZmlsbDoiIzY2NiIsdGV4dDpyLHRleHRNYXJnaW46NXxlLmJveFRleHRNYXJnaW59O1dvKHQsYSksbis9MjB9KSl9KHIpLFFvLmluc2VydCgwLDAsWm8sNTAqT2JqZWN0LmtleXMoR28pLmxlbmd0aCksdHMocixpLDApO3ZhciB1PVFvLmdldEJvdW5kcygpO2EmJnIuYXBwZW5kKCJ0ZXh0IikudGV4dChhKS5hdHRyKCJ4IixabykuYXR0cigiZm9udC1zaXplIiwiNGV4IikuYXR0cigiZm9udC13ZWlnaHQiLCJib2xkIikuYXR0cigieSIsMjUpO3ZhciBsPXUuc3RvcHktdS5zdGFydHkrMipuLmRpYWdyYW1NYXJnaW5ZLGY9Wm8rdS5zdG9weCsyKm4uZGlhZ3JhbU1hcmdpblg7VyhyLGwsZixuLnVzZU1heFdpZHRoKSxyLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIixabykuYXR0cigieTEiLDQqbi5oZWlnaHQpLmF0dHIoIngyIixmLVpvLTQpLmF0dHIoInkyIiw0Km4uaGVpZ2h0KS5hdHRyKCJzdHJva2Utd2lkdGgiLDQpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigibWFya2VyLWVuZCIsInVybCgjYXJyb3doZWFkKSIpO3ZhciBkPWE/NzA6MDtyLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdCh1LnN0YXJ0eCwiIC0yNSAiKS5jb25jYXQoZiwiICIpLmNvbmNhdChsK2QpKSxyLmF0dHIoInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWluWU1pbiBtZWV0Iiksci5hdHRyKCJoZWlnaHQiLGwrZCsyNSl9LHJzPXt9LGlzPWZ1bmN0aW9uKHQpe09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JzW2VdPXRbZV19KSl9LGFzPWZ1bmN0aW9uKHQsZSl7dHJ5e2MuZGVidWcoIlJlbmVyaW5nIHN2ZyBmb3Igc3ludGF4IGVycm9yXG4iKTt2YXIgbj1PYmplY3QoaC5zZWxlY3QpKCIjIit0KSxyPW4uYXBwZW5kKCJnIik7ci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQxMS4zMTMsMTIzLjMxM2M2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMi05LjM3NSw5LjM3NS0yMC42ODgtMjAuNjg4Yy0xMi40ODQtMTIuNS0zMi43NjYtMTIuNS00NS4yNSwwbC0xNiwxNmMtMS4yNjEsMS4yNjEtMi4zMDQsMi42NDgtMy4zMSw0LjA1MS0yMS43MzktOC41NjEtNDUuMzI0LTEzLjQyNi03MC4wNjUtMTMuNDI2LTEwNS44NjcsMC0xOTIsODYuMTMzLTE5MiwxOTJzODYuMTMzLDE5MiAxOTIsMTkyIDE5Mi04Ni4xMzMgMTkyLTE5MmMwLTI0Ljc0MS00Ljg2NC00OC4zMjctMTMuNDI2LTcwLjA2NSAxLjQwMi0xLjAwNyAyLjc5LTIuMDQ5IDQuMDUxLTMuMzFsMTYtMTZjMTIuNS0xMi40OTIgMTIuNS0zMi43NTggMC00NS4yNWwtMjAuNjg4LTIwLjY4OCA5LjM3NS05LjM3NSAzMi4wMDEtMzEuOTk5em0tMjE5LjMxMywxMDAuNjg3Yy01Mi45MzgsMC05Niw0My4wNjMtOTYsOTYgMCw4LjgzNi03LjE2NCwxNi0xNiwxNnMtMTYtNy4xNjQtMTYtMTZjMC03MC41NzggNTcuNDIyLTEyOCAxMjgtMTI4IDguODM2LDAgMTYsNy4xNjQgMTYsMTZzLTcuMTY0LDE2LTE2LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00NTkuMDIsMTQ4Ljk4Yy02LjI1LTYuMjUtMTYuMzc1LTYuMjUtMjIuNjI1LDBzLTYuMjUsMTYuMzc1IDAsMjIuNjI1bDE2LDE2YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OCA2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVsLTE2LjAwMS0xNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtMzQwLjM5NSw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYtMTZjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTUuOTk5LDE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MDAsNjRjOC44NDQsMCAxNi03LjE2NCAxNi0xNnYtMzJjMC04LjgzNi03LjE1Ni0xNi0xNi0xNi04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2djMyYzAsOC44MzYgNy4xNTYsMTYgMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ5Niw5Ni41ODZoLTMyYy04Ljg0NCwwLTE2LDcuMTY0LTE2LDE2IDAsOC44MzYgNy4xNTYsMTYgMTYsMTZoMzJjOC44NDQsMCAxNi03LjE2NCAxNi0xNiAwLTguODM2LTcuMTU2LTE2LTE2LTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm00MzYuOTgsNzUuNjA1YzMuMTI1LDMuMTI1IDcuMjE5LDQuNjg4IDExLjMxMyw0LjY4OCA0LjA5NCwwIDguMTg4LTEuNTYzIDExLjMxMy00LjY4OGwzMi0zMmM2LjI1LTYuMjUgNi4yNS0xNi4zNzUgMC0yMi42MjVzLTE2LjM3NS02LjI1LTIyLjYyNSwwbC0zMiwzMmMtNi4yNTEsNi4yNS02LjI1MSwxNi4zNzUtMC4wMDEsMjIuNjI1eiIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTI0MCkuYXR0cigieSIsMjUwKS5hdHRyKCJmb250LXNpemUiLCIxNTBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIlN5bnRheCBlcnJvciBpbiBncmFwaCIpLHIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJlcnJvci10ZXh0IikuYXR0cigieCIsMTA1MCkuYXR0cigieSIsNDAwKS5hdHRyKCJmb250LXNpemUiLCIxMDBweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoIm1lcm1haWQgdmVyc2lvbiAiK2UpLG4uYXR0cigiaGVpZ2h0IiwxMDApLG4uYXR0cigid2lkdGgiLDQwMCksbi5hdHRyKCJ2aWV3Qm94IiwiNzY4IDAgNTEyIDUxMiIpfWNhdGNoKHQpe2MuZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxjLmVycm9yKHQubWVzc2FnZSl9fSxvcz1mdW5jdGlvbih0KXtyZXR1cm4iZy5jbGFzc0dyb3VwIHRleHQge1xuICBmaWxsOiAiLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZmlsbDogIikuY29uY2F0KHQuY2xhc3NUZXh0LCI7XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgZm9udC1zaXplOiAxMHB4O1xuXG4gIC50aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbiAgfVxuXG59XG5cbi5jbGFzc1RpdGxlIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi5ub2RlIHJlY3QsXG4gIC5ub2RlIGNpcmNsZSxcbiAgLm5vZGUgZWxsaXBzZSxcbiAgLm5vZGUgcG9seWdvbixcbiAgLm5vZGUgcGF0aCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cblxuLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiAxO1xufVxuXG5nLmNsaWNrYWJsZSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuZy5jbGFzc0dyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLmNsYXNzR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbi5jbGFzc0xhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5jbGFzc0xhYmVsIC5sYWJlbCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuXG4ucmVsYXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5kYXNoZWQtbGluZXtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMztcbn1cblxuI2NvbXBvc2l0aW9uU3RhcnQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jY29tcG9zaXRpb25FbmQsIC5jb21wb3NpdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAuZGVwZW5kZW5jeSB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uU3RhcnQsIC5leHRlbnNpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuI2V4dGVuc2lvbkVuZCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25TdGFydCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jYWdncmVnYXRpb25FbmQsIC5hZ2dyZWdhdGlvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIiAhaW1wb3J0YW50O1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmVkZ2VUZXJtaW5hbHMge1xuICBmb250LXNpemU6IDExcHg7XG59XG5cbiIpfSxzcz1mdW5jdGlvbih0KXtyZXR1cm4iLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC5jbHVzdGVyLWxhYmVsIHNwYW4ge1xuICAgIGNvbG9yOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAubGFiZWwgdGV4dCxzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvciwiO1xuICAgIGNvbG9yOiAiKS5jb25jYXQodC5ub2RlVGV4dENvbG9yfHx0LnRleHRDb2xvciwiO1xuICB9XG5cbiAgLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAubm9kZSAubGFiZWwge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAubm9kZS5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5hcnJvd2hlYWRQYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hcnJvd2hlYWRDb2xvciwiO1xuICB9XG5cbiAgLmVkZ2VQYXRoIC5wYXRoIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMS41cHg7XG4gIH1cblxuICAuZmxvd2NoYXJ0LWxpbmsge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgZmlsbDogbm9uZTtcbiAgfVxuXG4gIC5lZGdlTGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICByZWN0IHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICAgIGZpbGw6ICIpLmNvbmNhdCh0LmVkZ2VMYWJlbEJhY2tncm91bmQsIjtcbiAgICB9XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG5cbiAgLmNsdXN0ZXIgcmVjdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuY2x1c3RlckJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY2x1c3RlckJvcmRlciwiO1xuICAgIHN0cm9rZS13aWR0aDogMXB4O1xuICB9XG5cbiAgLmNsdXN0ZXIgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLmNsdXN0ZXIgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuICAvLyAuY2x1c3RlciBkaXYge1xuICAvLyAgIGNvbG9yOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIC8vIH1cblxuICBkaXYubWVybWFpZFRvb2x0aXAge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICBwYWRkaW5nOiAycHg7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG4iKX0sY3M9ZnVuY3Rpb24odCl7cmV0dXJuIlxuZGVmcyAjc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICAgIGZpbGw6ICIuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgfVxuZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZTogbm9uZTtcbiAgZm9udC1zaXplOiAxMHB4O1xufVxuZy5zdGF0ZUdyb3VwIHRleHQge1xuICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG5cbn1cbmcuc3RhdGVHcm91cCAuc3RhdGUtdGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuZy5zdGF0ZUdyb3VwIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgbGluZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLnRyYW5zaXRpb24ge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG4gIGZpbGw6IG5vbmU7XG59XG5cbi5zdGF0ZUdyb3VwIC5jb21wb3NpdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgYm9yZGVyLWJvdHRvbTogMXB4XG59XG5cbi5zdGF0ZUdyb3VwIC5hbHQtY29tcG9zaXQge1xuICBmaWxsOiAjZTBlMGUwO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlLW5vdGUge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcblxuICB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIGZvbnQtc2l6ZTogMTBweDtcbiAgfVxufVxuXG4uc3RhdGVMYWJlbCAuYm94IHtcbiAgc3Ryb2tlOiBub25lO1xuICBzdHJva2Utd2lkdGg6IDA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgb3BhY2l0eTogMC41O1xufVxuXG4uZWRnZUxhYmVsIC5sYWJlbCByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCYWNrZ3JvdW5kQ29sb3IsIjtcbiAgb3BhY2l0eTogMC41O1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25MYWJlbENvbG9yfHx0LnRlcnRpYXJ5VGV4dENvbG9yLCI7XG59XG4ubGFiZWwgZGl2IC5lZGdlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cblxuLnN0YXRlTGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xuICBmb250LXNpemU6IDEwcHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG4ubm9kZSBjaXJjbGUuc3RhdGUtc3RhcnQge1xuICBmaWxsOiAiKS5jb25jYXQodC5zcGVjaWFsU3RhdGVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG59XG5cbi5ub2RlIC5mb3JrLWpvaW4ge1xuICBmaWxsOiAiKS5jb25jYXQodC5zcGVjaWFsU3RhdGVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1lbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5pbm5lckVuZEJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG4uZW5kLXN0YXRlLWlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG4gIC8vIHN0cm9rZTogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBzdHJva2Utd2lkdGg6IDEuNVxufVxuXG4ubm9kZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVCa2d8fHQubWFpbkJrZywiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4ubm9kZSBwb2x5Z29uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXIsIjs7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuI3N0YXRlZGlhZ3JhbS1iYXJiRW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG59XG5cbi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cblxuLmNsdXN0ZXItbGFiZWwsIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG59XG5cbi5zdGF0ZWRpYWdyYW0tY2x1c3RlciByZWN0Lm91dGVyIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgLmRpdmlkZXIge1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LnN0YXRlQm9yZGVyfHx0Lm5vZGVCb3JkZXIsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAudGl0bGUtc3RhdGUge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNvbXBvc2l0ZUJhY2tncm91bmR8fHQuYmFja2dyb3VuZCwiO1xufVxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLnN0YXRlZGlhZ3JhbS1jbHVzdGVyLWFsdCAuaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiIsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIC5pbm5lciB7XG4gIHJ4OjA7XG4gIHJ5OjA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5iYXNpYyB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLXN0YXRlIHJlY3QuZGl2aWRlciB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDEwLDEwO1xuICBmaWxsOiAiKS5jb25jYXQodC5hbHRCYWNrZ3JvdW5kP3QuYWx0QmFja2dyb3VuZDoiI2VmZWZlZiIsIjtcbn1cblxuLm5vdGUtZWRnZSB7XG4gIHN0cm9rZS1kYXNoYXJyYXk6IDU7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG4uc3RhdGVkaWFncmFtLW5vdGUgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vdGVCb3JkZXJDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbiAgcng6IDA7XG4gIHJ5OiAwO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIC5ub2RlTGFiZWwge1xuICBjb2xvcjogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuLnN0YXRlZGlhZ3JhbSAuZWRnZUxhYmVsIHtcbiAgY29sb3I6IHJlZDsgLy8gIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4jZGVwZW5kZW5jeVN0YXJ0LCAjZGVwZW5kZW5jeUVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG4iKX0sdXM9e2Zsb3djaGFydDpzcywiZmxvd2NoYXJ0LXYyIjpzcyxzZXF1ZW5jZTpmdW5jdGlvbih0KXtyZXR1cm4iLmFjdG9yIHtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQuYWN0b3JCb3JkZXIsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvckJrZywiO1xuICB9XG5cbiAgdGV4dC5hY3RvciA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5hY3Rvci1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdG9yTGluZUNvbG9yLCI7XG4gIH1cblxuICAubWVzc2FnZUxpbmUwIHtcbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTEge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Fycm93aGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5zZXF1ZW5jZU51bWJlciB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VxdWVuY2VOdW1iZXJDb2xvciwiO1xuICB9XG5cbiAgI3NlcXVlbmNlbnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgI2Nyb3NzaGVhZCBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuc2lnbmFsQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlVGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2lnbmFsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbEJveCB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCa2dDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsVGV4dCwgLmxhYmVsVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wVGV4dCwgLmxvb3BUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lmxvb3BUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAubG9vcExpbmUge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubGFiZWxCb3hCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLm5vdGUge1xuICAgIC8vc3Ryb2tlOiAjZGVjYzkzO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIH1cblxuICAubm90ZVRleHQsIC5ub3RlVGV4dCA+IHRzcGFuIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdGl2YXRpb24wIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24xIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2YXRpb24yIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmF0aW9uQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Cb3JkZXJDb2xvciwiO1xuICB9XG4iKX0sZ2FudHQ6ZnVuY3Rpb24odCl7cmV0dXJuJ1xuICAubWVybWFpZC1tYWluLWZvbnQge1xuICAgIGZvbnQtZmFtaWx5OiAidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG5cbiAgLnNlY3Rpb24ge1xuICAgIHN0cm9rZTogbm9uZTtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvbjAge1xuICAgIGZpbGw6ICcuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNlY3Rpb25Ca2dDb2xvcjIsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMSxcbiAgLnNlY3Rpb24zIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hbHRTZWN0aW9uQmtnQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZSB7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIC8vIHRleHQtaGVpZ2h0OiAxNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuXG4gIC8qIEdyaWQgYW5kIGF4aXMgKi9cblxuICAuZ3JpZCAudGljayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ncmlkQ29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjg7XG4gICAgc2hhcGUtcmVuZGVyaW5nOiBjcmlzcEVkZ2VzO1xuICAgIHRleHQge1xuICAgICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICAgIH1cbiAgfVxuXG4gIC5ncmlkIHBhdGgge1xuICAgIHN0cm9rZS13aWR0aDogMDtcbiAgfVxuXG5cbiAgLyogVG9kYXkgbGluZSAqL1xuXG4gIC50b2RheSB7XG4gICAgZmlsbDogbm9uZTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRvZGF5TGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gIH1cblxuXG4gIC8qIFRhc2sgc3R5bGluZyAqL1xuXG4gIC8qIERlZmF1bHQgdGFzayAqL1xuXG4gIC50YXNrIHtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAudGFza1RleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cblxuICAvLyAudGFza1RleHQ6bm90KFtmb250LXNpemVdKSB7XG4gIC8vICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIC8vIH1cblxuICAudGFza1RleHRPdXRzaWRlUmlnaHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCI7XG4gICAgdGV4dC1hbmNob3I6IHN0YXJ0O1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuXG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogZW5kO1xuICAgIC8vIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZ2FudHRGb250U2l6ZSwiO1xuICB9XG5cbiAgLyogU3BlY2lhbCBjYXNlIGNsaWNrYWJsZSAqL1xuICAudGFzay5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuICAudGFza1RleHQuY2xpY2thYmxlIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDbGlja2FibGVDb2xvciwiICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlTGVmdC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC8qIFNwZWNpZmljIHRhc2sgc2V0dGluZ3MgZm9yIHRoZSBzZWN0aW9ucyovXG5cbiAgLnRhc2tUZXh0MCxcbiAgLnRhc2tUZXh0MSxcbiAgLnRhc2tUZXh0MixcbiAgLnRhc2tUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHRDb2xvciwiO1xuICB9XG5cbiAgLnRhc2swLFxuICAudGFzazEsXG4gIC50YXNrMixcbiAgLnRhc2szIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTAsXG4gIC50YXNrVGV4dE91dHNpZGUyXG4gIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZTEsXG4gIC50YXNrVGV4dE91dHNpZGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dE91dHNpZGVDb2xvciwiO1xuICB9XG5cblxuICAvKiBBY3RpdmUgdGFzayAqL1xuXG4gIC5hY3RpdmUwLFxuICAuYWN0aXZlMSxcbiAgLmFjdGl2ZTIsXG4gIC5hY3RpdmUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCb3JkZXJDb2xvciwiO1xuICB9XG5cbiAgLmFjdGl2ZVRleHQwLFxuICAuYWN0aXZlVGV4dDEsXG4gIC5hY3RpdmVUZXh0MixcbiAgLmFjdGl2ZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIENvbXBsZXRlZCB0YXNrICovXG5cbiAgLmRvbmUwLFxuICAuZG9uZTEsXG4gIC5kb25lMixcbiAgLmRvbmUzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVUZXh0MCxcbiAgLmRvbmVUZXh0MSxcbiAgLmRvbmVUZXh0MixcbiAgLmRvbmVUZXh0MyB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIiAhaW1wb3J0YW50O1xuICB9XG5cblxuICAvKiBUYXNrcyBvbiB0aGUgY3JpdGljYWwgbGluZSAqL1xuXG4gIC5jcml0MCxcbiAgLmNyaXQxLFxuICAuY3JpdDIsXG4gIC5jcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jcml0QmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuYWN0aXZlQ3JpdDAsXG4gIC5hY3RpdmVDcml0MSxcbiAgLmFjdGl2ZUNyaXQyLFxuICAuYWN0aXZlQ3JpdDMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuY3JpdEJvcmRlckNvbG9yLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQuYWN0aXZlVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICB9XG5cbiAgLmRvbmVDcml0MCxcbiAgLmRvbmVDcml0MSxcbiAgLmRvbmVDcml0MixcbiAgLmRvbmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5kb25lVGFza0JrZ0NvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gIH1cblxuICAubWlsZXN0b25lIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZykgc2NhbGUoMC44LDAuOCk7XG4gIH1cblxuICAubWlsZXN0b25lVGV4dCB7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICB9XG4gIC5kb25lQ3JpdFRleHQwLFxuICAuZG9uZUNyaXRUZXh0MSxcbiAgLmRvbmVDcml0VGV4dDIsXG4gIC5kb25lQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAuYWN0aXZlQ3JpdFRleHQwLFxuICAuYWN0aXZlQ3JpdFRleHQxLFxuICAuYWN0aXZlQ3JpdFRleHQyLFxuICAuYWN0aXZlQ3JpdFRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuICAudGl0bGVUZXh0IHtcbiAgICB0ZXh0LWFuY2hvcjogbWlkZGxlO1xuICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIiAgICA7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiIpfSxjbGFzc0RpYWdyYW06b3MsImNsYXNzRGlhZ3JhbS12MiI6b3MsY2xhc3M6b3Msc3RhdGVEaWFncmFtOmNzLHN0YXRlOmNzLGdpdDpmdW5jdGlvbigpe3JldHVybiJcbiAgLmNvbW1pdC1pZCxcbiAgLmNvbW1pdC1tc2csXG4gIC5icmFuY2gtbGFiZWwge1xuICAgIGZpbGw6IGxpZ2h0Z3JleTtcbiAgICBjb2xvcjogbGlnaHRncmV5O1xuICAgIGZvbnQtZmFtaWx5OiAndHJlYnVjaGV0IG1zJywgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLW1lcm1haWQtZm9udC1mYW1pbHkpO1xuICB9XG4ifSxpbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9LHBpZTpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5waWVDaXJjbGV7XG4gICAgc3Ryb2tlOiAiLmNvbmNhdCh0LnBpZVN0cm9rZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoIDogIikuY29uY2F0KHQucGllU3Ryb2tlV2lkdGgsIjtcbiAgICBvcGFjaXR5IDogIikuY29uY2F0KHQucGllT3BhY2l0eSwiO1xuICB9XG4gIC5waWVUaXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQodC5waWVUaXRsZVRleHRTaXplLCI7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllVGl0bGVUZXh0Q29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICB9XG4gIC5zbGljZSB7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVTZWN0aW9uVGV4dENvbG9yLCI7XG4gICAgZm9udC1zaXplOiIpLmNvbmNhdCh0LnBpZVNlY3Rpb25UZXh0U2l6ZSwiO1xuICAgIC8vIGZpbGw6IHdoaXRlO1xuICB9XG4gIC5sZWdlbmQgdGV4dCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQucGllTGVnZW5kVGV4dENvbG9yLCI7XG4gICAgZm9udC1mYW1pbHk6ICIpLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LnBpZUxlZ2VuZFRleHRTaXplLCI7XG4gIH1cbiIpfSxlcjpmdW5jdGlvbih0KXtyZXR1cm4iXG4gIC5lbnRpdHlCb3gge1xuICAgIGZpbGw6ICIuY29uY2F0KHQubWFpbkJrZywiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveE9kZCB7XG4gICAgZmlsbDogI2ZmZmZmZjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgfVxuXG4gIC5hdHRyaWJ1dGVCb3hFdmVuIHtcbiAgICBmaWxsOiAjZjJmMmYyO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLnJlbGF0aW9uc2hpcExhYmVsQm94IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgb3BhY2l0eTogMC43O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICAgIHJlY3Qge1xuICAgICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICB9XG4gIH1cblxuICAgIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgfVxuIil9LGpvdXJuZXk6ZnVuY3Rpb24odCl7cmV0dXJuIi5sYWJlbCB7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gICAgY29sb3I6ICIuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gIH1cbiAgLm1vdXRoIHtcbiAgICBzdHJva2U6ICM2NjY7XG4gIH1cblxuICBsaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAubGVnZW5kIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAjMzMzO1xuICB9XG4gIC5sYWJlbCB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiXG4gIH1cblxuICAuZmFjZSB7XG4gICAgZmlsbDogI0ZGRjhEQztcbiAgICBzdHJva2U6ICM5OTk7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUwKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMSk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTIpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUzKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTUpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU2KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNyk6IiIsIjtcbiAgfVxuIil9LHJlcXVpcmVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiJcblxuICBtYXJrZXIge1xuICAgIGZpbGw6ICIuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICB9XG5cbiAgbWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZm9udFNpemUsIjtcbiAgfVxuXG4gIC5yZXFCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50QmFja2dyb3VuZCwiO1xuICAgIGZpbGwtb3BhY2l0eTogMTAwJTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIFxuICAucmVxVGl0bGUsIC5yZXFMYWJlbHtcbiAgICBmaWxsOiAgIikuY29uY2F0KHQucmVxdWlyZW1lbnRUZXh0Q29sb3IsIjtcbiAgfVxuICAucmVxTGFiZWxCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgZmlsbC1vcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgLnJlcS10aXRsZS1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDE7XG4gIH1cbiAgLnJlbGF0aW9uc2hpcExhYmVsIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZWxhdGlvbkxhYmVsQ29sb3IsIjtcbiAgfVxuXG4iKX19LGxzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4iIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQobi5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQobi5mb250U2l6ZSwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLnRleHRDb2xvciwiXG4gIH1cblxuICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi9cblxuICAuZXJyb3ItaWNvbiB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JCa2dDb2xvciwiO1xuICB9XG4gIC5lcnJvci10ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQobi5lcnJvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICB9XG4gIC5lZGdlLXRoaWNrbmVzcy10aGljayB7XG4gICAgc3Ryb2tlLXdpZHRoOiAzLjVweFxuICB9XG4gIC5lZGdlLXBhdHRlcm4tc29saWQge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7XG4gIH1cblxuICAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAzO1xuICB9XG4gIC5lZGdlLXBhdHRlcm4tZG90dGVkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyO1xuICB9XG5cbiAgLm1hcmtlciB7XG4gICAgZmlsbDogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgfVxuICAubWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgfVxuXG4gICIpLmNvbmNhdCh1c1t0XShuKSwiXG5cbiAgIikuY29uY2F0KGUsIlxuIil9O2Z1bmN0aW9uIGhzKHQpe3JldHVybihocz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBmcz17fSxkcz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKGMuZGVidWcoIkRpcmVjdGl2ZSB0eXBlPSIuY29uY2F0KGUudHlwZSwiIHdpdGggYXJnczoiKSxlLmFyZ3MpLGUudHlwZSl7Y2FzZSJpbml0IjpjYXNlImluaXRpYWxpemUiOlsiY29uZmlnIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZS5hcmdzW3RdJiYoImZsb3djaGFydC12MiI9PT1uJiYobj0iZmxvd2NoYXJ0IiksZS5hcmdzW25dPWUuYXJnc1t0XSxkZWxldGUgZS5hcmdzW3RdKX0pKSxlLmFyZ3Msd3QoZS5hcmdzKTticmVhaztjYXNlIndyYXAiOmNhc2Uibm93cmFwIjp0JiZ0LnNldFdyYXAmJnQuc2V0V3JhcCgid3JhcCI9PT1lLnR5cGUpO2JyZWFrO2RlZmF1bHQ6Yy53YXJuKCJVbmhhbmRsZWQgZGlyZWN0aXZlOiBzb3VyY2U6ICclJXsiLmNvbmNhdChlLnR5cGUsIjogIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUuYXJncz9lLmFyZ3M6e30pLCJ9JSUiKSxlKX19O2Z1bmN0aW9uIHBzKHQpe3hpKHQuZ2l0KSxycih0LmZsb3djaGFydCksdXIodC5mbG93Y2hhcnQpLHZvaWQgMCE9PXQuc2VxdWVuY2VEaWFncmFtJiYkYS5zZXRDb25mKFAodC5zZXF1ZW5jZSx0LnNlcXVlbmNlRGlhZ3JhbSkpLCRhLnNldENvbmYodC5zZXF1ZW5jZSksVnIodC5nYW50dCksaWUodC5jbGFzcyksdm8odC5zdGF0ZSksVG8odC5zdGF0ZSksQWkodC5jbGFzcyksY24odC5lciksZXModC5qb3VybmV5KSxuYSh0LnJlcXVpcmVtZW50KSxpcyh0LmNsYXNzKX1mdW5jdGlvbiB5cygpe312YXIgZ3M9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmZ1bmN0aW9uKHQsZSxuLHIpe0V0KCk7dmFyIGk9ZSxhPVYuZGV0ZWN0SW5pdChpKTthJiZ3dChhKTt2YXIgbz1fdCgpO2lmKGUubGVuZ3RoPm8ubWF4VGV4dFNpemUmJihpPSJncmFwaCBUQjthW01heGltdW0gdGV4dCBzaXplIGluIGRpYWdyYW0gZXhjZWVkZWRdO3N0eWxlIGEgZmlsbDojZmFhIiksdm9pZCAwIT09cilyLmlubmVySFRNTD0iIixPYmplY3QoaC5zZWxlY3QpKHIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJkIit0KS5hdHRyKCJzdHlsZSIsImZvbnQtZmFtaWx5OiAiK28uZm9udEZhbWlseSkuYXBwZW5kKCJzdmciKS5hdHRyKCJpZCIsdCkuYXR0cigid2lkdGgiLCIxMDAlIikuYXR0cigieG1sbnMiLCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIpLmFwcGVuZCgiZyIpO2Vsc2V7dmFyIHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7cyYmcy5yZW1vdmUoKTt2YXIgdT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZCIrdCk7dSYmdS5yZW1vdmUoKSxPYmplY3QoaC5zZWxlY3QpKCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImQiK3QpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHQpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKS5hcHBlbmQoImciKX13aW5kb3cudHh0PWksaT1mdW5jdGlvbih0KXt2YXIgZT10O3JldHVybiBlPShlPShlPWUucmVwbGFjZSgvc3R5bGUuKjpcUyojLio7L2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpfSkpKS5yZXBsYWNlKC9jbGFzc0RlZi4qOlxTKiMuKjsvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMSl9KSkpLnJlcGxhY2UoLyNcdys7L2csKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc3Vic3RyaW5nKDEsdC5sZW5ndGgtMSk7cmV0dXJuL15cKz9cZCskLy50ZXN0KGUpPyLvrILCsMKwIitlKyLCtsOfIjoi76yCwrAiK2UrIsK2w58ifSkpfShpKTt2YXIgbD1PYmplY3QoaC5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLGY9Vi5kZXRlY3RUeXBlKGksbykseT1sLmZpcnN0Q2hpbGQsZz15LmZpcnN0Q2hpbGQsdj0iIjtpZih2b2lkIDAhPT1vLnRoZW1lQ1NTJiYodis9IlxuIi5jb25jYXQoby50aGVtZUNTUykpLHZvaWQgMCE9PW8uZm9udEZhbWlseSYmKHYrPSJcbjpyb290IHsgLS1tZXJtYWlkLWZvbnQtZmFtaWx5OiAiLmNvbmNhdChvLmZvbnRGYW1pbHksIn0iKSksdm9pZCAwIT09by5hbHRGb250RmFtaWx5JiYodis9IlxuOnJvb3QgeyAtLW1lcm1haWQtYWx0LWZvbnQtZmFtaWx5OiAiLmNvbmNhdChvLmFsdEZvbnRGYW1pbHksIn0iKSksImZsb3djaGFydCI9PT1mfHwiZmxvd2NoYXJ0LXYyIj09PWZ8fCJncmFwaCI9PT1mKXt2YXIgbT1pcihpKSxiPW8uaHRtbExhYmVsc3x8by5mbG93Y2hhcnQuaHRtbExhYmVscztmb3IodmFyIHggaW4gbSliPyh2Kz0iXG4uIi5jb25jYXQoeCwiID4gKiB7ICIpLmNvbmNhdChtW3hdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9Iiksdis9IlxuLiIuY29uY2F0KHgsIiBzcGFuIHsgIikuY29uY2F0KG1beF0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSk6KHYrPSJcbi4iLmNvbmNhdCh4LCIgcGF0aCB7ICIpLmNvbmNhdChtW3hdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9Iiksdis9IlxuLiIuY29uY2F0KHgsIiByZWN0IHsgIikuY29uY2F0KG1beF0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx2Kz0iXG4uIi5jb25jYXQoeCwiIHBvbHlnb24geyAiKS5jb25jYXQobVt4XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHYrPSJcbi4iLmNvbmNhdCh4LCIgZWxsaXBzZSB7ICIpLmNvbmNhdChtW3hdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9Iiksdis9IlxuLiIuY29uY2F0KHgsIiBjaXJjbGUgeyAiKS5jb25jYXQobVt4XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLG1beF0udGV4dFN0eWxlcyYmKHYrPSJcbi4iLmNvbmNhdCh4LCIgdHNwYW4geyAiKS5jb25jYXQobVt4XS50ZXh0U3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSkpfXZhciBfPShuZXcgZC5hKSgiIyIuY29uY2F0KHQpLGxzKGYsdixvLnRoZW1lVmFyaWFibGVzKSksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2suaW5uZXJIVE1MPV8seS5pbnNlcnRCZWZvcmUoayxnKTt0cnl7c3dpdGNoKGYpe2Nhc2UiZ2l0IjpvLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSx4aShvLmdpdCksX2koaSx0LCExKTticmVhaztjYXNlImZsb3djaGFydCI6by5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1vLmFycm93TWFya2VyQWJzb2x1dGUscnIoby5mbG93Y2hhcnQpLGFyKGksdCwhMSk7YnJlYWs7Y2FzZSJmbG93Y2hhcnQtdjIiOm8uZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLHVyKG8uZmxvd2NoYXJ0KSxscihpLHQsITEpO2JyZWFrO2Nhc2Uic2VxdWVuY2UiOm8uc2VxdWVuY2UuYXJyb3dNYXJrZXJBYnNvbHV0ZT1vLmFycm93TWFya2VyQWJzb2x1dGUsby5zZXF1ZW5jZURpYWdyYW0/KCRhLnNldENvbmYoT2JqZWN0LmFzc2lnbihvLnNlcXVlbmNlLG8uc2VxdWVuY2VEaWFncmFtKSksY29uc29sZS5lcnJvcigiYG1lcm1haWQgY29uZmlnLnNlcXVlbmNlRGlhZ3JhbWAgaGFzIGJlZW4gcmVuYW1lZCB0byBgY29uZmlnLnNlcXVlbmNlYC4gUGxlYXNlIHVwZGF0ZSB5b3VyIG1lcm1haWQgY29uZmlnLiIpKTokYS5zZXRDb25mKG8uc2VxdWVuY2UpLCRhLmRyYXcoaSx0KTticmVhaztjYXNlImdhbnR0IjpvLmdhbnR0LmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLFZyKG8uZ2FudHQpLEhyKGksdCk7YnJlYWs7Y2FzZSJjbGFzcyI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSxpZShvLmNsYXNzKSxhZShpLHQpO2JyZWFrO2Nhc2UiY2xhc3NEaWFncmFtIjpvLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLHFlKG8uY2xhc3MpLFdlKGksdCk7YnJlYWs7Y2FzZSJzdGF0ZSI6by5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPW8uYXJyb3dNYXJrZXJBYnNvbHV0ZSx2byhvLnN0YXRlKSxtbyhpLHQpO2JyZWFrO2Nhc2Uic3RhdGVEaWFncmFtIjpvLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLFRvKG8uc3RhdGUpLENvKGksdCk7YnJlYWs7Y2FzZSJpbmZvIjpvLmNsYXNzLmFycm93TWFya2VyQWJzb2x1dGU9by5hcnJvd01hcmtlckFic29sdXRlLEFpKG8uY2xhc3MpLE1pKGksdCxwLnZlcnNpb24pO2JyZWFrO2Nhc2UicGllIjpGaShpLHQscC52ZXJzaW9uKTticmVhaztjYXNlImVyIjpjbihvLmVyKSx1bihpLHQscC52ZXJzaW9uKTticmVhaztjYXNlImpvdXJuZXkiOmVzKG8uam91cm5leSksbnMoaSx0LHAudmVyc2lvbik7YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6bmEoby5yZXF1aXJlbWVudCkscmEoaSx0LHAudmVyc2lvbil9fWNhdGNoKGUpe3Rocm93IGFzKHQscC52ZXJzaW9uKSxlfU9iamVjdChoLnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQodCwnIl0nKSkuc2VsZWN0QWxsKCJmb3JlaWdub2JqZWN0ID4gKiIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpO3ZhciB3PU9iamVjdChoLnNlbGVjdCkoIiNkIit0KS5ub2RlKCkuaW5uZXJIVE1MO2lmKGMuZGVidWcoImNuZi5hcnJvd01hcmtlckFic29sdXRlIixvLmFycm93TWFya2VyQWJzb2x1dGUpLG8uYXJyb3dNYXJrZXJBYnNvbHV0ZSYmImZhbHNlIiE9PW8uYXJyb3dNYXJrZXJBYnNvbHV0ZXx8KHc9dy5yZXBsYWNlKC9tYXJrZXItZW5kPSJ1cmxcKC4qPyMvZywnbWFya2VyLWVuZD0idXJsKCMnLCJnIikpLHc9KHc9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gZT0oZT0oZT1lLnJlcGxhY2UoL++sgsKwwrAvZywoZnVuY3Rpb24oKXtyZXR1cm4iJiMifSkpKS5yZXBsYWNlKC/vrILCsC9nLChmdW5jdGlvbigpe3JldHVybiImIn0pKSkucmVwbGFjZSgvwrbDny9nLChmdW5jdGlvbigpe3JldHVybiI7In0pKX0odykpLnJlcGxhY2UoLzxicj4vZywiPGJyLz4iKSx2b2lkIDAhPT1uKXN3aXRjaChmKXtjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOm4odyxMbi5iaW5kRnVuY3Rpb25zKTticmVhaztjYXNlImdhbnR0IjpuKHcsenIuYmluZEZ1bmN0aW9ucyk7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOm4odyxQdC5iaW5kRnVuY3Rpb25zKTticmVhaztkZWZhdWx0Om4odyl9ZWxzZSBjLmRlYnVnKCJDQiA9IHVuZGVmaW5lZCEiKTt2YXIgRT1PYmplY3QoaC5zZWxlY3QpKCIjZCIrdCkubm9kZSgpO3JldHVybiBudWxsIT09RSYmImZ1bmN0aW9uIj09dHlwZW9mIEUucmVtb3ZlJiZPYmplY3QoaC5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLnJlbW92ZSgpLHd9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPV90KCksbj1WLmRldGVjdEluaXQodCxlKTtuJiZjLmRlYnVnKCJyZWluaXQgIixuKTt2YXIgcixpPVYuZGV0ZWN0VHlwZSh0LGUpO3N3aXRjaChjLmRlYnVnKCJUeXBlICIraSksaSl7Y2FzZSJnaXQiOihyPXVpLmEpLnBhcnNlci55eT1zaTticmVhaztjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOkxuLmNsZWFyKCksKHI9Um4uYSkucGFyc2VyLnl5PUxuO2JyZWFrO2Nhc2Uic2VxdWVuY2UiOihyPWFhLmEpLnBhcnNlci55eT1fYTticmVhaztjYXNlImdhbnR0Ijoocj1xci5hKS5wYXJzZXIueXk9enI7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOihyPXF0LmEpLnBhcnNlci55eT1QdDticmVhaztjYXNlInN0YXRlIjpjYXNlInN0YXRlRGlhZ3JhbSI6KHI9V2EuYSkucGFyc2VyLnl5PW9vO2JyZWFrO2Nhc2UiaW5mbyI6Yy5kZWJ1ZygiaW5mbyBpbmZvIGluZm8iKSwocj1DaS5hKS5wYXJzZXIueXk9RWk7YnJlYWs7Y2FzZSJwaWUiOmMuZGVidWcoInBpZSIpLChyPUJpLmEpLnBhcnNlci55eT1JaTticmVhaztjYXNlImVyIjpjLmRlYnVnKCJlciIpLChyPUplLmEpLnBhcnNlci55eT1RZTticmVhaztjYXNlImpvdXJuZXkiOmMuZGVidWcoIkpvdXJuZXkiKSwocj1Sby5hKS5wYXJzZXIueXk9TG87YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6Y2FzZSJyZXF1aXJlbWVudERpYWdyYW0iOmMuZGVidWcoIlJlcXVpcmVtZW50RGlhZ3JhbSIpLChyPWppLmEpLnBhcnNlci55eT1XaX1yZXR1cm4gci5wYXJzZXIueXkuZ3JhcGhUeXBlPWksci5wYXJzZXIueXkucGFyc2VFcnJvcj1mdW5jdGlvbih0LGUpe3Rocm93e3N0cjp0LGhhc2g6ZX19LHIucGFyc2UodCkscn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4scil7dHJ5e2lmKHZvaWQgMCE9PWUpc3dpdGNoKGU9ZS50cmltKCksbil7Y2FzZSJvcGVuX2RpcmVjdGl2ZSI6ZnM9e307YnJlYWs7Y2FzZSJ0eXBlX2RpcmVjdGl2ZSI6ZnMudHlwZT1lLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSJhcmdfZGlyZWN0aXZlIjpmcy5hcmdzPUpTT04ucGFyc2UoZSk7YnJlYWs7Y2FzZSJjbG9zZV9kaXJlY3RpdmUiOmRzKHQsZnMsciksZnM9bnVsbH19Y2F0Y2godCl7Yy5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIHNlcXVlbmNlRGlhZ3JhbSBkaXJlY3RpdmU6ICIuY29uY2F0KGUsIiBqaXNvbiBjb250ZXh0OiAiKS5jb25jYXQobikpLGMuZXJyb3IodC5tZXNzYWdlKX19LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dCYmdC5mb250RmFtaWx5JiYodC50aGVtZVZhcmlhYmxlcyYmdC50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5fHwodC50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSkscHQ9UCh7fSx0KSx0JiZ0LnRoZW1lJiZsdFt0LnRoZW1lXT90LnRoZW1lVmFyaWFibGVzPWx0W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpOnQmJih0LnRoZW1lVmFyaWFibGVzPWx0LmRlZmF1bHQuZ2V0VGhlbWVWYXJpYWJsZXModC50aGVtZVZhcmlhYmxlcykpO3ZhciBlPSJvYmplY3QiPT09aHModCk/ZnVuY3Rpb24odCl7cmV0dXJuIGd0PVAoe30seXQpLGd0PVAoZ3QsdCksdC50aGVtZSYmKGd0LnRoZW1lVmFyaWFibGVzPWx0W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxtdD1idChndCx2dCksZ3R9KHQpOnh0KCk7cHMoZSksdShlLmxvZ0xldmVsKX0scmVpbml0aWFsaXplOnlzLGdldENvbmZpZzpfdCxzZXRDb25maWc6ZnVuY3Rpb24odCl7cmV0dXJuIFAobXQsdCksX3QoKX0sZ2V0U2l0ZUNvbmZpZzp4dCx1cGRhdGVTaXRlQ29uZmlnOmZ1bmN0aW9uKHQpe3JldHVybiBndD1QKGd0LHQpLGJ0KGd0LHZ0KSxndH0scmVzZXQ6ZnVuY3Rpb24oKXtFdCgpfSxnbG9iYWxSZXNldDpmdW5jdGlvbigpe0V0KCkscHMoX3QoKSl9LGRlZmF1bHRDb25maWc6eXR9KTt1KF90KCkubG9nTGV2ZWwpLEV0KF90KCkpO3ZhciB2cz1ncyxtcz1mdW5jdGlvbigpe2JzLnN0YXJ0T25Mb2FkP3ZzLmdldENvbmZpZygpLnN0YXJ0T25Mb2FkJiZicy5pbml0KCk6dm9pZCAwPT09YnMuc3RhcnRPbkxvYWQmJihjLmRlYnVnKCJJbiBzdGFydCwgbm8gY29uZmlnIiksdnMuZ2V0Q29uZmlnKCkuc3RhcnRPbkxvYWQmJmJzLmluaXQoKSl9OyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJgovKiEKICAgKiBXYWl0IGZvciBkb2N1bWVudCBsb2FkZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBleGVjdXRpb24KICAgKi8Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLChmdW5jdGlvbigpe21zKCl9KSwhMSk7dmFyIGJzPXtzdGFydE9uTG9hZDohMCxodG1sTGFiZWxzOiEwLG1lcm1haWRBUEk6dnMscGFyc2U6dnMucGFyc2UscmVuZGVyOnZzLnJlbmRlcixpbml0OmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj12cy5nZXRDb25maWcoKTthcmd1bWVudHMubGVuZ3RoPj0yPygKLyohIHNlcXVlbmNlIGNvbmZpZyB3YXMgcGFzc2VkIGFzICMxICovCnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmKGJzLnNlcXVlbmNlQ29uZmlnPWFyZ3VtZW50c1swXSksdD1hcmd1bWVudHNbMV0pOnQ9YXJndW1lbnRzWzBdLCJmdW5jdGlvbiI9PXR5cGVvZiBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXT8oZT1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxjLmRlYnVnKCJDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKTp2b2lkIDAhPT1yLm1lcm1haWQmJigiZnVuY3Rpb24iPT10eXBlb2Ygci5tZXJtYWlkLmNhbGxiYWNrPyhlPXIubWVybWFpZC5jYWxsYmFjayxjLmRlYnVnKCJDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKTpjLmRlYnVnKCJObyBDYWxsYmFjayBmdW5jdGlvbiBmb3VuZCIpKSx0PXZvaWQgMD09PXQ/ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm1lcm1haWQiKToic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0KTp0IGluc3RhbmNlb2Ygd2luZG93Lk5vZGU/W3RdOnQsYy5kZWJ1ZygiU3RhcnQgT24gTG9hZCBiZWZvcmU6ICIrYnMuc3RhcnRPbkxvYWQpLHZvaWQgMCE9PWJzLnN0YXJ0T25Mb2FkJiYoYy5kZWJ1ZygiU3RhcnQgT24gTG9hZCBpbm5lcjogIiticy5zdGFydE9uTG9hZCksdnMudXBkYXRlU2l0ZUNvbmZpZyh7c3RhcnRPbkxvYWQ6YnMuc3RhcnRPbkxvYWR9KSksdm9pZCAwIT09YnMuZ2FudHRDb25maWcmJnZzLnVwZGF0ZVNpdGVDb25maWcoe2dhbnR0OmJzLmdhbnR0Q29uZmlnfSk7Zm9yKHZhciBhLG89bmV3IFYuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKSxzPWZ1bmN0aW9uKHIpe3ZhciBzPXRbcl07Ci8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqL2lmKHMuZ2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIpKXJldHVybiJjb250aW51ZSI7cy5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIiwhMCk7dmFyIHU9Im1lcm1haWQtIi5jb25jYXQoby5uZXh0KCkpO2E9aShhPXMuaW5uZXJIVE1MKS50cmltKCkucmVwbGFjZSgvPGJyXHMqXC8/Pi9naSwiPGJyLz4iKTt2YXIgbD1WLmRldGVjdEluaXQoYSk7bCYmYy5kZWJ1ZygiRGV0ZWN0ZWQgZWFybHkgcmVpbml0OiAiLGwpO3RyeXt2cy5yZW5kZXIodSxhLChmdW5jdGlvbih0LG4pe3MuaW5uZXJIVE1MPXQsdm9pZCAwIT09ZSYmZSh1KSxuJiZuKHMpfSkscyl9Y2F0Y2godCl7Yy53YXJuKCJTeW50YXggRXJyb3IgcmVuZGVyaW5nIiksYy53YXJuKHQpLG4ucGFyc2VFcnJvciYmbi5wYXJzZUVycm9yKHQpfX0sdT0wO3U8dC5sZW5ndGg7dSsrKXModSl9LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dm9pZCAwIT09dC5tZXJtYWlkJiYodm9pZCAwIT09dC5tZXJtYWlkLnN0YXJ0T25Mb2FkJiYoYnMuc3RhcnRPbkxvYWQ9dC5tZXJtYWlkLnN0YXJ0T25Mb2FkKSx2b2lkIDAhPT10Lm1lcm1haWQuaHRtbExhYmVscyYmKGJzLmh0bWxMYWJlbHM9ImZhbHNlIiE9PXQubWVybWFpZC5odG1sTGFiZWxzJiYhMSE9PXQubWVybWFpZC5odG1sTGFiZWxzKSksdnMuaW5pdGlhbGl6ZSh0KX0sY29udGVudExvYWRlZDptc307ZS5kZWZhdWx0PWJzfV0pLmRlZmF1bHR9KSk7Ci8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcm1haWQubWluLmpzLm1hcA==`; \ No newline at end of file +module.exports = `IWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMubWVybWFpZD1lKCk6dC5tZXJtYWlkPWUoKX0oInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gbihyKXtpZihlW3JdKXJldHVybiBlW3JdLmV4cG9ydHM7dmFyIGk9ZVtyXT17aTpyLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5sPSEwLGkuZXhwb3J0c31yZXR1cm4gbi5tPXQsbi5jPWUsbi5kPWZ1bmN0aW9uKHQsZSxyKXtuLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLnI9ZnVuY3Rpb24odCl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sbi50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1uKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgcj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKG4ucihyKSxPYmplY3QuZGVmaW5lUHJvcGVydHkociwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KW4uZChyLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIHJ9LG4ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gbi5kKGUsImEiLGUpLGV9LG4ubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sbi5wPSIiLG4obi5zPTM5MCl9KFtmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO24ucihlKSxuLmQoZSwidmVyc2lvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSksbi5kKGUsImJpc2VjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV9KSksbi5kKGUsImJpc2VjdFJpZ2h0IiwoZnVuY3Rpb24oKXtyZXR1cm4gc30pKSxuLmQoZSwiYmlzZWN0TGVmdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGN9KSksbi5kKGUsImFzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSksbi5kKGUsImJpc2VjdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gYX0pKSxuLmQoZSwiY3Jvc3MiLChmdW5jdGlvbigpe3JldHVybiBmfSkpLG4uZChlLCJkZXNjZW5kaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gZH0pKSxuLmQoZSwiZGV2aWF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ30pKSxuLmQoZSwiZXh0ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gbX0pKSxuLmQoZSwiaGlzdG9ncmFtIiwoZnVuY3Rpb24oKXtyZXR1cm4gTn0pKSxuLmQoZSwidGhyZXNob2xkRnJlZWRtYW5EaWFjb25pcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIER9KSksbi5kKGUsInRocmVzaG9sZFNjb3R0IiwoZnVuY3Rpb24oKXtyZXR1cm4gTH0pKSxuLmQoZSwidGhyZXNob2xkU3R1cmdlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE99KSksbi5kKGUsIm1heCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEl9KSksbi5kKGUsIm1lYW4iLChmdW5jdGlvbigpe3JldHVybiBSfSkpLG4uZChlLCJtZWRpYW4iLChmdW5jdGlvbigpe3JldHVybiBGfSkpLG4uZChlLCJtZXJnZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFB9KSksbi5kKGUsIm1pbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp9KSksbi5kKGUsInBhaXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbH0pKSxuLmQoZSwicGVybXV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl9KSksbi5kKGUsInF1YW50aWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gQn0pKSxuLmQoZSwicmFuZ2UiLChmdW5jdGlvbigpe3JldHVybiB3fSkpLG4uZChlLCJzY2FuIiwoZnVuY3Rpb24oKXtyZXR1cm4gen0pKSxuLmQoZSwic2h1ZmZsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFV9KSksbi5kKGUsInN1bSIsKGZ1bmN0aW9uKCl7cmV0dXJuICR9KSksbi5kKGUsInRpY2tzIiwoZnVuY3Rpb24oKXtyZXR1cm4gU30pKSxuLmQoZSwidGlja0luY3JlbWVudCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF9KSksbi5kKGUsInRpY2tTdGVwIiwoZnVuY3Rpb24oKXtyZXR1cm4gTX0pKSxuLmQoZSwidHJhbnNwb3NlIiwoZnVuY3Rpb24oKXtyZXR1cm4gcX0pKSxuLmQoZSwidmFyaWFuY2UiLChmdW5jdGlvbigpe3JldHVybiB5fSkpLG4uZChlLCJ6aXAiLChmdW5jdGlvbigpe3JldHVybiBIfSkpLG4uZChlLCJheGlzVG9wIiwoZnVuY3Rpb24oKXtyZXR1cm4gZXR9KSksbi5kKGUsImF4aXNSaWdodCIsKGZ1bmN0aW9uKCl7cmV0dXJuIG50fSkpLG4uZChlLCJheGlzQm90dG9tIiwoZnVuY3Rpb24oKXtyZXR1cm4gcnR9KSksbi5kKGUsImF4aXNMZWZ0IiwoZnVuY3Rpb24oKXtyZXR1cm4gaXR9KSksbi5kKGUsImJydXNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2l9KSksbi5kKGUsImJydXNoWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRpfSkpLG4uZChlLCJicnVzaFkiLChmdW5jdGlvbigpe3JldHVybiBFaX0pKSxuLmQoZSwiYnJ1c2hTZWxlY3Rpb24iLChmdW5jdGlvbigpe3JldHVybiB3aX0pKSxuLmQoZSwiY2hvcmQiLChmdW5jdGlvbigpe3JldHVybiBJaX0pKSxuLmQoZSwicmliYm9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gWGl9KSksbi5kKGUsIm5lc3QiLChmdW5jdGlvbigpe3JldHVybiBKaX0pKSxuLmQoZSwic2V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gc2F9KSksbi5kKGUsIm1hcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFFpfSkpLG4uZChlLCJrZXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gY2F9KSksbi5kKGUsInZhbHVlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVhfSkpLG4uZChlLCJlbnRyaWVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGF9KSksbi5kKGUsImNvbG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcWV9KSksbi5kKGUsInJnYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdlfSkpLG4uZChlLCJoc2wiLChmdW5jdGlvbigpe3JldHVybiBlbn0pKSxuLmQoZSwibGFiIiwoZnVuY3Rpb24oKXtyZXR1cm4geWF9KSksbi5kKGUsImhjbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdhfSkpLG4uZChlLCJsY2giLChmdW5jdGlvbigpe3JldHVybiBrYX0pKSxuLmQoZSwiZ3JheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBhfSkpLG4uZChlLCJjdWJlaGVsaXgiLChmdW5jdGlvbigpe3JldHVybiBOYX0pKSxuLmQoZSwiY29udG91cnMiLChmdW5jdGlvbigpe3JldHVybiB6YX0pKSxuLmQoZSwiY29udG91ckRlbnNpdHkiLChmdW5jdGlvbigpe3JldHVybiBWYX0pKSxuLmQoZSwiZGlzcGF0Y2giLChmdW5jdGlvbigpe3JldHVybiBodH0pKSxuLmQoZSwiZHJhZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRvfSkpLG4uZChlLCJkcmFnRGlzYWJsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENlfSkpLG4uZChlLCJkcmFnRW5hYmxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2V9KSksbi5kKGUsImRzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNvfSkpLG4uZChlLCJjc3ZQYXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVvfSkpLG4uZChlLCJjc3ZQYXJzZVJvd3MiLChmdW5jdGlvbigpe3JldHVybiBsb30pKSxuLmQoZSwiY3N2Rm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gaG99KSksbi5kKGUsImNzdkZvcm1hdEJvZHkiLChmdW5jdGlvbigpe3JldHVybiBmb30pKSxuLmQoZSwiY3N2Rm9ybWF0Um93cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBvfSkpLG4uZChlLCJjc3ZGb3JtYXRSb3ciLChmdW5jdGlvbigpe3JldHVybiB5b30pKSxuLmQoZSwiY3N2Rm9ybWF0VmFsdWUiLChmdW5jdGlvbigpe3JldHVybiBnb30pKSxuLmQoZSwidHN2UGFyc2UiLChmdW5jdGlvbigpe3JldHVybiB2b30pKSxuLmQoZSwidHN2UGFyc2VSb3dzIiwoZnVuY3Rpb24oKXtyZXR1cm4gYm99KSksbi5kKGUsInRzdkZvcm1hdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHhvfSkpLG4uZChlLCJ0c3ZGb3JtYXRCb2R5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX299KSksbi5kKGUsInRzdkZvcm1hdFJvd3MiLChmdW5jdGlvbigpe3JldHVybiBrb30pKSxuLmQoZSwidHN2Rm9ybWF0Um93IiwoZnVuY3Rpb24oKXtyZXR1cm4gd299KSksbi5kKGUsInRzdkZvcm1hdFZhbHVlIiwoZnVuY3Rpb24oKXtyZXR1cm4gVG99KSksbi5kKGUsImF1dG9UeXBlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRW99KSksbi5kKGUsImVhc2VMaW5lYXIiLChmdW5jdGlvbigpe3JldHVybiBTb30pKSxuLmQoZSwiZWFzZVF1YWQiLChmdW5jdGlvbigpe3JldHVybiBPb30pKSxuLmQoZSwiZWFzZVF1YWRJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFvfSkpLG4uZChlLCJlYXNlUXVhZE91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1vfSkpLG4uZChlLCJlYXNlUXVhZEluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gT299KSksbi5kKGUsImVhc2VDdWJpYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZyfSkpLG4uZChlLCJlYXNlQ3ViaWNJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdyfSkpLG4uZChlLCJlYXNlQ3ViaWNPdXQiLChmdW5jdGlvbigpe3JldHVybiBIcn0pKSxuLmQoZSwiZWFzZUN1YmljSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBWcn0pKSxuLmQoZSwiZWFzZVBvbHkiLChmdW5jdGlvbigpe3JldHVybiBEb30pKSxuLmQoZSwiZWFzZVBvbHlJbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5vfSkpLG4uZChlLCJlYXNlUG9seU91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEJvfSkpLG4uZChlLCJlYXNlUG9seUluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gRG99KSksbi5kKGUsImVhc2VTaW4iLChmdW5jdGlvbigpe3JldHVybiBQb30pKSxuLmQoZSwiZWFzZVNpbkluIiwoZnVuY3Rpb24oKXtyZXR1cm4gUm99KSksbi5kKGUsImVhc2VTaW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBGb30pKSxuLmQoZSwiZWFzZVNpbkluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUG99KSksbi5kKGUsImVhc2VFeHAiLChmdW5jdGlvbigpe3JldHVybiBVb30pKSxuLmQoZSwiZWFzZUV4cEluIiwoZnVuY3Rpb24oKXtyZXR1cm4gWW99KSksbi5kKGUsImVhc2VFeHBPdXQiLChmdW5jdGlvbigpe3JldHVybiB6b30pKSxuLmQoZSwiZWFzZUV4cEluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW99KSksbi5kKGUsImVhc2VDaXJjbGUiLChmdW5jdGlvbigpe3JldHVybiBXb30pKSxuLmQoZSwiZWFzZUNpcmNsZUluIiwoZnVuY3Rpb24oKXtyZXR1cm4gJG99KSksbi5kKGUsImVhc2VDaXJjbGVPdXQiLChmdW5jdGlvbigpe3JldHVybiBxb30pKSxuLmQoZSwiZWFzZUNpcmNsZUluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV299KSksbi5kKGUsImVhc2VCb3VuY2UiLChmdW5jdGlvbigpe3JldHVybiBWb30pKSxuLmQoZSwiZWFzZUJvdW5jZUluIiwoZnVuY3Rpb24oKXtyZXR1cm4gSG99KSksbi5kKGUsImVhc2VCb3VuY2VPdXQiLChmdW5jdGlvbigpe3JldHVybiBWb30pKSxuLmQoZSwiZWFzZUJvdW5jZUluT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gR299KSksbi5kKGUsImVhc2VCYWNrIiwoZnVuY3Rpb24oKXtyZXR1cm4gS299KSksbi5kKGUsImVhc2VCYWNrSW4iLChmdW5jdGlvbigpe3JldHVybiBYb30pKSxuLmQoZSwiZWFzZUJhY2tPdXQiLChmdW5jdGlvbigpe3JldHVybiBab30pKSxuLmQoZSwiZWFzZUJhY2tJbk91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtvfSkpLG4uZChlLCJlYXNlRWxhc3RpYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRzfSkpLG4uZChlLCJlYXNlRWxhc3RpY0luIiwoZnVuY3Rpb24oKXtyZXR1cm4gSm99KSksbi5kKGUsImVhc2VFbGFzdGljT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gdHN9KSksbi5kKGUsImVhc2VFbGFzdGljSW5PdXQiLChmdW5jdGlvbigpe3JldHVybiBlc30pKSxuLmQoZSwiYmxvYiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJzfSkpLG4uZChlLCJidWZmZXIiLChmdW5jdGlvbigpe3JldHVybiBhc30pKSxuLmQoZSwiZHN2IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXN9KSksbi5kKGUsImNzdiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxzfSkpLG4uZChlLCJ0c3YiLChmdW5jdGlvbigpe3JldHVybiBoc30pKSxuLmQoZSwiaW1hZ2UiLChmdW5jdGlvbigpe3JldHVybiBmc30pKSxuLmQoZSwianNvbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBzfSkpLG4uZChlLCJ0ZXh0IiwoZnVuY3Rpb24oKXtyZXR1cm4gc3N9KSksbi5kKGUsInhtbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdzfSkpLG4uZChlLCJodG1sIiwoZnVuY3Rpb24oKXtyZXR1cm4gbXN9KSksbi5kKGUsInN2ZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZzfSkpLG4uZChlLCJmb3JjZUNlbnRlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJzfSkpLG4uZChlLCJmb3JjZUNvbGxpZGUiLChmdW5jdGlvbigpe3JldHVybiBCc30pKSxuLmQoZSwiZm9yY2VMaW5rIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXN9KSksbi5kKGUsImZvcmNlTWFueUJvZHkiLChmdW5jdGlvbigpe3JldHVybiBZc30pKSxuLmQoZSwiZm9yY2VSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiB6c30pKSxuLmQoZSwiZm9yY2VTaW11bGF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ganN9KSksbi5kKGUsImZvcmNlWCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVzfSkpLG4uZChlLCJmb3JjZVkiLChmdW5jdGlvbigpe3JldHVybiAkc30pKSxuLmQoZSwiZm9ybWF0RGVmYXVsdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGFjfSkpLG4uZChlLCJmb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBLc30pKSxuLmQoZSwiZm9ybWF0UHJlZml4IiwoZnVuY3Rpb24oKXtyZXR1cm4gUXN9KSksbi5kKGUsImZvcm1hdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGljfSkpLG4uZChlLCJmb3JtYXRTcGVjaWZpZXIiLChmdW5jdGlvbigpe3JldHVybiBWc30pKSxuLmQoZSwiRm9ybWF0U3BlY2lmaWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3N9KSksbi5kKGUsInByZWNpc2lvbkZpeGVkIiwoZnVuY3Rpb24oKXtyZXR1cm4gb2N9KSksbi5kKGUsInByZWNpc2lvblByZWZpeCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNjfSkpLG4uZChlLCJwcmVjaXNpb25Sb3VuZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNjfSkpLG4uZChlLCJnZW9BcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gSmN9KSksbi5kKGUsImdlb0JvdW5kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFd1fSkpLG4uZChlLCJnZW9DZW50cm9pZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJsfSkpLG4uZChlLCJnZW9DaXJjbGUiLChmdW5jdGlvbigpe3JldHVybiBwbH0pKSxuLmQoZSwiZ2VvQ2xpcEFudGltZXJpZGlhbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIENsfSkpLG4uZChlLCJnZW9DbGlwQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gU2x9KSksbi5kKGUsImdlb0NsaXBFeHRlbnQiLChmdW5jdGlvbigpe3JldHVybiBCbH0pKSxuLmQoZSwiZ2VvQ2xpcFJlY3RhbmdsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFsfSkpLG4uZChlLCJnZW9Db250YWlucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpsfSkpLG4uZChlLCJnZW9EaXN0YW5jZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpsfSkpLG4uZChlLCJnZW9HcmF0aWN1bGUiLChmdW5jdGlvbigpe3JldHVybiBKbH0pKSxuLmQoZSwiZ2VvR3JhdGljdWxlMTAiLChmdW5jdGlvbigpe3JldHVybiB0aH0pKSxuLmQoZSwiZ2VvSW50ZXJwb2xhdGUiLChmdW5jdGlvbigpe3JldHVybiBhaH0pKSxuLmQoZSwiZ2VvTGVuZ3RoIiwoZnVuY3Rpb24oKXtyZXR1cm4gUGx9KSksbi5kKGUsImdlb1BhdGgiLChmdW5jdGlvbigpe3JldHVybiByZn0pKSxuLmQoZSwiZ2VvQWxiZXJzIiwoZnVuY3Rpb24oKXtyZXR1cm4gd2Z9KSksbi5kKGUsImdlb0FsYmVyc1VzYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRmfSkpLG4uZChlLCJnZW9BemltdXRoYWxFcXVhbEFyZWEiLChmdW5jdGlvbigpe3JldHVybiBBZn0pKSxuLmQoZSwiZ2VvQXppbXV0aGFsRXF1YWxBcmVhUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gU2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWlkaXN0YW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2Z9KSksbi5kKGUsImdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gTWZ9KSksbi5kKGUsImdlb0NvbmljQ29uZm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmZ9KSksbi5kKGUsImdlb0NvbmljQ29uZm9ybWFsUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gSWZ9KSksbi5kKGUsImdlb0NvbmljRXF1YWxBcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2Z9KSksbi5kKGUsImdlb0NvbmljRXF1YWxBcmVhUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gX2Z9KSksbi5kKGUsImdlb0NvbmljRXF1aWRpc3RhbnQiLChmdW5jdGlvbigpe3JldHVybiBZZn0pKSxuLmQoZSwiZ2VvQ29uaWNFcXVpZGlzdGFudFJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpmfSkpLG4uZChlLCJnZW9FcXVhbEVhcnRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gVmZ9KSksbi5kKGUsImdlb0VxdWFsRWFydGhSYXciLChmdW5jdGlvbigpe3JldHVybiBIZn0pKSxuLmQoZSwiZ2VvRXF1aXJlY3Rhbmd1bGFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gUGZ9KSksbi5kKGUsImdlb0VxdWlyZWN0YW5ndWxhclJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZmfSkpLG4uZChlLCJnZW9Hbm9tb25pYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhmfSkpLG4uZChlLCJnZW9Hbm9tb25pY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEdmfSkpLG4uZChlLCJnZW9JZGVudGl0eSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpmfSkpLG4uZChlLCJnZW9Qcm9qZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmZ9KSksbi5kKGUsImdlb1Byb2plY3Rpb25NdXRhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmZ9KSksbi5kKGUsImdlb01lcmNhdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gQmZ9KSksbi5kKGUsImdlb01lcmNhdG9yUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmZ9KSksbi5kKGUsImdlb05hdHVyYWxFYXJ0aDEiLChmdW5jdGlvbigpe3JldHVybiBRZn0pKSxuLmQoZSwiZ2VvTmF0dXJhbEVhcnRoMVJhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtmfSkpLG4uZChlLCJnZW9PcnRob2dyYXBoaWMiLChmdW5jdGlvbigpe3JldHVybiB0ZH0pKSxuLmQoZSwiZ2VvT3J0aG9ncmFwaGljUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gSmZ9KSksbi5kKGUsImdlb1N0ZXJlb2dyYXBoaWMiLChmdW5jdGlvbigpe3JldHVybiBuZH0pKSxuLmQoZSwiZ2VvU3RlcmVvZ3JhcGhpY1JhdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGVkfSkpLG4uZChlLCJnZW9UcmFuc3ZlcnNlTWVyY2F0b3IiLChmdW5jdGlvbigpe3JldHVybiBpZH0pKSxuLmQoZSwiZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3IiwoZnVuY3Rpb24oKXtyZXR1cm4gcmR9KSksbi5kKGUsImdlb1JvdGF0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gaGx9KSksbi5kKGUsImdlb1N0cmVhbSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdjfSkpLG4uZChlLCJnZW9UcmFuc2Zvcm0iLChmdW5jdGlvbigpe3JldHVybiBhZn0pKSxuLmQoZSwiY2x1c3RlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNkfSkpLG4uZChlLCJoaWVyYXJjaHkiLChmdW5jdGlvbigpe3JldHVybiBsZH0pKSxuLmQoZSwicGFjayIsKGZ1bmN0aW9uKCl7cmV0dXJuIElkfSkpLG4uZChlLCJwYWNrU2libGluZ3MiLChmdW5jdGlvbigpe3JldHVybiBNZH0pKSxuLmQoZSwicGFja0VuY2xvc2UiLChmdW5jdGlvbigpe3JldHVybiBnZH0pKSxuLmQoZSwicGFydGl0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gemR9KSksbi5kKGUsInN0cmF0aWZ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSGR9KSksbi5kKGUsInRyZWUiLChmdW5jdGlvbigpe3JldHVybiBKZH0pKSxuLmQoZSwidHJlZW1hcCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlwfSkpLG4uZChlLCJ0cmVlbWFwQmluYXJ5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYXB9KSksbi5kKGUsInRyZWVtYXBEaWNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWR9KSksbi5kKGUsInRyZWVtYXBTbGljZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRwfSkpLG4uZChlLCJ0cmVlbWFwU2xpY2VEaWNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gb3B9KSksbi5kKGUsInRyZWVtYXBTcXVhcmlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJwfSkpLG4uZChlLCJ0cmVlbWFwUmVzcXVhcmlmeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIE1ufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUFycmF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gYm59KSksbi5kKGUsImludGVycG9sYXRlQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiBvbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNufSkpLG4uZChlLCJpbnRlcnBvbGF0ZURhdGUiLChmdW5jdGlvbigpe3JldHVybiBfbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVEaXNjcmV0ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUh1ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZU51bWJlciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGtufSkpLG4uZChlLCJpbnRlcnBvbGF0ZU51bWJlckFycmF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gbW59KSksbi5kKGUsImludGVycG9sYXRlT2JqZWN0IiwoZnVuY3Rpb24oKXtyZXR1cm4gd259KSksbi5kKGUsImludGVycG9sYXRlUm91bmQiLChmdW5jdGlvbigpe3JldHVybiBscH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVTdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBBbn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLChmdW5jdGlvbigpe3JldHVybiBmcn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLChmdW5jdGlvbigpe3JldHVybiBkcn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVab29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gZHB9KSksbi5kKGUsImludGVycG9sYXRlUmdiIiwoZnVuY3Rpb24oKXtyZXR1cm4gZG59KSksbi5kKGUsImludGVycG9sYXRlUmdiQmFzaXMiLChmdW5jdGlvbigpe3JldHVybiB5bn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdufSkpLG4uZChlLCJpbnRlcnBvbGF0ZUhzbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlwfSkpLG4uZChlLCJpbnRlcnBvbGF0ZUhzbExvbmciLChmdW5jdGlvbigpe3JldHVybiBncH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVMYWIiLChmdW5jdGlvbigpe3JldHVybiBtcH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIY2wiLChmdW5jdGlvbigpe3JldHVybiBicH0pKSxuLmQoZSwiaW50ZXJwb2xhdGVIY2xMb25nIiwoZnVuY3Rpb24oKXtyZXR1cm4geHB9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4IiwoZnVuY3Rpb24oKXtyZXR1cm4ga3B9KSksbi5kKGUsImludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdwfSkpLG4uZChlLCJwaWVjZXdpc2UiLChmdW5jdGlvbigpe3JldHVybiBUcH0pKSxuLmQoZSwicXVhbnRpemUiLChmdW5jdGlvbigpe3JldHVybiBFcH0pKSxuLmQoZSwicGF0aCIsKGZ1bmN0aW9uKCl7cmV0dXJuICRpfSkpLG4uZChlLCJwb2x5Z29uQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIENwfSkpLG4uZChlLCJwb2x5Z29uQ2VudHJvaWQiLChmdW5jdGlvbigpe3JldHVybiBTcH0pKSxuLmQoZSwicG9seWdvbkh1bGwiLChmdW5jdGlvbigpe3JldHVybiBPcH0pKSxuLmQoZSwicG9seWdvbkNvbnRhaW5zIiwoZnVuY3Rpb24oKXtyZXR1cm4gTnB9KSksbi5kKGUsInBvbHlnb25MZW5ndGgiLChmdW5jdGlvbigpe3JldHVybiBCcH0pKSxuLmQoZSwicXVhZHRyZWUiLChmdW5jdGlvbigpe3JldHVybiBDc30pKSxuLmQoZSwicmFuZG9tVW5pZm9ybSIsKGZ1bmN0aW9uKCl7cmV0dXJuIExwfSkpLG4uZChlLCJyYW5kb21Ob3JtYWwiLChmdW5jdGlvbigpe3JldHVybiBJcH0pKSxuLmQoZSwicmFuZG9tTG9nTm9ybWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gUnB9KSksbi5kKGUsInJhbmRvbUJhdGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gUHB9KSksbi5kKGUsInJhbmRvbUlyd2luSGFsbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZwfSkpLG4uZChlLCJyYW5kb21FeHBvbmVudGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpwfSkpLG4uZChlLCJzY2FsZUJhbmQiLChmdW5jdGlvbigpe3JldHVybiBWcH0pKSxuLmQoZSwic2NhbGVQb2ludCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhwfSkpLG4uZChlLCJzY2FsZUlkZW50aXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gdXl9KSksbi5kKGUsInNjYWxlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4gY3l9KSksbi5kKGUsInNjYWxlTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gdnl9KSksbi5kKGUsInNjYWxlU3ltbG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4ga3l9KSksbi5kKGUsInNjYWxlT3JkaW5hbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEhwfSkpLG4uZChlLCJzY2FsZUltcGxpY2l0IiwoZnVuY3Rpb24oKXtyZXR1cm4gV3B9KSksbi5kKGUsInNjYWxlUG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gU3l9KSksbi5kKGUsInNjYWxlU3FydCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEF5fSkpLG4uZChlLCJzY2FsZVF1YW50aWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXl9KSksbi5kKGUsInNjYWxlUXVhbnRpemUiLChmdW5jdGlvbigpe3JldHVybiBPeX0pKSxuLmQoZSwic2NhbGVUaHJlc2hvbGQiLChmdW5jdGlvbigpe3JldHVybiBOeX0pKSxuLmQoZSwic2NhbGVUaW1lIiwoZnVuY3Rpb24oKXtyZXR1cm4gcHZ9KSksbi5kKGUsInNjYWxlVXRjIiwoZnVuY3Rpb24oKXtyZXR1cm4gVHZ9KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFN2fSkpLG4uZChlLCJzY2FsZVNlcXVlbnRpYWxMb2ciLChmdW5jdGlvbigpe3JldHVybiBBdn0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsUG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gT3Z9KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFNxcnQiLChmdW5jdGlvbigpe3JldHVybiBOdn0pKSxuLmQoZSwic2NhbGVTZXF1ZW50aWFsU3ltbG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gTXZ9KSksbi5kKGUsInNjYWxlU2VxdWVudGlhbFF1YW50aWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gQnZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nTG9nIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nUG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gRnZ9KSksbi5kKGUsInNjYWxlRGl2ZXJnaW5nU3FydCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFB2fSkpLG4uZChlLCJzY2FsZURpdmVyZ2luZ1N5bWxvZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJ2fSkpLG4uZChlLCJ0aWNrRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gb3l9KSksbi5kKGUsInNjaGVtZUNhdGVnb3J5MTAiLChmdW5jdGlvbigpe3JldHVybiBZdn0pKSxuLmQoZSwic2NoZW1lQWNjZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4genZ9KSksbi5kKGUsInNjaGVtZURhcmsyIiwoZnVuY3Rpb24oKXtyZXR1cm4gVXZ9KSksbi5kKGUsInNjaGVtZVBhaXJlZCIsKGZ1bmN0aW9uKCl7cmV0dXJuICR2fSkpLG4uZChlLCJzY2hlbWVQYXN0ZWwxIiwoZnVuY3Rpb24oKXtyZXR1cm4gcXZ9KSksbi5kKGUsInNjaGVtZVBhc3RlbDIiLChmdW5jdGlvbigpe3JldHVybiBXdn0pKSxuLmQoZSwic2NoZW1lU2V0MSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEh2fSkpLG4uZChlLCJzY2hlbWVTZXQyIiwoZnVuY3Rpb24oKXtyZXR1cm4gVnZ9KSksbi5kKGUsInNjaGVtZVNldDMiLChmdW5jdGlvbigpe3JldHVybiBHdn0pKSxuLmQoZSwic2NoZW1lVGFibGVhdTEwIiwoZnVuY3Rpb24oKXtyZXR1cm4gWHZ9KSksbi5kKGUsImludGVycG9sYXRlQnJCRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFF2fSkpLG4uZChlLCJzY2hlbWVCckJHIiwoZnVuY3Rpb24oKXtyZXR1cm4gS3Z9KSksbi5kKGUsImludGVycG9sYXRlUFJHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRifSkpLG4uZChlLCJzY2hlbWVQUkduIiwoZnVuY3Rpb24oKXtyZXR1cm4gSnZ9KSksbi5kKGUsImludGVycG9sYXRlUGlZRyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG5ifSkpLG4uZChlLCJzY2hlbWVQaVlHIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWJ9KSksbi5kKGUsImludGVycG9sYXRlUHVPciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGlifSkpLG4uZChlLCJzY2hlbWVQdU9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gcmJ9KSksbi5kKGUsImludGVycG9sYXRlUmRCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG9ifSkpLG4uZChlLCJzY2hlbWVSZEJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gYWJ9KSksbi5kKGUsImludGVycG9sYXRlUmRHeSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGNifSkpLG4uZChlLCJzY2hlbWVSZEd5IiwoZnVuY3Rpb24oKXtyZXR1cm4gc2J9KSksbi5kKGUsImludGVycG9sYXRlUmRZbEJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gbGJ9KSksbi5kKGUsInNjaGVtZVJkWWxCdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHVifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJkWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZifSkpLG4uZChlLCJzY2hlbWVSZFlsR24iLChmdW5jdGlvbigpe3JldHVybiBoYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVTcGVjdHJhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHBifSkpLG4uZChlLCJzY2hlbWVTcGVjdHJhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJ1R24iLChmdW5jdGlvbigpe3JldHVybiBnYn0pKSxuLmQoZSwic2NoZW1lQnVHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUJ1UHUiLChmdW5jdGlvbigpe3JldHVybiB2Yn0pKSxuLmQoZSwic2NoZW1lQnVQdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIG1ifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUduQnUiLChmdW5jdGlvbigpe3JldHVybiB4Yn0pKSxuLmQoZSwic2NoZW1lR25CdSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJifSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9yUmQiLChmdW5jdGlvbigpe3JldHVybiBrYn0pKSxuLmQoZSwic2NoZW1lT3JSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIF9ifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1QnVHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIFRifSkpLG4uZChlLCJzY2hlbWVQdUJ1R24iLChmdW5jdGlvbigpe3JldHVybiB3Yn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdUJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2J9KSksbi5kKGUsInNjaGVtZVB1QnUiLChmdW5jdGlvbigpe3JldHVybiBFYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVQdVJkIiwoZnVuY3Rpb24oKXtyZXR1cm4gQWJ9KSksbi5kKGUsInNjaGVtZVB1UmQiLChmdW5jdGlvbigpe3JldHVybiBTYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVSZFB1IiwoZnVuY3Rpb24oKXtyZXR1cm4gT2J9KSksbi5kKGUsInNjaGVtZVJkUHUiLChmdW5jdGlvbigpe3JldHVybiBNYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVZbEduQnUiLChmdW5jdGlvbigpe3JldHVybiBCYn0pKSxuLmQoZSwic2NoZW1lWWxHbkJ1IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmJ9KSksbi5kKGUsImludGVycG9sYXRlWWxHbiIsKGZ1bmN0aW9uKCl7cmV0dXJuIExifSkpLG4uZChlLCJzY2hlbWVZbEduIiwoZnVuY3Rpb24oKXtyZXR1cm4gRGJ9KSksbi5kKGUsImludGVycG9sYXRlWWxPckJyIiwoZnVuY3Rpb24oKXtyZXR1cm4gUmJ9KSksbi5kKGUsInNjaGVtZVlsT3JCciIsKGZ1bmN0aW9uKCl7cmV0dXJuIElifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVlsT3JSZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFBifSkpLG4uZChlLCJzY2hlbWVZbE9yUmQiLChmdW5jdGlvbigpe3JldHVybiBGYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVCbHVlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlifSkpLG4uZChlLCJzY2hlbWVCbHVlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUdyZWVucyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFVifSkpLG4uZChlLCJzY2hlbWVHcmVlbnMiLChmdW5jdGlvbigpe3JldHVybiB6Yn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVHcmV5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFifSkpLG4uZChlLCJzY2hlbWVHcmV5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuICRifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVB1cnBsZXMiLChmdW5jdGlvbigpe3JldHVybiBIYn0pKSxuLmQoZSwic2NoZW1lUHVycGxlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFdifSkpLG4uZChlLCJpbnRlcnBvbGF0ZVJlZHMiLChmdW5jdGlvbigpe3JldHVybiBHYn0pKSxuLmQoZSwic2NoZW1lUmVkcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZifSkpLG4uZChlLCJpbnRlcnBvbGF0ZU9yYW5nZXMiLChmdW5jdGlvbigpe3JldHVybiBaYn0pKSxuLmQoZSwic2NoZW1lT3JhbmdlcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFhifSkpLG4uZChlLCJpbnRlcnBvbGF0ZUNpdmlkaXMiLChmdW5jdGlvbigpe3JldHVybiBLYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0IiwoZnVuY3Rpb24oKXtyZXR1cm4gUWJ9KSksbi5kKGUsImludGVycG9sYXRlUmFpbmJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG54fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVdhcm0iLChmdW5jdGlvbigpe3JldHVybiBKYn0pKSxuLmQoZSwiaW50ZXJwb2xhdGVDb29sIiwoZnVuY3Rpb24oKXtyZXR1cm4gdHh9KSksbi5kKGUsImludGVycG9sYXRlU2luZWJvdyIsKGZ1bmN0aW9uKCl7cmV0dXJuIG94fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVR1cmJvIiwoZnVuY3Rpb24oKXtyZXR1cm4gc3h9KSksbi5kKGUsImludGVycG9sYXRlVmlyaWRpcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHV4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZU1hZ21hIiwoZnVuY3Rpb24oKXtyZXR1cm4gbHh9KSksbi5kKGUsImludGVycG9sYXRlSW5mZXJubyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGh4fSkpLG4uZChlLCJpbnRlcnBvbGF0ZVBsYXNtYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ4fSkpLG4uZChlLCJjcmVhdGUiLChmdW5jdGlvbigpe3JldHVybiBkeH0pKSxuLmQoZSwiY3JlYXRvciIsKGZ1bmN0aW9uKCl7cmV0dXJuIHJlfSkpLG4uZChlLCJsb2NhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHl4fSkpLG4uZChlLCJtYXRjaGVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ3R9KSksbi5kKGUsIm1vdXNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gRG59KSksbi5kKGUsIm5hbWVzcGFjZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFR0fSkpLG4uZChlLCJuYW1lc3BhY2VzIiwoZnVuY3Rpb24oKXtyZXR1cm4gd3R9KSksbi5kKGUsImNsaWVudFBvaW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gTm59KSksbi5kKGUsInNlbGVjdCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdlfSkpLG4uZChlLCJzZWxlY3RBbGwiLChmdW5jdGlvbigpe3JldHVybiBteH0pKSxuLmQoZSwic2VsZWN0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2V9KSksbi5kKGUsInNlbGVjdG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gZHR9KSksbi5kKGUsInNlbGVjdG9yQWxsIiwoZnVuY3Rpb24oKXtyZXR1cm4geXR9KSksbi5kKGUsInN0eWxlIiwoZnVuY3Rpb24oKXtyZXR1cm4gSXR9KSksbi5kKGUsInRvdWNoIiwoZnVuY3Rpb24oKXtyZXR1cm4gQm59KSksbi5kKGUsInRvdWNoZXMiLChmdW5jdGlvbigpe3JldHVybiB2eH0pKSxuLmQoZSwid2luZG93IiwoZnVuY3Rpb24oKXtyZXR1cm4gTnR9KSksbi5kKGUsImV2ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4gdWV9KSksbi5kKGUsImN1c3RvbUV2ZW50IiwoZnVuY3Rpb24oKXtyZXR1cm4geWV9KSksbi5kKGUsImFyYyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGp4fSkpLG4uZChlLCJhcmVhIiwoZnVuY3Rpb24oKXtyZXR1cm4gV3h9KSksbi5kKGUsImxpbmUiLChmdW5jdGlvbigpe3JldHVybiBxeH0pKSxuLmQoZSwicGllIiwoZnVuY3Rpb24oKXtyZXR1cm4gR3h9KSksbi5kKGUsImFyZWFSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiB0X30pKSxuLmQoZSwicmFkaWFsQXJlYSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRffSkpLG4uZChlLCJsaW5lUmFkaWFsIiwoZnVuY3Rpb24oKXtyZXR1cm4gSnh9KSksbi5kKGUsInJhZGlhbExpbmUiLChmdW5jdGlvbigpe3JldHVybiBKeH0pKSxuLmQoZSwicG9pbnRSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiBlX30pKSxuLmQoZSwibGlua0hvcml6b250YWwiLChmdW5jdGlvbigpe3JldHVybiB1X30pKSxuLmQoZSwibGlua1ZlcnRpY2FsIiwoZnVuY3Rpb24oKXtyZXR1cm4gbF99KSksbi5kKGUsImxpbmtSYWRpYWwiLChmdW5jdGlvbigpe3JldHVybiBoX30pKSxuLmQoZSwic3ltYm9sIiwoZnVuY3Rpb24oKXtyZXR1cm4gTV99KSksbi5kKGUsInN5bWJvbHMiLChmdW5jdGlvbigpe3JldHVybiBBX30pKSxuLmQoZSwic3ltYm9sQ2lyY2xlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZl99KSksbi5kKGUsInN5bWJvbENyb3NzIiwoZnVuY3Rpb24oKXtyZXR1cm4gZF99KSksbi5kKGUsInN5bWJvbERpYW1vbmQiLChmdW5jdGlvbigpe3JldHVybiBnX30pKSxuLmQoZSwic3ltYm9sU3F1YXJlIiwoZnVuY3Rpb24oKXtyZXR1cm4gX199KSksbi5kKGUsInN5bWJvbFN0YXIiLChmdW5jdGlvbigpe3JldHVybiB4X30pKSxuLmQoZSwic3ltYm9sVHJpYW5nbGUiLChmdW5jdGlvbigpe3JldHVybiB3X30pKSxuLmQoZSwic3ltYm9sV3llIiwoZnVuY3Rpb24oKXtyZXR1cm4gU199KSksbi5kKGUsImN1cnZlQmFzaXNDbG9zZWQiLChmdW5jdGlvbigpe3JldHVybiBJX30pKSxuLmQoZSwiY3VydmVCYXNpc09wZW4iLChmdW5jdGlvbigpe3JldHVybiBGX30pKSxuLmQoZSwiY3VydmVCYXNpcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIERffSkpLG4uZChlLCJjdXJ2ZUJ1bmRsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGpffSkpLG4uZChlLCJjdXJ2ZUNhcmRpbmFsQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gcV99KSksbi5kKGUsImN1cnZlQ2FyZGluYWxPcGVuIiwoZnVuY3Rpb24oKXtyZXR1cm4gSF99KSksbi5kKGUsImN1cnZlQ2FyZGluYWwiLChmdW5jdGlvbigpe3JldHVybiBVX30pKSxuLmQoZSwiY3VydmVDYXRtdWxsUm9tQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gS199KSksbi5kKGUsImN1cnZlQ2F0bXVsbFJvbU9wZW4iLChmdW5jdGlvbigpe3JldHVybiBKX30pKSxuLmQoZSwiY3VydmVDYXRtdWxsUm9tIiwoZnVuY3Rpb24oKXtyZXR1cm4gWF99KSksbi5kKGUsImN1cnZlTGluZWFyQ2xvc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gZWt9KSksbi5kKGUsImN1cnZlTGluZWFyIiwoZnVuY3Rpb24oKXtyZXR1cm4genh9KSksbi5kKGUsImN1cnZlTW9ub3RvbmVYIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWt9KSksbi5kKGUsImN1cnZlTW9ub3RvbmVZIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGt9KSksbi5kKGUsImN1cnZlTmF0dXJhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRrfSkpLG4uZChlLCJjdXJ2ZVN0ZXAiLChmdW5jdGlvbigpe3JldHVybiB5a30pKSxuLmQoZSwiY3VydmVTdGVwQWZ0ZXIiLChmdW5jdGlvbigpe3JldHVybiBta30pKSxuLmQoZSwiY3VydmVTdGVwQmVmb3JlIiwoZnVuY3Rpb24oKXtyZXR1cm4gZ2t9KSksbi5kKGUsInN0YWNrIiwoZnVuY3Rpb24oKXtyZXR1cm4gX2t9KSksbi5kKGUsInN0YWNrT2Zmc2V0RXhwYW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4ga2t9KSksbi5kKGUsInN0YWNrT2Zmc2V0RGl2ZXJnaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gd2t9KSksbi5kKGUsInN0YWNrT2Zmc2V0Tm9uZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZrfSkpLG4uZChlLCJzdGFja09mZnNldFNpbGhvdWV0dGUiLChmdW5jdGlvbigpe3JldHVybiBUa30pKSxuLmQoZSwic3RhY2tPZmZzZXRXaWdnbGUiLChmdW5jdGlvbigpe3JldHVybiBFa30pKSxuLmQoZSwic3RhY2tPcmRlckFwcGVhcmFuY2UiLChmdW5jdGlvbigpe3JldHVybiBDa30pKSxuLmQoZSwic3RhY2tPcmRlckFzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFrfSkpLG4uZChlLCJzdGFja09yZGVyRGVzY2VuZGluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE9rfSkpLG4uZChlLCJzdGFja09yZGVySW5zaWRlT3V0IiwoZnVuY3Rpb24oKXtyZXR1cm4gTmt9KSksbi5kKGUsInN0YWNrT3JkZXJOb25lIiwoZnVuY3Rpb24oKXtyZXR1cm4gYmt9KSksbi5kKGUsInN0YWNrT3JkZXJSZXZlcnNlIiwoZnVuY3Rpb24oKXtyZXR1cm4gQmt9KSksbi5kKGUsInRpbWVJbnRlcnZhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIEx5fSkpLG4uZChlLCJ0aW1lTWlsbGlzZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiB5Z30pKSxuLmQoZSwidGltZU1pbGxpc2Vjb25kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGdnfSkpLG4uZChlLCJ1dGNNaWxsaXNlY29uZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHlnfSkpLG4uZChlLCJ1dGNNaWxsaXNlY29uZHMiLChmdW5jdGlvbigpe3JldHVybiBnZ30pKSxuLmQoZSwidGltZVNlY29uZCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZnfSkpLG4uZChlLCJ0aW1lU2Vjb25kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRnfSkpLG4uZChlLCJ1dGNTZWNvbmQiLChmdW5jdGlvbigpe3JldHVybiBmZ30pKSxuLmQoZSwidXRjU2Vjb25kcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGRnfSkpLG4uZChlLCJ0aW1lTWludXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4gdWd9KSksbi5kKGUsInRpbWVNaW51dGVzIiwoZnVuY3Rpb24oKXtyZXR1cm4gbGd9KSksbi5kKGUsInRpbWVIb3VyIiwoZnVuY3Rpb24oKXtyZXR1cm4gb2d9KSksbi5kKGUsInRpbWVIb3VycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHNnfSkpLG4uZChlLCJ0aW1lRGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gcmd9KSksbi5kKGUsInRpbWVEYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gaWd9KSksbi5kKGUsInRpbWVXZWVrIiwoZnVuY3Rpb24oKXtyZXR1cm4gVXl9KSksbi5kKGUsInRpbWVXZWVrcyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFh5fSkpLG4uZChlLCJ0aW1lU3VuZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVXl9KSksbi5kKGUsInRpbWVTdW5kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gWHl9KSksbi5kKGUsInRpbWVNb25kYXkiLChmdW5jdGlvbigpe3JldHVybiAkeX0pKSxuLmQoZSwidGltZU1vbmRheXMiLChmdW5jdGlvbigpe3JldHVybiBaeX0pKSxuLmQoZSwidGltZVR1ZXNkYXkiLChmdW5jdGlvbigpe3JldHVybiBxeX0pKSxuLmQoZSwidGltZVR1ZXNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gS3l9KSksbi5kKGUsInRpbWVXZWRuZXNkYXkiLChmdW5jdGlvbigpe3JldHVybiBXeX0pKSxuLmQoZSwidGltZVdlZG5lc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBReX0pKSxuLmQoZSwidGltZVRodXJzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gSHl9KSksbi5kKGUsInRpbWVUaHVyc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBKeX0pKSxuLmQoZSwidGltZUZyaWRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFZ5fSkpLG4uZChlLCJ0aW1lRnJpZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRnfSkpLG4uZChlLCJ0aW1lU2F0dXJkYXkiLChmdW5jdGlvbigpe3JldHVybiBHeX0pKSxuLmQoZSwidGltZVNhdHVyZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGVnfSkpLG4uZChlLCJ0aW1lTW9udGgiLChmdW5jdGlvbigpe3JldHVybiBqeX0pKSxuLmQoZSwidGltZU1vbnRocyIsKGZ1bmN0aW9uKCl7cmV0dXJuIFl5fSkpLG4uZChlLCJ0aW1lWWVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJ5fSkpLG4uZChlLCJ0aW1lWWVhcnMiLChmdW5jdGlvbigpe3JldHVybiBGeX0pKSxuLmQoZSwidXRjTWludXRlIiwoZnVuY3Rpb24oKXtyZXR1cm4ga3Z9KSksbi5kKGUsInV0Y01pbnV0ZXMiLChmdW5jdGlvbigpe3JldHVybiB3dn0pKSxuLmQoZSwidXRjSG91ciIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJ2fSkpLG4uZChlLCJ1dGNIb3VycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh2fSkpLG4uZChlLCJ1dGNEYXkiLChmdW5jdGlvbigpe3JldHVybiBEZ30pKSxuLmQoZSwidXRjRGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIExnfSkpLG4uZChlLCJ1dGNXZWVrIiwoZnVuY3Rpb24oKXtyZXR1cm4gdmd9KSksbi5kKGUsInV0Y1dlZWtzIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWd9KSksbi5kKGUsInV0Y1N1bmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHZnfSkpLG4uZChlLCJ1dGNTdW5kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gRWd9KSksbi5kKGUsInV0Y01vbmRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGJnfSkpLG4uZChlLCJ1dGNNb25kYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gQ2d9KSksbi5kKGUsInV0Y1R1ZXNkYXkiLChmdW5jdGlvbigpe3JldHVybiB4Z30pKSxuLmQoZSwidXRjVHVlc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBTZ30pKSxuLmQoZSwidXRjV2VkbmVzZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gX2d9KSksbi5kKGUsInV0Y1dlZG5lc2RheXMiLChmdW5jdGlvbigpe3JldHVybiBBZ30pKSxuLmQoZSwidXRjVGh1cnNkYXkiLChmdW5jdGlvbigpe3JldHVybiBrZ30pKSxuLmQoZSwidXRjVGh1cnNkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gTWd9KSksbi5kKGUsInV0Y0ZyaWRheSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHdnfSkpLG4uZChlLCJ1dGNGcmlkYXlzIiwoZnVuY3Rpb24oKXtyZXR1cm4gT2d9KSksbi5kKGUsInV0Y1NhdHVyZGF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVGd9KSksbi5kKGUsInV0Y1NhdHVyZGF5cyIsKGZ1bmN0aW9uKCl7cmV0dXJuIE5nfSkpLG4uZChlLCJ1dGNNb250aCIsKGZ1bmN0aW9uKCl7cmV0dXJuIGd2fSkpLG4uZChlLCJ1dGNNb250aHMiLChmdW5jdGlvbigpe3JldHVybiBtdn0pKSxuLmQoZSwidXRjWWVhciIsKGZ1bmN0aW9uKCl7cmV0dXJuIFJnfSkpLG4uZChlLCJ1dGNZZWFycyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEZnfSkpLG4uZChlLCJ0aW1lRm9ybWF0RGVmYXVsdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIGx2fSkpLG4uZChlLCJ0aW1lRm9ybWF0IiwoZnVuY3Rpb24oKXtyZXR1cm4gJGd9KSksbi5kKGUsInRpbWVQYXJzZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHFnfSkpLG4uZChlLCJ1dGNGb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBXZ30pKSxuLmQoZSwidXRjUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBIZ30pKSxuLmQoZSwidGltZUZvcm1hdExvY2FsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHpnfSkpLG4uZChlLCJpc29Gb3JtYXQiLChmdW5jdGlvbigpe3JldHVybiBEa30pKSxuLmQoZSwiaXNvUGFyc2UiLChmdW5jdGlvbigpe3JldHVybiBMa30pKSxuLmQoZSwibm93IiwoZnVuY3Rpb24oKXtyZXR1cm4gVW59KSksbi5kKGUsInRpbWVyIiwoZnVuY3Rpb24oKXtyZXR1cm4gV259KSksbi5kKGUsInRpbWVyRmx1c2giLChmdW5jdGlvbigpe3JldHVybiBIbn0pKSxuLmQoZSwidGltZW91dCIsKGZ1bmN0aW9uKCl7cmV0dXJuIFpufSkpLG4uZChlLCJpbnRlcnZhbCIsKGZ1bmN0aW9uKCl7cmV0dXJuIElrfSkpLG4uZChlLCJ0cmFuc2l0aW9uIiwoZnVuY3Rpb24oKXtyZXR1cm4gVXJ9KSksbi5kKGUsImFjdGl2ZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEtyfSkpLG4uZChlLCJpbnRlcnJ1cHQiLChmdW5jdGlvbigpe3JldHVybiBzcn0pKSxuLmQoZSwidm9yb25vaSIsKGZ1bmN0aW9uKCl7cmV0dXJuIHh3fSkpLG4uZChlLCJ6b29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gTHd9KSksbi5kKGUsInpvb21UcmFuc2Zvcm0iLChmdW5jdGlvbigpe3JldHVybiBFd30pKSxuLmQoZSwiem9vbUlkZW50aXR5IiwoZnVuY3Rpb24oKXtyZXR1cm4gVHd9KSk7dmFyIHI9IjUuMTYuMCIsaT1mdW5jdGlvbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn0sYT1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMT09PXQubGVuZ3RoJiYoZT10LHQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gaShlKHQpLG4pfSkse2xlZnQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKTwwP3I9YSsxOmk9YX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24oZSxuLHIsaSl7Zm9yKG51bGw9PXImJihyPTApLG51bGw9PWkmJihpPWUubGVuZ3RoKTtyPGk7KXt2YXIgYT1yK2k+Pj4xO3QoZVthXSxuKT4wP2k9YTpyPWErMX1yZXR1cm4gcn19fTt2YXIgbz1hKGkpLHM9by5yaWdodCxjPW8ubGVmdCx1PXMsbD1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPWgpO2Zvcih2YXIgbj0wLHI9dC5sZW5ndGgtMSxpPXRbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPWUoaSxpPXRbKytuXSk7cmV0dXJuIGF9O2Z1bmN0aW9uIGgodCxlKXtyZXR1cm5bdCxlXX12YXIgZj1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KHMqYyk7Zm9yKG51bGw9PW4mJihuPWgpLHI9YT0wO3I8czsrK3IpZm9yKG89dFtyXSxpPTA7aTxjOysraSwrK2EpdVthXT1uKG8sZVtpXSk7cmV0dXJuIHV9LGQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LHA9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10P05hTjordH0seT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10Lmxlbmd0aCxhPTAsbz0tMSxzPTAsYz0wO2lmKG51bGw9PWUpZm9yKDsrK288aTspaXNOYU4obj1wKHRbb10pKXx8KGMrPShyPW4tcykqKG4tKHMrPXIvKythKSkpO2Vsc2UgZm9yKDsrK288aTspaXNOYU4obj1wKGUodFtvXSxvLHQpKSl8fChjKz0ocj1uLXMpKihuLShzKz1yLysrYSkpKTtpZihhPjEpcmV0dXJuIGMvKGEtMSl9LGc9ZnVuY3Rpb24odCxlKXt2YXIgbj15KHQsZSk7cmV0dXJuIG4/TWF0aC5zcXJ0KG4pOm59LG09ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShuPXRbb10pJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49dFtvXSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KG49ZSh0W29dLG8sdCkpJiZuPj1uKWZvcihyPWk9bjsrK288YTspbnVsbCE9KG49ZSh0W29dLG8sdCkpJiYocj5uJiYocj1uKSxpPG4mJihpPW4pKTtyZXR1cm5bcixpXX0sdj1BcnJheS5wcm90b3R5cGUsYj12LnNsaWNlLHg9di5tYXAsXz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGs9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHc9ZnVuY3Rpb24odCxlLG4pe3Q9K3QsZT0rZSxuPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KGU9dCx0PTAsMSk6aTwzPzE6K247Zm9yKHZhciByPS0xLGk9MHxNYXRoLm1heCgwLE1hdGguY2VpbCgoZS10KS9uKSksYT1uZXcgQXJyYXkoaSk7KytyPGk7KWFbcl09dCtyKm47cmV0dXJuIGF9LFQ9TWF0aC5zcXJ0KDUwKSxFPU1hdGguc3FydCgxMCksQz1NYXRoLnNxcnQoMiksUz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhLG8scz0tMTtpZihuPStuLCh0PSt0KT09PShlPStlKSYmbj4wKXJldHVyblt0XTtpZigocj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1BKHQsZSxuKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiByJiZhLnJldmVyc2UoKSxhfTtmdW5jdGlvbiBBKHQsZSxuKXt2YXIgcj0oZS10KS9NYXRoLm1heCgwLG4pLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLkxOMTApLGE9ci9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8oYT49VD8xMDphPj1FPzU6YT49Qz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKGE+PVQ/MTA6YT49RT81OmE+PUM/MjoxKX1mdW5jdGlvbiBNKHQsZSxuKXt2YXIgcj1NYXRoLmFicyhlLXQpL01hdGgubWF4KDAsbiksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4xMCkpLGE9ci9pO3JldHVybiBhPj1UP2kqPTEwOmE+PUU/aSo9NTphPj1DJiYoaSo9MiksZTx0Py1pOml9dmFyIE89ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyh0Lmxlbmd0aCkvTWF0aC5MTjIpKzF9LE49ZnVuY3Rpb24oKXt2YXIgdD1rLGU9bSxuPU87ZnVuY3Rpb24gcihyKXt2YXIgaSxhLG89ci5sZW5ndGgscz1uZXcgQXJyYXkobyk7Zm9yKGk9MDtpPG87KytpKXNbaV09dChyW2ldLGkscik7dmFyIGM9ZShzKSxsPWNbMF0saD1jWzFdLGY9bihzLGwsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9TShsLGgsZiksZj13KE1hdGguY2VpbChsL2YpKmYsaCxmKSk7Zm9yKHZhciBkPWYubGVuZ3RoO2ZbMF08PWw7KWYuc2hpZnQoKSwtLWQ7Zm9yKDtmW2QtMV0+aDspZi5wb3AoKSwtLWQ7dmFyIHAseT1uZXcgQXJyYXkoZCsxKTtmb3IoaT0wO2k8PWQ7KytpKShwPXlbaV09W10pLngwPWk+MD9mW2ktMV06bCxwLngxPWk8ZD9mW2ldOmg7Zm9yKGk9MDtpPG87KytpKWw8PShhPXNbaV0pJiZhPD1oJiZ5W3UoZixhLDAsZCldLnB1c2gocltpXSk7cmV0dXJuIHl9cmV0dXJuIHIudmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpfKGUpLHIpOnR9LHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6XyhbdFswXSx0WzFdXSkscik6ZX0sci50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9fKGIuY2FsbCh0KSk6Xyh0KSxyKTpufSxyfSxCPWZ1bmN0aW9uKHQsZSxuKXtpZihudWxsPT1uJiYobj1wKSxyPXQubGVuZ3RoKXtpZigoZT0rZSk8PTB8fHI8MilyZXR1cm4rbih0WzBdLDAsdCk7aWYoZT49MSlyZXR1cm4rbih0W3ItMV0sci0xLHQpO3ZhciByLGk9KHItMSkqZSxhPU1hdGguZmxvb3IoaSksbz0rbih0W2FdLGEsdCk7cmV0dXJuIG8rKCtuKHRbYSsxXSxhKzEsdCktbykqKGktYSl9fSxEPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD14LmNhbGwodCxwKS5zb3J0KGkpLE1hdGguY2VpbCgobi1lKS8oMiooQih0LC43NSktQih0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEw9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLmNlaWwoKG4tZSkvKDMuNSpnKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LEk9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5sZW5ndGgsYT0tMTtpZihudWxsPT1lKXtmb3IoOysrYTxpOylpZihudWxsIT0obj10W2FdKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj10W2FdKSYmbj5yJiYocj1uKX1lbHNlIGZvcig7KythPGk7KWlmKG51bGwhPShuPWUodFthXSxhLHQpKSYmbj49bilmb3Iocj1uOysrYTxpOyludWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+ciYmKHI9bik7cmV0dXJuIHJ9LFI9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGk9cixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49cCh0W2FdKSk/LS1pOm8rPW47ZWxzZSBmb3IoOysrYTxyOylpc05hTihuPXAoZSh0W2FdLGEsdCkpKT8tLWk6bys9bjtpZihpKXJldHVybiBvL2l9LEY9ZnVuY3Rpb24odCxlKXt2YXIgbixyPXQubGVuZ3RoLGE9LTEsbz1bXTtpZihudWxsPT1lKWZvcig7KythPHI7KWlzTmFOKG49cCh0W2FdKSl8fG8ucHVzaChuKTtlbHNlIGZvcig7KythPHI7KWlzTmFOKG49cChlKHRbYV0sYSx0KSkpfHxvLnB1c2gobik7cmV0dXJuIEIoby5zb3J0KGkpLC41KX0sUD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShyPXRbaV0pLmxlbmd0aDstLWU+PTA7KW5bLS1vXT1yW2VdO3JldHVybiBufSxqPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KG49dFthXSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49dFthXSkmJnI+biYmKHI9bil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0obj1lKHRbYV0sYSx0KSkmJm4+PW4pZm9yKHI9bjsrK2E8aTspbnVsbCE9KG49ZSh0W2FdLGEsdCkpJiZyPm4mJihyPW4pO3JldHVybiByfSxZPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pO24tLTspcltuXT10W2Vbbl1dO3JldHVybiByfSx6PWZ1bmN0aW9uKHQsZSl7aWYobj10Lmxlbmd0aCl7dmFyIG4scixhPTAsbz0wLHM9dFtvXTtmb3IobnVsbD09ZSYmKGU9aSk7KythPG47KShlKHI9dFthXSxzKTwwfHwwIT09ZShzLHMpKSYmKHM9cixvPWEpO3JldHVybiAwPT09ZShzLHMpP286dm9pZCAwfX0sVT1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByLGksYT0obnVsbD09bj90Lmxlbmd0aDpuKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxyPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1yO3JldHVybiB0fSwkPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10Lmxlbmd0aCxpPS0xLGE9MDtpZihudWxsPT1lKWZvcig7KytpPHI7KShuPSt0W2ldKSYmKGErPW4pO2Vsc2UgZm9yKDsrK2k8cjspKG49K2UodFtpXSxpLHQpKSYmKGErPW4pO3JldHVybiBhfSxxPWZ1bmN0aW9uKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLG49aih0LFcpLHI9bmV3IEFycmF5KG4pOysrZTxuOylmb3IodmFyIGksYT0tMSxvPXJbZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIHJ9O2Z1bmN0aW9uIFcodCl7cmV0dXJuIHQubGVuZ3RofXZhciBIPWZ1bmN0aW9uKCl7cmV0dXJuIHEoYXJndW1lbnRzKX0sVj1BcnJheS5wcm90b3R5cGUuc2xpY2UsRz1mdW5jdGlvbih0KXtyZXR1cm4gdH07ZnVuY3Rpb24gWCh0KXtyZXR1cm4idHJhbnNsYXRlKCIrKHQrLjUpKyIsMCkifWZ1bmN0aW9uIFoodCl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKHQrLjUpKyIpIn1mdW5jdGlvbiBLKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4rdChlKX19ZnVuY3Rpb24gUSh0KXt2YXIgZT1NYXRoLm1heCgwLHQuYmFuZHdpZHRoKCktMSkvMjtyZXR1cm4gdC5yb3VuZCgpJiYoZT1NYXRoLnJvdW5kKGUpKSxmdW5jdGlvbihuKXtyZXR1cm4rdChuKStlfX1mdW5jdGlvbiBKKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHR0KHQsZSl7dmFyIG49W10scj1udWxsLGk9bnVsbCxhPTYsbz02LHM9MyxjPTE9PT10fHw0PT09dD8tMToxLHU9ND09PXR8fDI9PT10PyJ4IjoieSIsbD0xPT09dHx8Mz09PXQ/WDpaO2Z1bmN0aW9uIGgoaCl7dmFyIGY9bnVsbD09cj9lLnRpY2tzP2UudGlja3MuYXBwbHkoZSxuKTplLmRvbWFpbigpOnIsZD1udWxsPT1pP2UudGlja0Zvcm1hdD9lLnRpY2tGb3JtYXQuYXBwbHkoZSxuKTpHOmkscD1NYXRoLm1heChhLDApK3MseT1lLnJhbmdlKCksZz0reVswXSsuNSxtPSt5W3kubGVuZ3RoLTFdKy41LHY9KGUuYmFuZHdpZHRoP1E6SykoZS5jb3B5KCkpLGI9aC5zZWxlY3Rpb24/aC5zZWxlY3Rpb24oKTpoLHg9Yi5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFtudWxsXSksXz1iLnNlbGVjdEFsbCgiLnRpY2siKS5kYXRhKGYsZSkub3JkZXIoKSxrPV8uZXhpdCgpLHc9Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidGljayIpLFQ9Xy5zZWxlY3QoImxpbmUiKSxFPV8uc2VsZWN0KCJ0ZXh0Iik7eD14Lm1lcmdlKHguZW50ZXIoKS5pbnNlcnQoInBhdGgiLCIudGljayIpLmF0dHIoImNsYXNzIiwiZG9tYWluIikuYXR0cigic3Ryb2tlIiwiY3VycmVudENvbG9yIikpLF89Xy5tZXJnZSh3KSxUPVQubWVyZ2Uody5hcHBlbmQoImxpbmUiKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUrIjIiLGMqYSkpLEU9RS5tZXJnZSh3LmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCJjdXJyZW50Q29sb3IiKS5hdHRyKHUsYypwKS5hdHRyKCJkeSIsMT09PXQ/IjBlbSI6Mz09PXQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxoIT09YiYmKHg9eC50cmFuc2l0aW9uKGgpLF89Xy50cmFuc2l0aW9uKGgpLFQ9VC50cmFuc2l0aW9uKGgpLEU9RS50cmFuc2l0aW9uKGgpLGs9ay50cmFuc2l0aW9uKGgpLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PXYodCkpP2wodCk6dGhpcy5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpfSkpLHcuYXR0cigib3BhY2l0eSIsMWUtNikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlLl9fYXhpcztyZXR1cm4gbChlJiZpc0Zpbml0ZShlPWUodCkpP2U6dih0KSl9KSkpLGsucmVtb3ZlKCkseC5hdHRyKCJkIiw0PT09dHx8Mj09dD9vPyJNIitjKm8rIiwiK2crIkgwLjVWIittKyJIIitjKm86Ik0wLjUsIitnKyJWIittOm8/Ik0iK2crIiwiK2MqbysiVjAuNUgiK20rIlYiK2MqbzoiTSIrZysiLDAuNUgiK20pLF8uYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodih0KSl9KSksVC5hdHRyKHUrIjIiLGMqYSksRS5hdHRyKHUsYypwKS50ZXh0KGQpLGIuZmlsdGVyKEopLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLDI9PT10PyJzdGFydCI6ND09PXQ/ImVuZCI6Im1pZGRsZSIpLGIuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz12fSkpfXJldHVybiBoLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsaCk6ZX0saC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBuPVYuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P1tdOlYuY2FsbCh0KSxoKTpuLnNsaWNlKCl9LGgudGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6Vi5jYWxsKHQpLGgpOnImJnIuc2xpY2UoKX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsaCk6aX0saC50aWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1vPSt0LGgpOmF9LGgudGlja1NpemVJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxoKTphfSxoLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3QsaCk6b30saC50aWNrUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCxoKTpzfSxofWZ1bmN0aW9uIGV0KHQpe3JldHVybiB0dCgxLHQpfWZ1bmN0aW9uIG50KHQpe3JldHVybiB0dCgyLHQpfWZ1bmN0aW9uIHJ0KHQpe3JldHVybiB0dCgzLHQpfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0dCg0LHQpfXZhciBhdD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBvdCgpe2Zvcih2YXIgdCxlPTAsbj1hcmd1bWVudHMubGVuZ3RoLHI9e307ZTxuOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gcnx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO3JbdF09W119cmV0dXJuIG5ldyBzdChyKX1mdW5jdGlvbiBzdCh0KXt0aGlzLl89dH1mdW5jdGlvbiBjdCh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBuPSIiLHI9dC5pbmRleE9mKCIuIik7aWYocj49MCYmKG49dC5zbGljZShyKzEpLHQ9dC5zbGljZSgwLHIpKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6bn19KSl9ZnVuY3Rpb24gdXQodCxlKXtmb3IodmFyIG4scj0wLGk9dC5sZW5ndGg7cjxpOysrcilpZigobj10W3JdKS5uYW1lPT09ZSlyZXR1cm4gbi52YWx1ZX1mdW5jdGlvbiBsdCh0LGUsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7KytyKWlmKHRbcl0ubmFtZT09PWUpe3Rbcl09YXQsdD10LnNsaWNlKDAscikuY29uY2F0KHQuc2xpY2UocisxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTplLHZhbHVlOm59KSx0fXN0LnByb3RvdHlwZT1vdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnN0LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIG4scj10aGlzLl8saT1jdCh0KyIiLHIpLGE9LTEsbz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitlKTtmb3IoOysrYTxvOylpZihuPSh0PWlbYV0pLnR5cGUpcltuXT1sdChyW25dLHQubmFtZSxlKTtlbHNlIGlmKG51bGw9PWUpZm9yKG4gaW4gcilyW25dPWx0KHJbbl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KythPG87KWlmKChuPSh0PWlbYV0pLnR5cGUpJiYobj11dChyW25dLHQubmFtZSkpKXJldHVybiBufSxjb3B5OmZ1bmN0aW9uKCl7dmFyIHQ9e30sZT10aGlzLl87Zm9yKHZhciBuIGluIGUpdFtuXT1lW25dLnNsaWNlKCk7cmV0dXJuIG5ldyBzdCh0KX0sY2FsbDpmdW5jdGlvbih0LGUpe2lmKChuPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIG4scixpPW5ldyBBcnJheShuKSxhPTA7YTxuOysrYSlpW2FdPWFyZ3VtZW50c1thKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKGE9MCxuPShyPXRoaXMuX1t0XSkubGVuZ3RoO2E8bjsrK2EpclthXS52YWx1ZS5hcHBseShlLGkpfSxhcHBseTpmdW5jdGlvbih0LGUsbil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtmb3IodmFyIHI9dGhpcy5fW3RdLGk9MCxhPXIubGVuZ3RoO2k8YTsrK2kpcltpXS52YWx1ZS5hcHBseShlLG4pfX07dmFyIGh0PW90O2Z1bmN0aW9uIGZ0KCl7fXZhciBkdD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9mdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IodCl9fTtmdW5jdGlvbiBwdCgpe3JldHVybltdfXZhciB5dD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9wdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwodCl9fSxndD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXRjaGVzKHQpfX0sbXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBBcnJheSh0Lmxlbmd0aCl9O2Z1bmN0aW9uIHZ0KHQsZSl7dGhpcy5vd25lckRvY3VtZW50PXQub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST10Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PXQsdGhpcy5fX2RhdGFfXz1lfXZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dnQsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUodCxlKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IodCl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHQpfX07ZnVuY3Rpb24gYnQodCxlLG4scixpLGEpe2Zvcih2YXIgbyxzPTAsYz1lLmxlbmd0aCx1PWEubGVuZ3RoO3M8dTsrK3MpKG89ZVtzXSk/KG8uX19kYXRhX189YVtzXSxyW3NdPW8pOm5bc109bmV3IHZ0KHQsYVtzXSk7Zm9yKDtzPGM7KytzKShvPWVbc10pJiYoaVtzXT1vKX1mdW5jdGlvbiB4dCh0LGUsbixyLGksYSxvKXt2YXIgcyxjLHUsbD17fSxoPWUubGVuZ3RoLGY9YS5sZW5ndGgsZD1uZXcgQXJyYXkoaCk7Zm9yKHM9MDtzPGg7KytzKShjPWVbc10pJiYoZFtzXT11PSIkIitvLmNhbGwoYyxjLl9fZGF0YV9fLHMsZSksdSBpbiBsP2lbc109YzpsW3VdPWMpO2ZvcihzPTA7czxmOysrcykoYz1sW3U9IiQiK28uY2FsbCh0LGFbc10scyxhKV0pPyhyW3NdPWMsYy5fX2RhdGFfXz1hW3NdLGxbdV09bnVsbCk6bltzXT1uZXcgdnQodCxhW3NdKTtmb3Iocz0wO3M8aDsrK3MpKGM9ZVtzXSkmJmxbZFtzXV09PT1jJiYoaVtzXT1jKX1mdW5jdGlvbiBfdCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn12YXIga3Q9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHd0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDprdCx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9LFR0PWZ1bmN0aW9uKHQpe3ZhciBlPXQrPSIiLG49ZS5pbmRleE9mKCI6Iik7cmV0dXJuIG4+PTAmJiJ4bWxucyIhPT0oZT10LnNsaWNlKDAsbikpJiYodD10LnNsaWNlKG4rMSkpLHd0Lmhhc093blByb3BlcnR5KGUpP3tzcGFjZTp3dFtlXSxsb2NhbDp0fTp0fTtmdW5jdGlvbiBFdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX19ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpfX1mdW5jdGlvbiBTdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKHQsZSl9fWZ1bmN0aW9uIEF0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwsZSl9fWZ1bmN0aW9uIE10KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09bj90aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KTp0aGlzLnNldEF0dHJpYnV0ZSh0LG4pfX1mdW5jdGlvbiBPdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlModC5zcGFjZSx0LmxvY2FsLG4pfX12YXIgTnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQub3duZXJEb2N1bWVudCYmdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx0LmRvY3VtZW50JiZ0fHx0LmRlZmF1bHRWaWV3fTtmdW5jdGlvbiBCdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBEdCh0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUsbil9fWZ1bmN0aW9uIEx0KHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LHIsbil9fWZ1bmN0aW9uIEl0KHQsZSl7cmV0dXJuIHQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShlKXx8TnQodCkuZ2V0Q29tcHV0ZWRTdHlsZSh0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoZSl9ZnVuY3Rpb24gUnQodCl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdF19fWZ1bmN0aW9uIEZ0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1t0XT1lfX1mdW5jdGlvbiBQdCh0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PW4/ZGVsZXRlIHRoaXNbdF06dGhpc1t0XT1ufX1mdW5jdGlvbiBqdCh0KXtyZXR1cm4gdC50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gWXQodCl7cmV0dXJuIHQuY2xhc3NMaXN0fHxuZXcgenQodCl9ZnVuY3Rpb24genQodCl7dGhpcy5fbm9kZT10LHRoaXMuX25hbWVzPWp0KHQuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gVXQodCxlKXtmb3IodmFyIG49WXQodCkscj0tMSxpPWUubGVuZ3RoOysrcjxpOyluLmFkZChlW3JdKX1mdW5jdGlvbiAkdCh0LGUpe2Zvcih2YXIgbj1ZdCh0KSxyPS0xLGk9ZS5sZW5ndGg7KytyPGk7KW4ucmVtb3ZlKGVbcl0pfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBmdW5jdGlvbigpe1V0KHRoaXMsdCl9fWZ1bmN0aW9uIFd0KHQpe3JldHVybiBmdW5jdGlvbigpeyR0KHRoaXMsdCl9fWZ1bmN0aW9uIEh0KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7KGUuYXBwbHkodGhpcyxhcmd1bWVudHMpP1V0OiR0KSh0aGlzLHQpfX16dC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbih0KXt0aGlzLl9uYW1lcy5pbmRleE9mKHQpPDAmJih0aGlzLl9uYW1lcy5wdXNoKHQpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lcy5pbmRleE9mKHQpO2U+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UoZSwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZih0KT49MH19O2Z1bmN0aW9uIFZ0KCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiBHdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9fWZ1bmN0aW9uIFh0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX1mdW5jdGlvbiBadCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEt0KHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9fWZ1bmN0aW9uIFF0KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX19ZnVuY3Rpb24gSnQoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gdGUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBlZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnQsbj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gbj09PWt0JiZlLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1rdD9lLmNyZWF0ZUVsZW1lbnQodCk6ZS5jcmVhdGVFbGVtZW50TlMobix0KX19ZnVuY3Rpb24gbmUodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlModC5zcGFjZSx0LmxvY2FsKX19dmFyIHJlPWZ1bmN0aW9uKHQpe3ZhciBlPVR0KHQpO3JldHVybihlLmxvY2FsP25lOmVlKShlKX07ZnVuY3Rpb24gaWUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBhZSgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIG9lKCl7dmFyIHQ9dGhpcy5jbG9uZU5vZGUoITEpLGU9dGhpcy5wYXJlbnROb2RlO3JldHVybiBlP2UuaW5zZXJ0QmVmb3JlKHQsdGhpcy5uZXh0U2libGluZyk6dH1mdW5jdGlvbiBzZSgpe3ZhciB0PXRoaXMuY2xvbmVOb2RlKCEwKSxlPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gZT9lLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpOnR9dmFyIGNlPXt9LHVlPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoY2U9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpO2Z1bmN0aW9uIGxlKHQsZSxuKXtyZXR1cm4gdD1oZSh0LGUsbiksZnVuY3Rpb24oZSl7dmFyIG49ZS5yZWxhdGVkVGFyZ2V0O24mJihuPT09dGhpc3x8OCZuLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpKXx8dC5jYWxsKHRoaXMsZSl9fWZ1bmN0aW9uIGhlKHQsZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9dWU7dWU9cjt0cnl7dC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxlLG4pfWZpbmFsbHl7dWU9aX19fWZ1bmN0aW9uIGZlKHQpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihlPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOmV9fSkpfWZ1bmN0aW9uIGRlKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuX19vbjtpZihlKXtmb3IodmFyIG4scj0wLGk9LTEsYT1lLmxlbmd0aDtyPGE7KytyKW49ZVtyXSx0LnR5cGUmJm4udHlwZSE9PXQudHlwZXx8bi5uYW1lIT09dC5uYW1lP2VbKytpXT1uOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLnR5cGUsbi5saXN0ZW5lcixuLmNhcHR1cmUpOysraT9lLmxlbmd0aD1pOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBwZSh0LGUsbil7dmFyIHI9Y2UuaGFzT3duUHJvcGVydHkodC50eXBlKT9sZTpoZTtyZXR1cm4gZnVuY3Rpb24oaSxhLG8pe3ZhciBzLGM9dGhpcy5fX29uLHU9cihlLGEsbyk7aWYoYylmb3IodmFyIGw9MCxoPWMubGVuZ3RoO2w8aDsrK2wpaWYoKHM9Y1tsXSkudHlwZT09PXQudHlwZSYmcy5uYW1lPT09dC5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXI9dSxzLmNhcHR1cmU9biksdm9pZChzLnZhbHVlPWUpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LnR5cGUsdSxuKSxzPXt0eXBlOnQudHlwZSxuYW1lOnQubmFtZSx2YWx1ZTplLGxpc3RlbmVyOnUsY2FwdHVyZTpufSxjP2MucHVzaChzKTp0aGlzLl9fb249W3NdfX1mdW5jdGlvbiB5ZSh0LGUsbixyKXt2YXIgaT11ZTt0LnNvdXJjZUV2ZW50PXVlLHVlPXQ7dHJ5e3JldHVybiBlLmFwcGx5KG4scil9ZmluYWxseXt1ZT1pfX1mdW5jdGlvbiBnZSh0LGUsbil7dmFyIHI9TnQodCksaT1yLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBpP2k9bmV3IGkoZSxuKTooaT1yLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLG4/KGkuaW5pdEV2ZW50KGUsbi5idWJibGVzLG4uY2FuY2VsYWJsZSksaS5kZXRhaWw9bi5kZXRhaWwpOmkuaW5pdEV2ZW50KGUsITEsITEpKSx0LmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gbWUodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ2UodGhpcyx0LGUpfX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnZSh0aGlzLHQsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX12YXIgYmU9W251bGxdO2Z1bmN0aW9uIHhlKHQsZSl7dGhpcy5fZ3JvdXBzPXQsdGhpcy5fcGFyZW50cz1lfWZ1bmN0aW9uIF9lKCl7cmV0dXJuIG5ldyB4ZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGJlKX14ZS5wcm90b3R5cGU9X2UucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4ZSxzZWxlY3Q6ZnVuY3Rpb24odCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWR0KHQpKTtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49ZS5sZW5ndGgscj1uZXcgQXJyYXkobiksaT0wO2k8bjsrK2kpZm9yKHZhciBhLG8scz1lW2ldLGM9cy5sZW5ndGgsdT1yW2ldPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCkoYT1zW2xdKSYmKG89dC5jYWxsKGEsYS5fX2RhdGFfXyxsLHMpKSYmKCJfX2RhdGFfXyJpbiBhJiYoby5fX2RhdGFfXz1hLl9fZGF0YV9fKSx1W2xdPW8pO3JldHVybiBuZXcgeGUocix0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD15dCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9W10saT1bXSxhPTA7YTxuOysrYSlmb3IodmFyIG8scz1lW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJihyLnB1c2godC5jYWxsKG8sby5fX2RhdGFfXyx1LHMpKSxpLnB1c2gobykpO3JldHVybiBuZXcgeGUocixpKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgeGUocix0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksbD0tMSx0aGlzLmVhY2goKGZ1bmN0aW9uKHQpe3BbKytsXT10fSkpLHA7dmFyIG4scj1lP3h0OmJ0LGk9dGhpcy5fcGFyZW50cyxhPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKG49dCx0PWZ1bmN0aW9uKCl7cmV0dXJuIG59KTtmb3IodmFyIG89YS5sZW5ndGgscz1uZXcgQXJyYXkobyksYz1uZXcgQXJyYXkobyksdT1uZXcgQXJyYXkobyksbD0wO2w8bzsrK2wpe3ZhciBoPWlbbF0sZj1hW2xdLGQ9Zi5sZW5ndGgscD10LmNhbGwoaCxoJiZoLl9fZGF0YV9fLGwsaSkseT1wLmxlbmd0aCxnPWNbbF09bmV3IEFycmF5KHkpLG09c1tsXT1uZXcgQXJyYXkoeSk7cihoLGYsZyxtLHVbbF09bmV3IEFycmF5KGQpLHAsZSk7Zm9yKHZhciB2LGIseD0wLF89MDt4PHk7Kyt4KWlmKHY9Z1t4XSl7Zm9yKHg+PV8mJihfPXgrMSk7IShiPW1bX10pJiYrK188eTspO3YuX25leHQ9Ynx8bnVsbH19cmV0dXJuKHM9bmV3IHhlKHMsaSkpLl9lbnRlcj1jLHMuX2V4aXQ9dSxzfSxlbnRlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgeGUodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobXQpLHRoaXMuX3BhcmVudHMpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4ZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKG10KSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5lbnRlcigpLGk9dGhpcyxhPXRoaXMuZXhpdCgpO3JldHVybiByPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Qocik6ci5hcHBlbmQodCsiIiksbnVsbCE9ZSYmKGk9ZShpKSksbnVsbD09bj9hLnJlbW92ZSgpOm4oYSksciYmaT9yLm1lcmdlKGkpLm9yZGVyKCk6aX0sbWVyZ2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPXQuX2dyb3VwcyxyPWUubGVuZ3RoLGk9bi5sZW5ndGgsYT1NYXRoLm1pbihyLGkpLG89bmV3IEFycmF5KHIpLHM9MDtzPGE7KytzKWZvcih2YXIgYyx1PWVbc10sbD1uW3NdLGg9dS5sZW5ndGgsZj1vW3NdPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZCkoYz11W2RdfHxsW2RdKSYmKGZbZF09Yyk7Zm9yKDtzPHI7KytzKW9bc109ZVtzXTtyZXR1cm4gbmV3IHhlKG8sdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPS0xLG49dC5sZW5ndGg7KytlPG47KWZvcih2YXIgcixpPXRbZV0sYT1pLmxlbmd0aC0xLG89aVthXTstLWE+PTA7KShyPWlbYV0pJiYobyYmNF5yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHIsbyksbz1yKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIGUmJm4/dChlLl9fZGF0YV9fLG4uX19kYXRhX18pOiFlLSFufXR8fCh0PV90KTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHI9bi5sZW5ndGgsaT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2Epe2Zvcih2YXIgbyxzPW5bYV0sYz1zLmxlbmd0aCx1PWlbYV09bmV3IEFycmF5KGMpLGw9MDtsPGM7KytsKShvPXNbbF0pJiYodVtsXT1vKTt1LnNvcnQoZSl9cmV0dXJuIG5ldyB4ZShpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9LGNhbGw6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLHQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxlPS0xO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dFsrK2VdPXRoaXN9KSksdH0sbm9kZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLG49dC5sZW5ndGg7ZTxuOysrZSlmb3IodmFyIHI9dFtlXSxpPTAsYT1yLmxlbmd0aDtpPGE7KytpKXt2YXIgbz1yW2ldO2lmKG8pcmV0dXJuIG99cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsbj0wLHI9ZS5sZW5ndGg7bjxyOysrbilmb3IodmFyIGksYT1lW25dLG89MCxzPWEubGVuZ3RoO288czsrK28pKGk9YVtvXSkmJnQuY2FsbChpLGkuX19kYXRhX18sbyxhKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbih0LGUpe3ZhciBuPVR0KHQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9dGhpcy5ub2RlKCk7cmV0dXJuIG4ubG9jYWw/ci5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpOnIuZ2V0QXR0cmlidXRlKG4pfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/bi5sb2NhbD9DdDpFdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9uLmxvY2FsP090Ok10Om4ubG9jYWw/QXQ6U3QpKG4sZSkpfSxzdHlsZTpmdW5jdGlvbih0LGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWU/QnQ6ImZ1bmN0aW9uIj09dHlwZW9mIGU/THQ6RHQpKHQsZSxudWxsPT1uPyIiOm4pKTpJdCh0aGlzLm5vZGUoKSx0KX0scHJvcGVydHk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09ZT9SdDoiZnVuY3Rpb24iPT10eXBlb2YgZT9QdDpGdCkodCxlKSk6dGhpcy5ub2RlKClbdF19LGNsYXNzZWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1qdCh0KyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgcj1ZdCh0aGlzLm5vZGUoKSksaT0tMSxhPW4ubGVuZ3RoOysraTxhOylpZighci5jb250YWlucyhuW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgZT9IdDplP3F0Old0KShuLGUpKX0sdGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9WdDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/WHQ6R3QpKHQpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09dD9adDooImZ1bmN0aW9uIj09dHlwZW9mIHQ/UXQ6S3QpKHQpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChKdCl9LGxvd2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh0ZSl9LGFwcGVuZDpmdW5jdGlvbih0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJlKHQpO3JldHVybiB0aGlzLnNlbGVjdCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cmUodCkscj1udWxsPT1lP2llOiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZHQoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goYWUpfSxjbG9uZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zZWxlY3QodD9zZTpvZSl9LGRhdHVtOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIix0KTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYT1mZSh0KyIiKSxvPWEubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKHM9ZT9wZTpkZSxudWxsPT1uJiYobj0hMSkscj0wO3I8bzsrK3IpdGhpcy5lYWNoKHMoYVtyXSxlLG4pKTtyZXR1cm4gdGhpc312YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpZm9yKHZhciBjLHU9MCxsPXMubGVuZ3RoO3U8bDsrK3UpZm9yKHI9MCxjPXNbdV07cjxvOysrcilpZigoaT1hW3JdKS50eXBlPT09Yy50eXBlJiZpLm5hbWU9PT1jLm5hbWUpcmV0dXJuIGMudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGU/dmU6bWUpKHQsZSkpfX07dmFyIGtlPV9lLHdlPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeGUoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHQpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyB4ZShbW3RdXSxiZSl9O2Z1bmN0aW9uIFRlKCl7dWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIEVlPWZ1bmN0aW9uKCl7dWUucHJldmVudERlZmF1bHQoKSx1ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0sQ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj13ZSh0KS5vbigiZHJhZ3N0YXJ0LmRyYWciLEVlLCEwKTsib25zZWxlY3RzdGFydCJpbiBlP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLEVlLCEwKTooZS5fX25vc2VsZWN0PWUuc3R5bGUuTW96VXNlclNlbGVjdCxlLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX07ZnVuY3Rpb24gU2UodCxlKXt2YXIgbj10LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXdlKHQpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7ZSYmKHIub24oImNsaWNrLmRyYWciLEVlLCEwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Iub24oImNsaWNrLmRyYWciLG51bGwpfSksMCkpLCJvbnNlbGVjdHN0YXJ0ImluIG4/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KG4uc3R5bGUuTW96VXNlclNlbGVjdD1uLl9fbm9zZWxlY3QsZGVsZXRlIG4uX19ub3NlbGVjdCl9dmFyIEFlPWZ1bmN0aW9uKHQsZSxuKXt0LnByb3RvdHlwZT1lLnByb3RvdHlwZT1uLG4uY29uc3RydWN0b3I9dH07ZnVuY3Rpb24gTWUodCxlKXt2YXIgbj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIHIgaW4gZSluW3JdPWVbcl07cmV0dXJuIG59ZnVuY3Rpb24gT2UoKXt9dmFyIE5lPSJcXHMqKFsrLV0/XFxkKylcXHMqIixCZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixEZT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsTGU9L14jKFswLTlhLWZdezMsOH0pJC8sSWU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW05lLE5lLE5lXSsiXFwpJCIpLFJlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tEZSxEZSxEZV0rIlxcKSQiKSxGZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW05lLE5lLE5lLEJlXSsiXFwpJCIpLFBlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbRGUsRGUsRGUsQmVdKyJcXCkkIiksamU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW0JlLERlLERlXSsiXFwpJCIpLFllPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbQmUsRGUsRGUsQmVdKyJcXCkkIiksemU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gVWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiAkZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIHFlKHQpe3ZhciBlLG47cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPUxlLmV4ZWModCkpPyhuPWVbMV0ubGVuZ3RoLGU9cGFyc2VJbnQoZVsxXSwxNiksNj09PW4/V2UoZSk6Mz09PW4/bmV3IFhlKGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09bj9IZShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LCgyNTUmZSkvMjU1KTo0PT09bj9IZShlPj4xMiYxNXxlPj44JjI0MCxlPj44JjE1fGU+PjQmMjQwLGU+PjQmMTV8MjQwJmUsKCgxNSZlKTw8NHwxNSZlKS8yNTUpOm51bGwpOihlPUllLmV4ZWModCkpP25ldyBYZShlWzFdLGVbMl0sZVszXSwxKTooZT1SZS5leGVjKHQpKT9uZXcgWGUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9RmUuZXhlYyh0KSk/SGUoZVsxXSxlWzJdLGVbM10sZVs0XSk6KGU9UGUuZXhlYyh0KSk/SGUoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsZVs0XSk6KGU9amUuZXhlYyh0KSk/SmUoZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1ZZS5leGVjKHQpKT9KZShlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF0pOnplLmhhc093blByb3BlcnR5KHQpP1dlKHplW3RdKToidHJhbnNwYXJlbnQiPT09dD9uZXcgWGUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBXZSh0KXtyZXR1cm4gbmV3IFhlKHQ+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdCwxKX1mdW5jdGlvbiBIZSh0LGUsbixyKXtyZXR1cm4gcjw9MCYmKHQ9ZT1uPU5hTiksbmV3IFhlKHQsZSxuLHIpfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgT2V8fCh0PXFlKHQpKSx0P25ldyBYZSgodD10LnJnYigpKS5yLHQuZyx0LmIsdC5vcGFjaXR5KTpuZXcgWGV9ZnVuY3Rpb24gR2UodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1ZlKHQpOm5ldyBYZSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gWGUodCxlLG4scil7dGhpcy5yPSt0LHRoaXMuZz0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIFplKCl7cmV0dXJuIiMiK1FlKHRoaXMucikrUWUodGhpcy5nKStRZSh0aGlzLmIpfWZ1bmN0aW9uIEtlKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gUWUodCl7cmV0dXJuKCh0PU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodCl8fDApKSk8MTY/IjAiOiIiKSt0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBKZSh0LGUsbixyKXtyZXR1cm4gcjw9MD90PWU9bj1OYU46bjw9MHx8bj49MT90PWU9TmFOOmU8PTAmJih0PU5hTiksbmV3IG5uKHQsZSxuLHIpfWZ1bmN0aW9uIHRuKHQpe2lmKHQgaW5zdGFuY2VvZiBubilyZXR1cm4gbmV3IG5uKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIE9lfHwodD1xZSh0KSksIXQpcmV0dXJuIG5ldyBubjtpZih0IGluc3RhbmNlb2Ygbm4pcmV0dXJuIHQ7dmFyIGU9KHQ9dC5yZ2IoKSkuci8yNTUsbj10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWluKGUsbixyKSxhPU1hdGgubWF4KGUsbixyKSxvPU5hTixzPWEtaSxjPShhK2kpLzI7cmV0dXJuIHM/KG89ZT09PWE/KG4tcikvcys2KihuPHIpOm49PT1hPyhyLWUpL3MrMjooZS1uKS9zKzQscy89YzwuNT9hK2k6Mi1hLWksbyo9NjApOnM9Yz4wJiZjPDE/MDpvLG5ldyBubihvLHMsYyx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGVuKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90bih0KTpuZXcgbm4odCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIG5uKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBybih0LGUsbil7cmV0dXJuIDI1NSoodDw2MD9lKyhuLWUpKnQvNjA6dDwxODA/bjp0PDI0MD9lKyhuLWUpKigyNDAtdCkvNjA6ZSl9ZnVuY3Rpb24gYW4odCxlLG4scixpKXt2YXIgYT10KnQsbz1hKnQ7cmV0dXJuKCgxLTMqdCszKmEtbykqZSsoNC02KmErMypvKSpuKygxKzMqdCszKmEtMypvKSpyK28qaSkvNn1BZShPZSxxZSx7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpVZSxmb3JtYXRIZXg6VWUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIHRuKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6JGUsdG9TdHJpbmc6JGV9KSxBZShYZSxHZSxNZShPZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IFhlKHRoaXMucip0LHRoaXMuZyp0LHRoaXMuYip0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBYZSh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlplLGZvcm1hdEhleDpaZSxmb3JtYXRSZ2I6S2UsdG9TdHJpbmc6S2V9KSksQWUobm4sZW4sTWUoT2Use2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBubih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10Py43Ok1hdGgucG93KC43LHQpLG5ldyBubih0aGlzLmgsdGhpcy5zLHRoaXMubCp0LHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCksZT1pc05hTih0KXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxuPXRoaXMubCxyPW4rKG48LjU/bjoxLW4pKmUsaT0yKm4tcjtyZXR1cm4gbmV3IFhlKHJuKHQ+PTI0MD90LTI0MDp0KzEyMCxpLHIpLHJuKHQsaSxyKSxybih0PDEyMD90KzI0MDp0LTEyMCxpLHIpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBvbj1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihuKXt2YXIgcj1uPD0wP249MDpuPj0xPyhuPTEsZS0xKTpNYXRoLmZsb29yKG4qZSksaT10W3JdLGE9dFtyKzFdLG89cj4wP3Rbci0xXToyKmktYSxzPXI8ZS0xP3RbcisyXToyKmEtaTtyZXR1cm4gYW4oKG4tci9lKSplLG8saSxhLHMpfX0sc249ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPU1hdGguZmxvb3IoKChuJT0xKTwwPysrbjpuKSplKSxpPXRbKHIrZS0xKSVlXSxhPXRbciVlXSxvPXRbKHIrMSklZV0scz10WyhyKzIpJWVdO3JldHVybiBhbigobi1yL2UpKmUsaSxhLG8scyl9fSxjbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIHVuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0K24qZX19ZnVuY3Rpb24gbG4odCxlKXt2YXIgbj1lLXQ7cmV0dXJuIG4/dW4odCxuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pOmNuKGlzTmFOKHQpP2U6dCl9ZnVuY3Rpb24gaG4odCl7cmV0dXJuIDE9PSh0PSt0KT9mbjpmdW5jdGlvbihlLG4pe3JldHVybiBuLWU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PU1hdGgucG93KHQsbiksZT1NYXRoLnBvdyhlLG4pLXQsbj0xL24sZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQrciplLG4pfX0oZSxuLHQpOmNuKGlzTmFOKGUpP246ZSl9fWZ1bmN0aW9uIGZuKHQsZSl7dmFyIG49ZS10O3JldHVybiBuP3VuKHQsbik6Y24oaXNOYU4odCk/ZTp0KX12YXIgZG49ZnVuY3Rpb24gdChlKXt2YXIgbj1obihlKTtmdW5jdGlvbiByKHQsZSl7dmFyIHI9bigodD1HZSh0KSkuciwoZT1HZShlKSkuciksaT1uKHQuZyxlLmcpLGE9bih0LmIsZS5iKSxvPWZuKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdC5yPXIoZSksdC5nPWkoZSksdC5iPWEoZSksdC5vcGFjaXR5PW8oZSksdCsiIn19cmV0dXJuIHIuZ2FtbWE9dCxyfSgxKTtmdW5jdGlvbiBwbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG4scixpPWUubGVuZ3RoLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KGkpO2ZvcihuPTA7bjxpOysrbilyPUdlKGVbbl0pLGFbbl09ci5yfHwwLG9bbl09ci5nfHwwLHNbbl09ci5ifHwwO3JldHVybiBhPXQoYSksbz10KG8pLHM9dChzKSxyLm9wYWNpdHk9MSxmdW5jdGlvbih0KXtyZXR1cm4gci5yPWEodCksci5nPW8odCksci5iPXModCkscisiIn19fXZhciB5bj1wbihvbiksZ249cG4oc24pLG1uPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9W10pO3ZhciBuLHI9dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG49MDtuPHI7KytuKWlbbl09dFtuXSooMS1hKStlW25dKmE7cmV0dXJuIGl9fTtmdW5jdGlvbiB2bih0KXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KHQpJiYhKHQgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIGJuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHZuKGUpP21uOnhuKSh0LGUpfTtmdW5jdGlvbiB4bih0LGUpe3ZhciBuLHI9ZT9lLmxlbmd0aDowLGk9dD9NYXRoLm1pbihyLHQubGVuZ3RoKTowLGE9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KHIpO2ZvcihuPTA7bjxpOysrbilhW25dPU1uKHRbbl0sZVtuXSk7Zm9yKDtuPHI7KytuKW9bbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG49MDtuPGk7KytuKW9bbl09YVtuXSh0KTtyZXR1cm4gb319dmFyIF9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49bmV3IERhdGU7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gbi5zZXRUaW1lKHQqKDEtcikrZSpyKSxufX0sa249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD0rdCxlPStlLGZ1bmN0aW9uKG4pe3JldHVybiB0KigxLW4pK2Uqbn19LHduPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj17fSxpPXt9O2ZvcihuIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSluIGluIHQ/cltuXT1Nbih0W25dLGVbbl0pOmlbbl09ZVtuXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKG4gaW4gcilpW25dPXJbbl0odCk7cmV0dXJuIGl9fSxUbj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csRW49bmV3IFJlZ0V4cChUbi5zb3VyY2UsImciKTt2YXIgQ24sU24sQW49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYT1Ubi5sYXN0SW5kZXg9RW4ubGFzdEluZGV4PTAsbz0tMSxzPVtdLGM9W107Zm9yKHQrPSIiLGUrPSIiOyhuPVRuLmV4ZWModCkpJiYocj1Fbi5leGVjKGUpKTspKGk9ci5pbmRleCk+YSYmKGk9ZS5zbGljZShhLGkpLHNbb10/c1tvXSs9aTpzWysrb109aSksKG49blswXSk9PT0ocj1yWzBdKT9zW29dP3Nbb10rPXI6c1srK29dPXI6KHNbKytvXT1udWxsLGMucHVzaCh7aTpvLHg6a24obixyKX0pKSxhPUVuLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/Y1swXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShjWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9Yy5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciBuLHI9MDtyPGU7KytyKXNbKG49Y1tyXSkuaV09bi54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9LE1uPWZ1bmN0aW9uKHQsZSl7dmFyIG4scj10eXBlb2YgZTtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT09cj9jbihlKTooIm51bWJlciI9PT1yP2tuOiJzdHJpbmciPT09cj8obj1xZShlKSk/KGU9bixkbik6QW46ZSBpbnN0YW5jZW9mIHFlP2RuOmUgaW5zdGFuY2VvZiBEYXRlP19uOnZuKGUpP21uOkFycmF5LmlzQXJyYXkoZSk/eG46ImZ1bmN0aW9uIiE9dHlwZW9mIGUudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGUudG9TdHJpbmd8fGlzTmFOKGUpP3duOmtuKSh0LGUpfSxPbj1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXVlO3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfSxObj1mdW5jdGlvbih0LGUpe3ZhciBuPXQub3duZXJTVkdFbGVtZW50fHx0O2lmKG4uY3JlYXRlU1ZHUG9pbnQpe3ZhciByPW4uY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gci54PWUuY2xpZW50WCxyLnk9ZS5jbGllbnRZLFsocj1yLm1hdHJpeFRyYW5zZm9ybSh0LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSkpLngsci55XX12YXIgaT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltlLmNsaWVudFgtaS5sZWZ0LXQuY2xpZW50TGVmdCxlLmNsaWVudFktaS50b3AtdC5jbGllbnRUb3BdfSxCbj1mdW5jdGlvbih0LGUsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1lLGU9T24oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciByLGk9MCxhPWU/ZS5sZW5ndGg6MDtpPGE7KytpKWlmKChyPWVbaV0pLmlkZW50aWZpZXI9PT1uKXJldHVybiBObih0LHIpO3JldHVybiBudWxsfSxEbj1mdW5jdGlvbih0KXt2YXIgZT1PbigpO3JldHVybiBlLmNoYW5nZWRUb3VjaGVzJiYoZT1lLmNoYW5nZWRUb3VjaGVzWzBdKSxObih0LGUpfSxMbj0wLEluPTAsUm49MCxGbj0wLFBuPTAsam49MCxZbj0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSx6bj0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQsMTcpfTtmdW5jdGlvbiBVbigpe3JldHVybiBQbnx8KHpuKCRuKSxQbj1Zbi5ub3coKStqbil9ZnVuY3Rpb24gJG4oKXtQbj0wfWZ1bmN0aW9uIHFuKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBXbih0LGUsbil7dmFyIHI9bmV3IHFuO3JldHVybiByLnJlc3RhcnQodCxlLG4pLHJ9ZnVuY3Rpb24gSG4oKXtVbigpLCsrTG47Zm9yKHZhciB0LGU9Q247ZTspKHQ9UG4tZS5fdGltZSk+PTAmJmUuX2NhbGwuY2FsbChudWxsLHQpLGU9ZS5fbmV4dDstLUxufWZ1bmN0aW9uIFZuKCl7UG49KEZuPVluLm5vdygpKStqbixMbj1Jbj0wO3RyeXtIbigpfWZpbmFsbHl7TG49MCxmdW5jdGlvbigpe3ZhciB0LGUsbj1DbixyPTEvMDtmb3IoO247KW4uX2NhbGw/KHI+bi5fdGltZSYmKHI9bi5fdGltZSksdD1uLG49bi5fbmV4dCk6KGU9bi5fbmV4dCxuLl9uZXh0PW51bGwsbj10P3QuX25leHQ9ZTpDbj1lKTtTbj10LFhuKHIpfSgpLFBuPTB9fWZ1bmN0aW9uIEduKCl7dmFyIHQ9WW4ubm93KCksZT10LUZuO2U+MWUzJiYoam4tPWUsRm49dCl9ZnVuY3Rpb24gWG4odCl7TG58fChJbiYmKEluPWNsZWFyVGltZW91dChJbikpLHQtUG4+MjQ/KHQ8MS8wJiYoSW49c2V0VGltZW91dChWbix0LVluLm5vdygpLWpuKSksUm4mJihSbj1jbGVhckludGVydmFsKFJuKSkpOihSbnx8KEZuPVluLm5vdygpLFJuPXNldEludGVydmFsKEduLDFlMykpLExuPTEsem4oVm4pKSl9cW4ucHJvdG90eXBlPVduLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cW4scmVzdGFydDpmdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtuPShudWxsPT1uP1VuKCk6K24pKyhudWxsPT1lPzA6K2UpLHRoaXMuX25leHR8fFNuPT09dGhpc3x8KFNuP1NuLl9uZXh0PXRoaXM6Q249dGhpcyxTbj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1uLFhuKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLFhuKCkpfX07dmFyIFpuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uZXcgcW47cmV0dXJuIGU9bnVsbD09ZT8wOitlLHIucmVzdGFydCgoZnVuY3Rpb24obil7ci5zdG9wKCksdChuK2UpfSksZSxuKSxyfSxLbj1odCgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxRbj1bXSxKbj1mdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG89dC5fX3RyYW5zaXRpb247aWYobyl7aWYobiBpbiBvKXJldHVybn1lbHNlIHQuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbih0LGUsbil7dmFyIHIsaT10Ll9fdHJhbnNpdGlvbjtmdW5jdGlvbiBhKGMpe3ZhciB1LGwsaCxmO2lmKDEhPT1uLnN0YXRlKXJldHVybiBzKCk7Zm9yKHUgaW4gaSlpZigoZj1pW3VdKS5uYW1lPT09bi5uYW1lKXtpZigzPT09Zi5zdGF0ZSlyZXR1cm4gWm4oYSk7ND09PWYuc3RhdGU/KGYuc3RhdGU9NixmLnRpbWVyLnN0b3AoKSxmLm9uLmNhbGwoImludGVycnVwdCIsdCx0Ll9fZGF0YV9fLGYuaW5kZXgsZi5ncm91cCksZGVsZXRlIGlbdV0pOit1PGUmJihmLnN0YXRlPTYsZi50aW1lci5zdG9wKCksZi5vbi5jYWxsKCJjYW5jZWwiLHQsdC5fX2RhdGFfXyxmLmluZGV4LGYuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihabigoZnVuY3Rpb24oKXszPT09bi5zdGF0ZSYmKG4uc3RhdGU9NCxuLnRpbWVyLnJlc3RhcnQobyxuLmRlbGF5LG4udGltZSksbyhjKSl9KSksbi5zdGF0ZT0yLG4ub24uY2FsbCgic3RhcnQiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLDI9PT1uLnN0YXRlKXtmb3Iobi5zdGF0ZT0zLHI9bmV3IEFycmF5KGg9bi50d2Vlbi5sZW5ndGgpLHU9MCxsPS0xO3U8aDsrK3UpKGY9bi50d2Vlblt1XS52YWx1ZS5jYWxsKHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApKSYmKHJbKytsXT1mKTtyLmxlbmd0aD1sKzF9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciBpPWU8bi5kdXJhdGlvbj9uLmVhc2UuY2FsbChudWxsLGUvbi5kdXJhdGlvbik6KG4udGltZXIucmVzdGFydChzKSxuLnN0YXRlPTUsMSksYT0tMSxvPXIubGVuZ3RoOysrYTxvOylyW2FdLmNhbGwodCxpKTs1PT09bi5zdGF0ZSYmKG4ub24uY2FsbCgiZW5kIix0LHQuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxzKCkpfWZ1bmN0aW9uIHMoKXtmb3IodmFyIHIgaW4gbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLGRlbGV0ZSBpW2VdLGkpcmV0dXJuO2RlbGV0ZSB0Ll9fdHJhbnNpdGlvbn1pW2VdPW4sbi50aW1lcj1XbigoZnVuY3Rpb24odCl7bi5zdGF0ZT0xLG4udGltZXIucmVzdGFydChhLG4uZGVsYXksbi50aW1lKSxuLmRlbGF5PD10JiZhKHQtbi5kZWxheSl9KSwwLG4udGltZSl9KHQsbix7bmFtZTplLGluZGV4OnIsZ3JvdXA6aSxvbjpLbix0d2VlbjpRbix0aW1lOmEudGltZSxkZWxheTphLmRlbGF5LGR1cmF0aW9uOmEuZHVyYXRpb24sZWFzZTphLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTowfSl9O2Z1bmN0aW9uIHRyKHQsZSl7dmFyIG49bnIodCxlKTtpZihuLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBlcih0LGUpe3ZhciBuPW5yKHQsZSk7aWYobi5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBufWZ1bmN0aW9uIG5yKHQsZSl7dmFyIG49dC5fX3RyYW5zaXRpb247aWYoIW58fCEobj1uW2VdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIG59dmFyIHJyLGlyLGFyLG9yLHNyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLGE9dC5fX3RyYW5zaXRpb24sbz0hMDtpZihhKXtmb3IoaSBpbiBlPW51bGw9PWU/bnVsbDplKyIiLGEpKG49YVtpXSkubmFtZT09PWU/KHI9bi5zdGF0ZT4yJiZuLnN0YXRlPDUsbi5zdGF0ZT02LG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChyPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLHQsdC5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSBhW2ldKTpvPSExO28mJmRlbGV0ZSB0Ll9fdHJhbnNpdGlvbn19LGNyPTE4MC9NYXRoLlBJLHVyPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9LGxyPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzLGM7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGM9dCpuK2UqcikmJihuLT10KmMsci09ZSpjKSwocz1NYXRoLnNxcnQobipuK3IqcikpJiYobi89cyxyLz1zLGMvPXMpLHQqcjxlKm4mJih0PS10LGU9LWUsYz0tYyxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKmNyLHNrZXdYOk1hdGguYXRhbihjKSpjcixzY2FsZVg6byxzY2FsZVk6c319O2Z1bmN0aW9uIGhyKHQsZSxuLHIpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihhLG8pe3ZhciBzPVtdLGM9W107cmV0dXJuIGE9dChhKSxvPXQobyksZnVuY3Rpb24odCxyLGksYSxvLHMpe2lmKHQhPT1pfHxyIT09YSl7dmFyIGM9by5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGUsbnVsbCxuKTtzLnB1c2goe2k6Yy00LHg6a24odCxpKX0se2k6Yy0yLHg6a24ocixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Erbil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGMpLGZ1bmN0aW9uKHQsZSxuLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6bi5wdXNoKGkobikrInJvdGF0ZSgiLG51bGwsciktMix4OmtuKHQsZSl9KSk6ZSYmbi5wdXNoKGkobikrInJvdGF0ZSgiK2Urcil9KGEucm90YXRlLG8ucm90YXRlLHMsYyksZnVuY3Rpb24odCxlLG4sYSl7dCE9PWU/YS5wdXNoKHtpOm4ucHVzaChpKG4pKyJza2V3WCgiLG51bGwsciktMix4OmtuKHQsZSl9KTplJiZuLnB1c2goaShuKSsic2tld1goIitlK3IpfShhLnNrZXdYLG8uc2tld1gscyxjKSxmdW5jdGlvbih0LGUsbixyLGEsbyl7aWYodCE9PW58fGUhPT1yKXt2YXIgcz1hLnB1c2goaShhKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7by5wdXNoKHtpOnMtNCx4OmtuKHQsbil9LHtpOnMtMix4OmtuKGUscil9KX1lbHNlIDE9PT1uJiYxPT09cnx8YS5wdXNoKGkoYSkrInNjYWxlKCIrbisiLCIrcisiKSIpfShhLnNjYWxlWCxhLnNjYWxlWSxvLnNjYWxlWCxvLnNjYWxlWSxzLGMpLGE9bz1udWxsLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPS0xLHI9Yy5sZW5ndGg7KytuPHI7KXNbKGU9Y1tuXSkuaV09ZS54KHQpO3JldHVybiBzLmpvaW4oIiIpfX19dmFyIGZyPWhyKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P3VyOihycnx8KHJyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGlyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhcj1kb2N1bWVudC5kZWZhdWx0VmlldykscnIuc3R5bGUudHJhbnNmb3JtPXQsdD1hci5nZXRDb21wdXRlZFN0eWxlKGlyLmFwcGVuZENoaWxkKHJyKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxpci5yZW1vdmVDaGlsZChyciksdD10LnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksbHIoK3RbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLGRyPWhyKChmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD91cjoob3J8fChvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxvci5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9b3IudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KHQ9dC5tYXRyaXgsbHIodC5hLHQuYix0LmMsdC5kLHQuZSx0LmYpKTp1cil9KSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIHByKHQsZSl7dmFyIG4scjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1lcih0aGlzLHQpLGE9aS50d2VlbjtpZihhIT09bilmb3IodmFyIG89MCxzPShyPW49YSkubGVuZ3RoO288czsrK28paWYocltvXS5uYW1lPT09ZSl7KHI9ci5zbGljZSgpKS5zcGxpY2UobywxKTticmVha31pLnR3ZWVuPXJ9fWZ1bmN0aW9uIHlyKHQsZSxuKXt2YXIgcixpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1lcih0aGlzLHQpLG89YS50d2VlbjtpZihvIT09cil7aT0ocj1vKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTplLHZhbHVlOm59LGM9MCx1PWkubGVuZ3RoO2M8dTsrK2MpaWYoaVtjXS5uYW1lPT09ZSl7aVtjXT1zO2JyZWFrfWM9PT11JiZpLnB1c2gocyl9YS50d2Vlbj1pfX1mdW5jdGlvbiBncih0LGUsbil7dmFyIHI9dC5faWQ7cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1lcih0aGlzLHIpOyh0LnZhbHVlfHwodC52YWx1ZT17fSkpW2VdPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSkpLGZ1bmN0aW9uKHQpe3JldHVybiBucih0LHIpLnZhbHVlW2VdfX12YXIgbXI9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiBlP2tuOmUgaW5zdGFuY2VvZiBxZT9kbjoobj1xZShlKSk/KGU9bixkbik6QW4pKHQsZSl9O2Z1bmN0aW9uIHZyKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiBicih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIHhyKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZSh0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fWZ1bmN0aW9uIF9yKHQsZSxuKXt2YXIgcixpLGE9bisiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCk7cmV0dXJuIG89PT1hP251bGw6bz09PXI/aTppPWUocj1vLG4pfX1mdW5jdGlvbiBrcih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGUodCkpPT09KHM9YysiIik/bnVsbDpvPT09ciYmcz09PWk/YTooaT1zLGE9ZShyPW8sYykpO3RoaXMucmVtb3ZlQXR0cmlidXRlKHQpfX1mdW5jdGlvbiB3cih0LGUsbil7dmFyIHIsaSxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBvLHMsYz1uKHRoaXMpO2lmKG51bGwhPWMpcmV0dXJuKG89dGhpcy5nZXRBdHRyaWJ1dGVOUyh0LnNwYWNlLHQubG9jYWwpKT09PShzPWMrIiIpP251bGw6bz09PXImJnM9PT1pP2E6KGk9cyxhPWUocj1vLGMpKTt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCl9fWZ1bmN0aW9uIFRyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHQsZS5jYWxsKHRoaXMsbikpfX1mdW5jdGlvbiBFcih0LGUpe3JldHVybiBmdW5jdGlvbihuKXt0aGlzLnNldEF0dHJpYnV0ZU5TKHQuc3BhY2UsdC5sb2NhbCxlLmNhbGwodGhpcyxuKSl9fWZ1bmN0aW9uIENyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmRXIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIFNyKHQsZSl7dmFyIG4scjtmdW5jdGlvbiBpKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYobj0ocj1pKSYmVHIodCxpKSksbn1yZXR1cm4gaS5fdmFsdWU9ZSxpfWZ1bmN0aW9uIEFyKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dHIodGhpcyx0KS5kZWxheT0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE1yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXt0cih0aGlzLHQpLmRlbGF5PWV9fWZ1bmN0aW9uIE9yKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZXIodGhpcyx0KS5kdXJhdGlvbj0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIE5yKHQsZSl7cmV0dXJuIGU9K2UsZnVuY3Rpb24oKXtlcih0aGlzLHQpLmR1cmF0aW9uPWV9fWZ1bmN0aW9uIEJyKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe2VyKHRoaXMsdCkuZWFzZT1lfX1mdW5jdGlvbiBEcih0LGUsbil7dmFyIHIsaSxhPWZ1bmN0aW9uKHQpe3JldHVybih0KyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLiIpO3JldHVybiBlPj0wJiYodD10LnNsaWNlKDAsZSkpLCF0fHwic3RhcnQiPT09dH0pKX0oZSk/dHI6ZXI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YSh0aGlzLHQpLHM9by5vbjtzIT09ciYmKGk9KHI9cykuY29weSgpKS5vbihlLG4pLG8ub249aX19dmFyIExyPWtlLnByb3RvdHlwZS5jb25zdHJ1Y3RvcjtmdW5jdGlvbiBJcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KHQpfX1mdW5jdGlvbiBScih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkodCxlLmNhbGwodGhpcyxyKSxuKX19ZnVuY3Rpb24gRnIodCxlLG4pe3ZhciByLGk7ZnVuY3Rpb24gYSgpe3ZhciBhPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKHI9KGk9YSkmJlJyKHQsYSxuKSkscn1yZXR1cm4gYS5fdmFsdWU9ZSxhfWZ1bmN0aW9uIFByKHQpe3JldHVybiBmdW5jdGlvbihlKXt0aGlzLnRleHRDb250ZW50PXQuY2FsbCh0aGlzLGUpfX1mdW5jdGlvbiBqcih0KXt2YXIgZSxuO2Z1bmN0aW9uIHIoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gciE9PW4mJihlPShuPXIpJiZQcihyKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfXZhciBZcj0wO2Z1bmN0aW9uIHpyKHQsZSxuLHIpe3RoaXMuX2dyb3Vwcz10LHRoaXMuX3BhcmVudHM9ZSx0aGlzLl9uYW1lPW4sdGhpcy5faWQ9cn1mdW5jdGlvbiBVcih0KXtyZXR1cm4ga2UoKS50cmFuc2l0aW9uKHQpfWZ1bmN0aW9uICRyKCl7cmV0dXJuKytZcn12YXIgcXI9a2UucHJvdG90eXBlO2Z1bmN0aW9uIFdyKHQpe3JldHVybiB0KnQqdH1mdW5jdGlvbiBIcih0KXtyZXR1cm4tLXQqdCp0KzF9ZnVuY3Rpb24gVnIodCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQqdDoodC09MikqdCp0KzIpLzJ9enIucHJvdG90eXBlPVVyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6enIsc2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX25hbWUsbj10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9ZHQodCkpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPW5ldyBBcnJheShpKSxvPTA7bzxpOysrbylmb3IodmFyIHMsYyx1PXJbb10sbD11Lmxlbmd0aCxoPWFbb109bmV3IEFycmF5KGwpLGY9MDtmPGw7KytmKShzPXVbZl0pJiYoYz10LmNhbGwocyxzLl9fZGF0YV9fLGYsdSkpJiYoIl9fZGF0YV9fImluIHMmJihjLl9fZGF0YV9fPXMuX19kYXRhX18pLGhbZl09YyxKbihoW2ZdLGUsbixmLGgsbnIocyxuKSkpO3JldHVybiBuZXcgenIoYSx0aGlzLl9wYXJlbnRzLGUsbil9LHNlbGVjdEFsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9uYW1lLG49dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXl0KHQpKTtmb3IodmFyIHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT1bXSxvPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgYyx1PXJbc10sbD11Lmxlbmd0aCxoPTA7aDxsOysraClpZihjPXVbaF0pe2Zvcih2YXIgZixkPXQuY2FsbChjLGMuX19kYXRhX18saCx1KSxwPW5yKGMsbikseT0wLGc9ZC5sZW5ndGg7eTxnOysreSkoZj1kW3ldKSYmSm4oZixlLG4seSxkLHApO2EucHVzaChkKSxvLnB1c2goYyl9cmV0dXJuIG5ldyB6cihhLG8sZSxuKX0sZmlsdGVyOmZ1bmN0aW9uKHQpeyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1ndCh0KSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxuPWUubGVuZ3RoLHI9bmV3IEFycmF5KG4pLGk9MDtpPG47KytpKWZvcih2YXIgYSxvPWVbaV0scz1vLmxlbmd0aCxjPXJbaV09W10sdT0wO3U8czsrK3UpKGE9b1t1XSkmJnQuY2FsbChhLGEuX19kYXRhX18sdSxvKSYmYy5wdXNoKGEpO3JldHVybiBuZXcgenIocix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbih0KXtpZih0Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLG49dC5fZ3JvdXBzLHI9ZS5sZW5ndGgsaT1uLmxlbmd0aCxhPU1hdGgubWluKHIsaSksbz1uZXcgQXJyYXkocikscz0wO3M8YTsrK3MpZm9yKHZhciBjLHU9ZVtzXSxsPW5bc10saD11Lmxlbmd0aCxmPW9bc109bmV3IEFycmF5KGgpLGQ9MDtkPGg7KytkKShjPXVbZF18fGxbZF0pJiYoZltkXT1jKTtmb3IoO3M8cjsrK3Mpb1tzXT1lW3NdO3JldHVybiBuZXcgenIobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IExyKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQsbj0kcigpLHI9dGhpcy5fZ3JvdXBzLGk9ci5sZW5ndGgsYT0wO2E8aTsrK2EpZm9yKHZhciBvLHM9clthXSxjPXMubGVuZ3RoLHU9MDt1PGM7Kyt1KWlmKG89c1t1XSl7dmFyIGw9bnIobyxlKTtKbihvLHQsbix1LHMse3RpbWU6bC50aW1lK2wuZGVsYXkrbC5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmwuZHVyYXRpb24sZWFzZTpsLmVhc2V9KX1yZXR1cm4gbmV3IHpyKHIsdGhpcy5fcGFyZW50cyx0LG4pfSxjYWxsOnFyLmNhbGwsbm9kZXM6cXIubm9kZXMsbm9kZTpxci5ub2RlLHNpemU6cXIuc2l6ZSxlbXB0eTpxci5lbXB0eSxlYWNoOnFyLmVhY2gsb246ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP25yKHRoaXMubm9kZSgpLG4pLm9uLm9uKHQpOnRoaXMuZWFjaChEcihuLHQsZSkpfSxhdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIG49VHQodCkscj0idHJhbnNmb3JtIj09PW4/ZHI6bXI7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKHQsImZ1bmN0aW9uIj09dHlwZW9mIGU/KG4ubG9jYWw/d3I6a3IpKG4scixncih0aGlzLCJhdHRyLiIrdCxlKSk6bnVsbD09ZT8obi5sb2NhbD9icjp2cikobik6KG4ubG9jYWw/X3I6eHIpKG4scixlKSl9LGF0dHJUd2VlbjpmdW5jdGlvbih0LGUpe3ZhciBuPSJhdHRyLiIrdDtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKG49dGhpcy50d2VlbihuKSkmJm4uX3ZhbHVlO2lmKG51bGw9PWUpcmV0dXJuIHRoaXMudHdlZW4obixudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3I7dmFyIHI9VHQodCk7cmV0dXJuIHRoaXMudHdlZW4obiwoci5sb2NhbD9DcjpTcikocixlKSl9LHN0eWxlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj0idHJhbnNmb3JtIj09KHQrPSIiKT9mcjptcjtyZXR1cm4gbnVsbD09ZT90aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1JdCh0aGlzLHQpLG89KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCksSXQodGhpcyx0KSk7cmV0dXJuIGE9PT1vP251bGw6YT09PW4mJm89PT1yP2k6aT1lKG49YSxyPW8pfX0odCxyKSkub24oImVuZC5zdHlsZS4iK3QsSXIodCkpOiJmdW5jdGlvbiI9PXR5cGVvZiBlP3RoaXMuc3R5bGVUd2Vlbih0LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SXQodGhpcyx0KSxzPW4odGhpcyksYz1zKyIiO3JldHVybiBudWxsPT1zJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KSxjPXM9SXQodGhpcyx0KSksbz09PWM/bnVsbDpvPT09ciYmYz09PWk/YTooaT1jLGE9ZShyPW8scykpfX0odCxyLGdyKHRoaXMsInN0eWxlLiIrdCxlKSkpLmVhY2goZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvPSJzdHlsZS4iK2Uscz0iZW5kLiIrbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYz1lcih0aGlzLHQpLHU9Yy5vbixsPW51bGw9PWMudmFsdWVbb10/YXx8KGE9SXIoZSkpOnZvaWQgMDt1PT09biYmaT09PWx8fChyPShuPXUpLmNvcHkoKSkub24ocyxpPWwpLGMub249cn19KHRoaXMuX2lkLHQpKTp0aGlzLnN0eWxlVHdlZW4odCxmdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhPW4rIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89SXQodGhpcyx0KTtyZXR1cm4gbz09PWE/bnVsbDpvPT09cj9pOmk9ZShyPW8sbil9fSh0LHIsZSksbikub24oImVuZC5zdHlsZS4iK3QsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24odCxlLG4pe3ZhciByPSJzdHlsZS4iKyh0Kz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZihudWxsPT1lKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHIsRnIodCxlLG51bGw9PW4/IiI6bikpfSx0ZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfX0oZ3IodGhpcywidGV4dCIsdCkpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19KG51bGw9PXQ/IiI6dCsiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24odCl7dmFyIGU9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4oZT10aGlzLnR3ZWVuKGUpKSYmZS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihlLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihlLGpyKHQpKX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLCh0PXRoaXMuX2lkLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgbiBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrbiE9PXQpcmV0dXJuO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSk7dmFyIHR9LHR3ZWVuOmZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5faWQ7aWYodCs9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHIsaT1ucih0aGlzLm5vZGUoKSxuKS50d2VlbixhPTAsbz1pLmxlbmd0aDthPG87KythKWlmKChyPWlbYV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PWU/cHI6eXIpKG4sdCxlKSl9LGRlbGF5OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIHQ/QXI6TXIpKGUsdCkpOm5yKHRoaXMubm9kZSgpLGUpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiB0P09yOk5yKShlLHQpKTpucih0aGlzLm5vZGUoKSxlKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goQnIoZSx0KSk6bnIodGhpcy5ub2RlKCksZSkuZWFzZX0sZW5kOmZ1bmN0aW9uKCl7dmFyIHQsZSxuPXRoaXMscj1uLl9pZCxpPW4uc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxvKXt2YXIgcz17dmFsdWU6b30sYz17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLWkmJmEoKX19O24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1lcih0aGlzLHIpLGk9bi5vbjtpIT09dCYmKChlPSh0PWkpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChzKSxlLl8uaW50ZXJydXB0LnB1c2gocyksZS5fLmVuZC5wdXNoKGMpKSxuLm9uPWV9KSl9KSl9fTt2YXIgR3I9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOlZyfTtmdW5jdGlvbiBYcih0LGUpe2Zvcih2YXIgbjshKG49dC5fX3RyYW5zaXRpb24pfHwhKG49bltlXSk7KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBHci50aW1lPVVuKCksR3I7cmV0dXJuIG59a2UucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3NyKHRoaXMsdCl9KSl9LGtlLnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlLG47dCBpbnN0YW5jZW9mIHpyPyhlPXQuX2lkLHQ9dC5fbmFtZSk6KGU9JHIoKSwobj1HcikudGltZT1VbigpLHQ9bnVsbD09dD9udWxsOnQrIiIpO2Zvcih2YXIgcj10aGlzLl9ncm91cHMsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSlmb3IodmFyIG8scz1yW2FdLGM9cy5sZW5ndGgsdT0wO3U8YzsrK3UpKG89c1t1XSkmJkpuKG8sdCxlLHUscyxufHxYcihvLGUpKTtyZXR1cm4gbmV3IHpyKHIsdGhpcy5fcGFyZW50cyx0LGUpfTt2YXIgWnI9W251bGxdLEtyPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXQuX190cmFuc2l0aW9uO2lmKGkpZm9yKHIgaW4gZT1udWxsPT1lP251bGw6ZSsiIixpKWlmKChuPWlbcl0pLnN0YXRlPjEmJm4ubmFtZT09PWUpcmV0dXJuIG5ldyB6cihbW3RdXSxacixlLCtyKTtyZXR1cm4gbnVsbH0sUXI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxKcj1mdW5jdGlvbih0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlbGVjdGlvbj1ufTtmdW5jdGlvbiB0aSgpe3VlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBlaT1mdW5jdGlvbigpe3VlLnByZXZlbnREZWZhdWx0KCksdWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9LG5pPXtuYW1lOiJkcmFnIn0scmk9e25hbWU6InNwYWNlIn0saWk9e25hbWU6ImhhbmRsZSJ9LGFpPXtuYW1lOiJjZW50ZXIifTtmdW5jdGlvbiBvaSh0KXtyZXR1cm5bK3RbMF0sK3RbMV1dfWZ1bmN0aW9uIHNpKHQpe3JldHVybltvaSh0WzBdKSxvaSh0WzFdKV19ZnVuY3Rpb24gY2kodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBCbihlLHVlLnRvdWNoZXMsdCl9fXZhciB1aT17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKG1pKSxpbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P251bGw6W1srdFswXSxlWzBdWzFdXSxbK3RbMV0sZVsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlt0WzBdWzBdLHRbMV1bMF1dfX0sbGk9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChtaSksaW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9udWxsOltbZVswXVswXSwrdFswXV0sW2VbMV1bMF0sK3RbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0JiZbdFswXVsxXSx0WzFdWzFdXX19LGhpPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChtaSksaW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpzaSh0KX0sb3V0cHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sZmk9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LGRpPXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxwaT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0seWk9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sZ2k9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX07ZnVuY3Rpb24gbWkodCl7cmV0dXJue3R5cGU6dH19ZnVuY3Rpb24gdmkoKXtyZXR1cm4hdWUuY3RybEtleSYmIXVlLmJ1dHRvbn1mdW5jdGlvbiBiaSgpe3ZhciB0PXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiB0Lmhhc0F0dHJpYnV0ZSgidmlld0JveCIpP1tbKHQ9dC52aWV3Qm94LmJhc2VWYWwpLngsdC55XSxbdC54K3Qud2lkdGgsdC55K3QuaGVpZ2h0XV06W1swLDBdLFt0LndpZHRoLmJhc2VWYWwudmFsdWUsdC5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dfWZ1bmN0aW9uIHhpKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIF9pKHQpe2Zvcig7IXQuX19icnVzaDspaWYoISh0PXQucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiB0Ll9fYnJ1c2h9ZnVuY3Rpb24ga2kodCl7cmV0dXJuIHRbMF1bMF09PT10WzFdWzBdfHx0WzBdWzFdPT09dFsxXVsxXX1mdW5jdGlvbiB3aSh0KXt2YXIgZT10Ll9fYnJ1c2g7cmV0dXJuIGU/ZS5kaW0ub3V0cHV0KGUuc2VsZWN0aW9uKTpudWxsfWZ1bmN0aW9uIFRpKCl7cmV0dXJuIFNpKHVpKX1mdW5jdGlvbiBFaSgpe3JldHVybiBTaShsaSl9dmFyIENpPWZ1bmN0aW9uKCl7cmV0dXJuIFNpKGhpKX07ZnVuY3Rpb24gU2kodCl7dmFyIGUsbj1iaSxyPXZpLGk9eGksYT0hMCxvPWh0KCJzdGFydCIsImJydXNoIiwiZW5kIikscz02O2Z1bmN0aW9uIGMoZSl7dmFyIG49ZS5wcm9wZXJ0eSgiX19icnVzaCIseSkuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmRhdGEoW21pKCJvdmVybGF5IildKTtuLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJvdmVybGF5IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5hdHRyKCJjdXJzb3IiLGZpLm92ZXJsYXkpLm1lcmdlKG4pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9X2kodGhpcykuZXh0ZW50O3dlKHRoaXMpLmF0dHIoIngiLHRbMF1bMF0pLmF0dHIoInkiLHRbMF1bMV0pLmF0dHIoIndpZHRoIix0WzFdWzBdLXRbMF1bMF0pLmF0dHIoImhlaWdodCIsdFsxXVsxXS10WzBdWzFdKX0pKSxlLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLmRhdGEoW21pKCJzZWxlY3Rpb24iKV0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJzZWxlY3Rpb24iKS5hdHRyKCJjdXJzb3IiLGZpLnNlbGVjdGlvbikuYXR0cigiZmlsbCIsIiM3NzciKS5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKS5hdHRyKCJzdHJva2UiLCIjZmZmIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpO3ZhciByPWUuc2VsZWN0QWxsKCIuaGFuZGxlIikuZGF0YSh0LmhhbmRsZXMsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGV9KSk7ci5leGl0KCkucmVtb3ZlKCksci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuImhhbmRsZSBoYW5kbGUtLSIrdC50eXBlfSkpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiBmaVt0LnR5cGVdfSkpLGUuZWFjaCh1KS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikub24oIm1vdXNlZG93bi5icnVzaCIsZikuZmlsdGVyKGkpLm9uKCJ0b3VjaHN0YXJ0LmJydXNoIixmKS5vbigidG91Y2htb3ZlLmJydXNoIixkKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLHApLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiB1KCl7dmFyIHQ9d2UodGhpcyksZT1faSh0aGlzKS5zZWxlY3Rpb247ZT8odC5zZWxlY3RBbGwoIi5zZWxlY3Rpb24iKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZVswXVswXSkuYXR0cigieSIsZVswXVsxXSkuYXR0cigid2lkdGgiLGVbMV1bMF0tZVswXVswXSkuYXR0cigiaGVpZ2h0IixlWzFdWzFdLWVbMF1bMV0pLHQuc2VsZWN0QWxsKCIuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLG51bGwpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGVbdC50eXBlLmxlbmd0aC0xXT9lWzFdWzBdLXMvMjplWzBdWzBdLXMvMn0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuInMiPT09dC50eXBlWzBdP2VbMV1bMV0tcy8yOmVbMF1bMV0tcy8yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIm4iPT09dC50eXBlfHwicyI9PT10LnR5cGU/ZVsxXVswXS1lWzBdWzBdK3M6c30pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4iZSI9PT10LnR5cGV8fCJ3Ij09PXQudHlwZT9lWzFdWzFdLWVbMF1bMV0rczpzfSkpKTp0LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gbCh0LGUsbil7dmFyIHI9dC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIXJ8fG4mJnIuY2xlYW4/bmV3IGgodCxlLG4pOnJ9ZnVuY3Rpb24gaCh0LGUsbil7dGhpcy50aGF0PXQsdGhpcy5hcmdzPWUsdGhpcy5zdGF0ZT10Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPW59ZnVuY3Rpb24gZigpe2lmKCghZXx8dWUudG91Y2hlcykmJnIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgbixpLG8scyxjLGgsZixkLHAseSxnLG09dGhpcyx2PXVlLnRhcmdldC5fX2RhdGFfXy50eXBlLGI9InNlbGVjdGlvbiI9PT0oYSYmdWUubWV0YUtleT92PSJvdmVybGF5Ijp2KT9uaTphJiZ1ZS5hbHRLZXk/YWk6aWkseD10PT09bGk/bnVsbDp5aVt2XSxfPXQ9PT11aT9udWxsOmdpW3ZdLGs9X2kobSksdz1rLmV4dGVudCxUPWsuc2VsZWN0aW9uLEU9d1swXVswXSxDPXdbMF1bMV0sUz13WzFdWzBdLEE9d1sxXVsxXSxNPTAsTz0wLE49eCYmXyYmYSYmdWUuc2hpZnRLZXksQj11ZS50b3VjaGVzP2NpKHVlLmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOkRuLEQ9QihtKSxMPUQsST1sKG0sYXJndW1lbnRzLCEwKS5iZWZvcmVzdGFydCgpOyJvdmVybGF5Ij09PXY/KFQmJihwPSEwKSxrLnNlbGVjdGlvbj1UPVtbbj10PT09bGk/RTpEWzBdLG89dD09PXVpP0M6RFsxXV0sW2M9dD09PWxpP1M6bixmPXQ9PT11aT9BOm9dXSk6KG49VFswXVswXSxvPVRbMF1bMV0sYz1UWzFdWzBdLGY9VFsxXVsxXSksaT1uLHM9byxoPWMsZD1mO3ZhciBSPXdlKG0pLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEY9Ui5zZWxlY3RBbGwoIi5vdmVybGF5IikuYXR0cigiY3Vyc29yIixmaVt2XSk7aWYodWUudG91Y2hlcylJLm1vdmVkPWosSS5lbmRlZD16O2Vsc2V7dmFyIFA9d2UodWUudmlldykub24oIm1vdXNlbW92ZS5icnVzaCIsaiwhMCkub24oIm1vdXNldXAuYnJ1c2giLHosITApO2EmJlAub24oImtleWRvd24uYnJ1c2giLFUsITApLm9uKCJrZXl1cC5icnVzaCIsJCwhMCksQ2UodWUudmlldyl9dGkoKSxzcihtKSx1LmNhbGwobSksSS5zdGFydCgpfWZ1bmN0aW9uIGooKXt2YXIgdD1CKG0pOyFOfHx5fHxnfHwoTWF0aC5hYnModFswXS1MWzBdKT5NYXRoLmFicyh0WzFdLUxbMV0pP2c9ITA6eT0hMCksTD10LHA9ITAsZWkoKSxZKCl9ZnVuY3Rpb24gWSgpe3ZhciB0O3N3aXRjaChNPUxbMF0tRFswXSxPPUxbMV0tRFsxXSxiKXtjYXNlIHJpOmNhc2Ugbmk6eCYmKE09TWF0aC5tYXgoRS1uLE1hdGgubWluKFMtYyxNKSksaT1uK00saD1jK00pLF8mJihPPU1hdGgubWF4KEMtbyxNYXRoLm1pbihBLWYsTykpLHM9bytPLGQ9ZitPKTticmVhaztjYXNlIGlpOng8MD8oTT1NYXRoLm1heChFLW4sTWF0aC5taW4oUy1uLE0pKSxpPW4rTSxoPWMpOng+MCYmKE09TWF0aC5tYXgoRS1jLE1hdGgubWluKFMtYyxNKSksaT1uLGg9YytNKSxfPDA/KE89TWF0aC5tYXgoQy1vLE1hdGgubWluKEEtbyxPKSkscz1vK08sZD1mKTpfPjAmJihPPU1hdGgubWF4KEMtZixNYXRoLm1pbihBLWYsTykpLHM9byxkPWYrTyk7YnJlYWs7Y2FzZSBhaTp4JiYoaT1NYXRoLm1heChFLE1hdGgubWluKFMsbi1NKngpKSxoPU1hdGgubWF4KEUsTWF0aC5taW4oUyxjK00qeCkpKSxfJiYocz1NYXRoLm1heChDLE1hdGgubWluKEEsby1PKl8pKSxkPU1hdGgubWF4KEMsTWF0aC5taW4oQSxmK08qXykpKX1oPGkmJih4Kj0tMSx0PW4sbj1jLGM9dCx0PWksaT1oLGg9dCx2IGluIGRpJiZGLmF0dHIoImN1cnNvciIsZmlbdj1kaVt2XV0pKSxkPHMmJihfKj0tMSx0PW8sbz1mLGY9dCx0PXMscz1kLGQ9dCx2IGluIHBpJiZGLmF0dHIoImN1cnNvciIsZmlbdj1waVt2XV0pKSxrLnNlbGVjdGlvbiYmKFQ9ay5zZWxlY3Rpb24pLHkmJihpPVRbMF1bMF0saD1UWzFdWzBdKSxnJiYocz1UWzBdWzFdLGQ9VFsxXVsxXSksVFswXVswXT09PWkmJlRbMF1bMV09PT1zJiZUWzFdWzBdPT09aCYmVFsxXVsxXT09PWR8fChrLnNlbGVjdGlvbj1bW2ksc10sW2gsZF1dLHUuY2FsbChtKSxJLmJydXNoKCkpfWZ1bmN0aW9uIHooKXtpZih0aSgpLHVlLnRvdWNoZXMpe2lmKHVlLnRvdWNoZXMubGVuZ3RoKXJldHVybjtlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2U9bnVsbH0pLDUwMCl9ZWxzZSBTZSh1ZS52aWV3LHApLFAub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO1IuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKSxGLmF0dHIoImN1cnNvciIsZmkub3ZlcmxheSksay5zZWxlY3Rpb24mJihUPWsuc2VsZWN0aW9uKSxraShUKSYmKGsuc2VsZWN0aW9uPW51bGwsdS5jYWxsKG0pKSxJLmVuZCgpfWZ1bmN0aW9uIFUoKXtzd2l0Y2godWUua2V5Q29kZSl7Y2FzZSAxNjpOPXgmJl87YnJlYWs7Y2FzZSAxODpiPT09aWkmJih4JiYoYz1oLU0qeCxuPWkrTSp4KSxfJiYoZj1kLU8qXyxvPXMrTypfKSxiPWFpLFkoKSk7YnJlYWs7Y2FzZSAzMjpiIT09aWkmJmIhPT1haXx8KHg8MD9jPWgtTTp4PjAmJihuPWktTSksXzwwP2Y9ZC1POl8+MCYmKG89cy1PKSxiPXJpLEYuYXR0cigiY3Vyc29yIixmaS5zZWxlY3Rpb24pLFkoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59ZWkoKX1mdW5jdGlvbiAkKCl7c3dpdGNoKHVlLmtleUNvZGUpe2Nhc2UgMTY6TiYmKHk9Zz1OPSExLFkoKSk7YnJlYWs7Y2FzZSAxODpiPT09YWkmJih4PDA/Yz1oOng+MCYmKG49aSksXzwwP2Y9ZDpfPjAmJihvPXMpLGI9aWksWSgpKTticmVhaztjYXNlIDMyOmI9PT1yaSYmKHVlLmFsdEtleT8oeCYmKGM9aC1NKngsbj1pK00qeCksXyYmKGY9ZC1PKl8sbz1zK08qXyksYj1haSk6KHg8MD9jPWg6eD4wJiYobj1pKSxfPDA/Zj1kOl8+MCYmKG89cyksYj1paSksRi5hdHRyKCJjdXJzb3IiLGZpW3ZdKSxZKCkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufWVpKCl9fWZ1bmN0aW9uIGQoKXtsKHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIHAoKXtsKHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIHkoKXt2YXIgZT10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIGUuZXh0ZW50PXNpKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxlLmRpbT10LGV9cmV0dXJuIGMubW92ZT1mdW5jdGlvbihlLG4pe2Uuc2VsZWN0aW9uP2Uub24oInN0YXJ0LmJydXNoIiwoZnVuY3Rpb24oKXtsKHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLChmdW5jdGlvbigpe2wodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkpLnR3ZWVuKCJicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWUuX19icnVzaCxpPWwoZSxhcmd1bWVudHMpLGE9ci5zZWxlY3Rpb24sbz10LmlucHV0KCJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4sci5leHRlbnQpLHM9TW4oYSxvKTtmdW5jdGlvbiBjKHQpe3Iuc2VsZWN0aW9uPTE9PT10JiZudWxsPT09bz9udWxsOnModCksdS5jYWxsKGUpLGkuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PWEmJm51bGwhPT1vP2M6YygxKX0pKTplLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxyPWFyZ3VtZW50cyxpPWUuX19icnVzaCxhPXQuaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLHIpOm4saS5leHRlbnQpLG89bChlLHIpLmJlZm9yZXN0YXJ0KCk7c3IoZSksaS5zZWxlY3Rpb249bnVsbD09PWE/bnVsbDphLHUuY2FsbChlKSxvLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pKX0sYy5jbGVhcj1mdW5jdGlvbih0KXtjLm1vdmUodCxudWxsKX0saC5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nPyh0aGlzLnN0YXJ0aW5nPSExLHRoaXMuZW1pdCgic3RhcnQiKSk6dGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihlKXt5ZShuZXcgSnIoYyxlLHQub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksby5hcHBseSxvLFtlLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19LGMuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UXIoc2kodCkpLGMpOm59LGMuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UXIoISF0KSxjKTpyfSxjLnRvdWNoYWJsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlFyKCEhdCksYyk6aX0sYy5oYW5kbGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LGMpOnN9LGMua2V5TW9kaWZpZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSEhdCxjKTphfSxjLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT1vP2M6dH0sY312YXIgQWk9TWF0aC5jb3MsTWk9TWF0aC5zaW4sT2k9TWF0aC5QSSxOaT1PaS8yLEJpPTIqT2ksRGk9TWF0aC5tYXg7ZnVuY3Rpb24gTGkodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUsbi5zb3VyY2UudmFsdWUrbi50YXJnZXQudmFsdWUpfX12YXIgSWk9ZnVuY3Rpb24oKXt2YXIgdD0wLGU9bnVsbCxuPW51bGwscj1udWxsO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzLGMsdSxsLGg9aS5sZW5ndGgsZj1bXSxkPXcoaCkscD1bXSx5PVtdLGc9eS5ncm91cHM9bmV3IEFycmF5KGgpLG09bmV3IEFycmF5KGgqaCk7Zm9yKGE9MCx1PS0xOysrdTxoOyl7Zm9yKG89MCxsPS0xOysrbDxoOylvKz1pW3VdW2xdO2YucHVzaChvKSxwLnB1c2godyhoKSksYSs9b31mb3IoZSYmZC5zb3J0KChmdW5jdGlvbih0LG4pe3JldHVybiBlKGZbdF0sZltuXSl9KSksbiYmcC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Quc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gbihpW2VdW3RdLGlbZV1bcl0pfSkpfSkpLGM9KGE9RGkoMCxCaS10KmgpL2EpP3Q6QmkvaCxvPTAsdT0tMTsrK3U8aDspe2ZvcihzPW8sbD0tMTsrK2w8aDspe3ZhciB2PWRbdV0sYj1wW3ZdW2xdLHg9aVt2XVtiXSxfPW8saz1vKz14KmE7bVtiKmgrdl09e2luZGV4OnYsc3ViaW5kZXg6YixzdGFydEFuZ2xlOl8sZW5kQW5nbGU6ayx2YWx1ZTp4fX1nW3ZdPXtpbmRleDp2LHN0YXJ0QW5nbGU6cyxlbmRBbmdsZTpvLHZhbHVlOmZbdl19LG8rPWN9Zm9yKHU9LTE7Kyt1PGg7KWZvcihsPXUtMTsrK2w8aDspe3ZhciBUPW1bbCpoK3VdLEU9bVt1KmgrbF07KFQudmFsdWV8fEUudmFsdWUpJiZ5LnB1c2goVC52YWx1ZTxFLnZhbHVlP3tzb3VyY2U6RSx0YXJnZXQ6VH06e3NvdXJjZTpULHRhcmdldDpFfSl9cmV0dXJuIHI/eS5zb3J0KHIpOnl9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9RGkoMCxlKSxpKTp0fSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxpKTplfSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxpKTpufSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1udWxsOihyPUxpKHQpKS5fPXQsaSk6ciYmci5ffSxpfSxSaT1BcnJheS5wcm90b3R5cGUuc2xpY2UsRmk9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxQaT1NYXRoLlBJLGppPTIqUGksWWk9amktMWUtNjtmdW5jdGlvbiB6aSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFVpKCl7cmV0dXJuIG5ldyB6aX16aS5wcm90b3R5cGU9VWkucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6aSxtb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K3QpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K2UpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MT0rZSl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24odCxlLG4scil7dGhpcy5fKz0iUSIrICt0KyIsIisgK2UrIiwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rcil9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLG4scixpLGEpe3RoaXMuXys9IkMiKyArdCsiLCIrICtlKyIsIisgK24rIiwiKyArcisiLCIrKHRoaXMuX3gxPStpKSsiLCIrKHRoaXMuX3kxPSthKX0sYXJjVG86ZnVuY3Rpb24odCxlLG4scixpKXt0PSt0LGU9K2Usbj0rbixyPStyLGk9K2k7dmFyIGE9dGhpcy5feDEsbz10aGlzLl95MSxzPW4tdCxjPXItZSx1PWEtdCxsPW8tZSxoPXUqdStsKmw7aWYoaTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK2kpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlIGlmKGg+MWUtNilpZihNYXRoLmFicyhsKnMtYyp1KT4xZS02JiZpKXt2YXIgZj1uLWEsZD1yLW8scD1zKnMrYypjLHk9ZipmK2QqZCxnPU1hdGguc3FydChwKSxtPU1hdGguc3FydChoKSx2PWkqTWF0aC50YW4oKFBpLU1hdGguYWNvcygocCtoLXkpLygyKmcqbSkpKS8yKSxiPXYvbSx4PXYvZztNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisoZStiKmwpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsobCpmPnUqZCkrIiwiKyh0aGlzLl94MT10K3gqcykrIiwiKyh0aGlzLl95MT1lK3gqYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1lKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0PSt0LGU9K2UsYT0hIWE7dmFyIG89KG49K24pKk1hdGguY29zKHIpLHM9bipNYXRoLnNpbihyKSxjPXQrbyx1PWUrcyxsPTFeYSxoPWE/ci1pOmktcjtpZihuPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrbik7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2MrIiwiK3U6KE1hdGguYWJzKHRoaXMuX3gxLWMpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLXUpPjFlLTYpJiYodGhpcy5fKz0iTCIrYysiLCIrdSksbiYmKGg8MCYmKGg9aCVqaStqaSksaD5ZaT90aGlzLl8rPSJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHQtbykrIiwiKyhlLXMpKyJBIituKyIsIituKyIsMCwxLCIrbCsiLCIrKHRoaXMuX3gxPWMpKyIsIisodGhpcy5feTE9dSk6aD4xZS02JiYodGhpcy5fKz0iQSIrbisiLCIrbisiLDAsIisgKyhoPj1QaSkrIiwiK2wrIiwiKyh0aGlzLl94MT10K24qTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9ZStuKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKHQsZSxuLHIpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rdCkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rZSkrImgiKyArbisidiIrICtyKyJoIistbisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O3ZhciAkaT1VaTtmdW5jdGlvbiBxaSh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gV2kodCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIEhpKHQpe3JldHVybiB0LnJhZGl1c31mdW5jdGlvbiBWaSh0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIEdpKHQpe3JldHVybiB0LmVuZEFuZ2xlfXZhciBYaT1mdW5jdGlvbigpe3ZhciB0PXFpLGU9V2ksbj1IaSxyPVZpLGk9R2ksYT1udWxsO2Z1bmN0aW9uIG8oKXt2YXIgbyxzPVJpLmNhbGwoYXJndW1lbnRzKSxjPXQuYXBwbHkodGhpcyxzKSx1PWUuYXBwbHkodGhpcyxzKSxsPStuLmFwcGx5KHRoaXMsKHNbMF09YyxzKSksaD1yLmFwcGx5KHRoaXMscyktTmksZj1pLmFwcGx5KHRoaXMscyktTmksZD1sKkFpKGgpLHA9bCpNaShoKSx5PStuLmFwcGx5KHRoaXMsKHNbMF09dSxzKSksZz1yLmFwcGx5KHRoaXMscyktTmksbT1pLmFwcGx5KHRoaXMscyktTmk7aWYoYXx8KGE9bz0kaSgpKSxhLm1vdmVUbyhkLHApLGEuYXJjKDAsMCxsLGgsZiksaD09PWcmJmY9PT1tfHwoYS5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCx5KkFpKGcpLHkqTWkoZykpLGEuYXJjKDAsMCx5LGcsbSkpLGEucXVhZHJhdGljQ3VydmVUbygwLDAsZCxwKSxhLmNsb3NlUGF0aCgpLG8pcmV0dXJuIGE9bnVsbCxvKyIifHxudWxsfXJldHVybiBvLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkZpKCt0KSxvKTpufSxvLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpGaSgrdCksbyk6cn0sby5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkZpKCt0KSxvKTppfSxvLnNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG8pOnR9LG8udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDp0LG8pOmF9LG99O2Z1bmN0aW9uIFppKCl7fWZ1bmN0aW9uIEtpKHQsZSl7dmFyIG49bmV3IFppO2lmKHQgaW5zdGFuY2VvZiBaaSl0LmVhY2goKGZ1bmN0aW9uKHQsZSl7bi5zZXQoZSx0KX0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByLGk9LTEsYT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytpPGE7KW4uc2V0KGksdFtpXSk7ZWxzZSBmb3IoOysraTxhOyluLnNldChlKHI9dFtpXSxpLHQpLHIpfWVsc2UgaWYodClmb3IodmFyIG8gaW4gdCluLnNldChvLHRbb10pO3JldHVybiBufVppLnByb3RvdHlwZT1LaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlppLGhhczpmdW5jdGlvbih0KXtyZXR1cm4iJCIrdCBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbIiQiK3RdfSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpc1siJCIrdF09ZSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9IiQiK3Q7cmV0dXJuIGUgaW4gdGhpcyYmZGVsZXRlIHRoaXNbZV19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpIiQiPT09dFswXSYmZGVsZXRlIHRoaXNbdF19LGtleXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goZS5zbGljZSgxKSk7cmV0dXJuIHR9LHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh0aGlzW2VdKTtyZXR1cm4gdH0sZW50cmllczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzKSIkIj09PWVbMF0mJnQucHVzaCh7a2V5OmUuc2xpY2UoMSksdmFsdWU6dGhpc1tlXX0pO3JldHVybiB0fSxzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9MDtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiYrK3Q7cmV0dXJuIHR9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMpaWYoIiQiPT09dFswXSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0KHRoaXNbZV0sZS5zbGljZSgxKSx0aGlzKX19O3ZhciBRaT1LaSxKaT1mdW5jdGlvbigpe3ZhciB0LGUsbixyPVtdLGk9W107ZnVuY3Rpb24gYShuLGksbyxzKXtpZihpPj1yLmxlbmd0aClyZXR1cm4gbnVsbCE9dCYmbi5zb3J0KHQpLG51bGwhPWU/ZShuKTpuO2Zvcih2YXIgYyx1LGwsaD0tMSxmPW4ubGVuZ3RoLGQ9cltpKytdLHA9UWkoKSx5PW8oKTsrK2g8ZjspKGw9cC5nZXQoYz1kKHU9bltoXSkrIiIpKT9sLnB1c2godSk6cC5zZXQoYyxbdV0pO3JldHVybiBwLmVhY2goKGZ1bmN0aW9uKHQsZSl7cyh5LGUsYSh0LGksbyxzKSl9KSkseX1yZXR1cm4gbj17b2JqZWN0OmZ1bmN0aW9uKHQpe3JldHVybiBhKHQsMCx0YSxlYSl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4gYSh0LDAsbmEscmEpfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KG4sYSl7aWYoKythPnIubGVuZ3RoKXJldHVybiBuO3ZhciBvLHM9aVthLTFdO3JldHVybiBudWxsIT1lJiZhPj1yLmxlbmd0aD9vPW4uZW50cmllcygpOihvPVtdLG4uZWFjaCgoZnVuY3Rpb24oZSxuKXtvLnB1c2goe2tleTpuLHZhbHVlczp0KGUsYSl9KX0pKSksbnVsbCE9cz9vLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModC5rZXksZS5rZXkpfSkpOm99KGEodCwwLG5hLHJhKSwwKX0sa2V5OmZ1bmN0aW9uKHQpe3JldHVybiByLnB1c2godCksbn0sc29ydEtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIGlbci5sZW5ndGgtMV09dCxufSxzb3J0VmFsdWVzOmZ1bmN0aW9uKGUpe3JldHVybiB0PWUsbn0scm9sbHVwOmZ1bmN0aW9uKHQpe3JldHVybiBlPXQsbn19fTtmdW5jdGlvbiB0YSgpe3JldHVybnt9fWZ1bmN0aW9uIGVhKHQsZSxuKXt0W2VdPW59ZnVuY3Rpb24gbmEoKXtyZXR1cm4gUWkoKX1mdW5jdGlvbiByYSh0LGUsbil7dC5zZXQoZSxuKX1mdW5jdGlvbiBpYSgpe312YXIgYWE9UWkucHJvdG90eXBlO2Z1bmN0aW9uIG9hKHQsZSl7dmFyIG49bmV3IGlhO2lmKHQgaW5zdGFuY2VvZiBpYSl0LmVhY2goKGZ1bmN0aW9uKHQpe24uYWRkKHQpfSkpO2Vsc2UgaWYodCl7dmFyIHI9LTEsaT10Lmxlbmd0aDtpZihudWxsPT1lKWZvcig7KytyPGk7KW4uYWRkKHRbcl0pO2Vsc2UgZm9yKDsrK3I8aTspbi5hZGQoZSh0W3JdLHIsdCkpfXJldHVybiBufWlhLnByb3RvdHlwZT1vYS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczphYS5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTphYS5yZW1vdmUsY2xlYXI6YWEuY2xlYXIsdmFsdWVzOmFhLmtleXMsc2l6ZTphYS5zaXplLGVtcHR5OmFhLmVtcHR5LGVhY2g6YWEuZWFjaH07dmFyIHNhPW9hLGNhPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgbiBpbiB0KWUucHVzaChuKTtyZXR1cm4gZX0sdWE9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHRbbl0pO3JldHVybiBlfSxsYT1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIG4gaW4gdCllLnB1c2goe2tleTpuLHZhbHVlOnRbbl19KTtyZXR1cm4gZX0saGE9TWF0aC5QSS8xODAsZmE9MTgwL01hdGguUEk7ZnVuY3Rpb24gZGEodCl7aWYodCBpbnN0YW5jZW9mIGdhKXJldHVybiBuZXcgZ2EodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgVGEpcmV0dXJuIEVhKHQpO3QgaW5zdGFuY2VvZiBYZXx8KHQ9VmUodCkpO3ZhciBlLG4scj14YSh0LnIpLGk9eGEodC5nKSxhPXhhKHQuYiksbz1tYSgoLjIyMjUwNDUqcisuNzE2ODc4NippKy4wNjA2MTY5KmEpLzEpO3JldHVybiByPT09aSYmaT09PWE/ZT1uPW86KGU9bWEoKC40MzYwNzQ3KnIrLjM4NTA2NDkqaSsuMTQzMDgwNCphKS8uOTY0MjIpLG49bWEoKC4wMTM5MzIyKnIrLjA5NzEwNDUqaSsuNzE0MTczMyphKS8uODI1MjEpKSxuZXcgZ2EoMTE2Km8tMTYsNTAwKihlLW8pLDIwMCooby1uKSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIHBhKHQsZSl7cmV0dXJuIG5ldyBnYSh0LDAsMCxudWxsPT1lPzE6ZSl9ZnVuY3Rpb24geWEodCxlLG4scil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2RhKHQpOm5ldyBnYSh0LGUsbixudWxsPT1yPzE6cil9ZnVuY3Rpb24gZ2EodCxlLG4scil7dGhpcy5sPSt0LHRoaXMuYT0rZSx0aGlzLmI9K24sdGhpcy5vcGFjaXR5PStyfWZ1bmN0aW9uIG1hKHQpe3JldHVybiB0PjYvMjkqKDYvMjkpKig2LzI5KT9NYXRoLnBvdyh0LDEvMyk6dC8oNi8yOSozKig2LzI5KSkrNC8yOX1mdW5jdGlvbiB2YSh0KXtyZXR1cm4gdD42LzI5P3QqdCp0OjYvMjkqMyooNi8yOSkqKHQtNC8yOSl9ZnVuY3Rpb24gYmEodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiB4YSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBfYSh0KXtpZih0IGluc3RhbmNlb2YgVGEpcmV0dXJuIG5ldyBUYSh0LmgsdC5jLHQubCx0Lm9wYWNpdHkpO2lmKHQgaW5zdGFuY2VvZiBnYXx8KHQ9ZGEodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBUYShOYU4sMDx0LmwmJnQubDwxMDA/MDpOYU4sdC5sLHQub3BhY2l0eSk7dmFyIGU9TWF0aC5hdGFuMih0LmIsdC5hKSpmYTtyZXR1cm4gbmV3IFRhKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIGthKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9fYSh0KTpuZXcgVGEobixlLHQsbnVsbD09cj8xOnIpfWZ1bmN0aW9uIHdhKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9fYSh0KTpuZXcgVGEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIFRhKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLmM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1mdW5jdGlvbiBFYSh0KXtpZihpc05hTih0LmgpKXJldHVybiBuZXcgZ2EodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpoYTtyZXR1cm4gbmV3IGdhKHQubCxNYXRoLmNvcyhlKSp0LmMsTWF0aC5zaW4oZSkqdC5jLHQub3BhY2l0eSl9QWUoZ2EseWEsTWUoT2Use2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2EodGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnYSh0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAsbj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgWGUoYmEoMy4xMzM4NTYxKihlPS45NjQyMip2YShlKSktMS42MTY4NjY3Kih0PTEqdmEodCkpLS40OTA2MTQ2KihuPS44MjUyMSp2YShuKSkpLGJhKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqbiksYmEoLjA3MTk0NTMqZS0uMjI4OTkxNCp0KzEuNDA1MjQyNypuKSx0aGlzLm9wYWNpdHkpfX0pKSxBZShUYSx3YSxNZShPZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBUYSh0aGlzLmgsdGhpcy5jLHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFRhKHRoaXMuaCx0aGlzLmMsdGhpcy5sLTE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIEVhKHRoaXMpLnJnYigpfX0pKTt2YXIgQ2E9LS4yOTIyNyxTYT0tMS43ODg0NTAzODA2LEFhPTMuNTE3Mjk4MjQzOCxNYT0tLjY1NTc2MzY2Njc5OTk5OTk7ZnVuY3Rpb24gT2EodCl7aWYodCBpbnN0YW5jZW9mIEJhKXJldHVybiBuZXcgQmEodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2YgWGV8fCh0PVZlKHQpKTt2YXIgZT10LnIvMjU1LG49dC5nLzI1NSxyPXQuYi8yNTUsaT0oTWEqcitTYSplLUFhKm4pLyhNYStTYS1BYSksYT1yLWksbz0oMS45NzI5NCoobi1pKS1DYSphKS8tLjkwNjQ5LHM9TWF0aC5zcXJ0KG8qbythKmEpLygxLjk3Mjk0KmkqKDEtaSkpLGM9cz9NYXRoLmF0YW4yKG8sYSkqZmEtMTIwOk5hTjtyZXR1cm4gbmV3IEJhKGM8MD9jKzM2MDpjLHMsaSx0Lm9wYWNpdHkpfWZ1bmN0aW9uIE5hKHQsZSxuLHIpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9PYSh0KTpuZXcgQmEodCxlLG4sbnVsbD09cj8xOnIpfWZ1bmN0aW9uIEJhKHQsZSxuLHIpe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStuLHRoaXMub3BhY2l0eT0rcn1BZShCYSxOYSxNZShPZSx7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8xLy43Ok1hdGgucG93KDEvLjcsdCksbmV3IEJhKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IEJhKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIHQ9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSpoYSxlPSt0aGlzLmwsbj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKmUqKDEtZSkscj1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiBuZXcgWGUoMjU1KihlK24qKC0uMTQ4NjEqcisxLjc4Mjc3KmkpKSwyNTUqKGUrbiooQ2EqcistLjkwNjQ5KmkpKSwyNTUqKGUrbiooMS45NzI5NCpyKSksdGhpcy5vcGFjaXR5KX19KSk7dmFyIERhPUFycmF5LnByb3RvdHlwZS5zbGljZSxMYT1mdW5jdGlvbih0LGUpe3JldHVybiB0LWV9LElhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0sUmE9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scj0tMSxpPWUubGVuZ3RoOysrcjxpOylpZihuPUZhKHQsZVtyXSkpcmV0dXJuIG47cmV0dXJuIDB9O2Z1bmN0aW9uIEZhKHQsZSl7Zm9yKHZhciBuPWVbMF0scj1lWzFdLGk9LTEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgYz10W2FdLHU9Y1swXSxsPWNbMV0saD10W3NdLGY9aFswXSxkPWhbMV07aWYoUGEoYyxoLGUpKXJldHVybiAwO2w+ciE9ZD5yJiZuPChmLXUpKihyLWwpLyhkLWwpK3UmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBQYSh0LGUsbil7dmFyIHIsaSxhLG87cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oZVswXS10WzBdKSooblsxXS10WzFdKT09KG5bMF0tdFswXSkqKGVbMV0tdFsxXSl9KHQsZSxuKSYmKGk9dFtyPSsodFswXT09PWVbMF0pXSxhPW5bcl0sbz1lW3JdLGk8PWEmJmE8PW98fG88PWEmJmE8PWkpfXZhciBqYT1mdW5jdGlvbigpe30sWWE9W1tdLFtbWzEsMS41XSxbLjUsMV1dXSxbW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbLjUsMV1dXSxbW1sxLC41XSxbMS41LDFdXV0sW1tbMSwxLjVdLFsuNSwxXV0sW1sxLC41XSxbMS41LDFdXV0sW1tbMSwuNV0sWzEsMS41XV1dLFtbWzEsLjVdLFsuNSwxXV1dLFtbWy41LDFdLFsxLC41XV1dLFtbWzEsMS41XSxbMSwuNV1dXSxbW1suNSwxXSxbMSwuNV1dLFtbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbMS41LDFdXV0sW1tbLjUsMV0sWzEsMS41XV1dLFtdXSx6YT1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLG49TyxyPXM7ZnVuY3Rpb24gaSh0KXt2YXIgZT1uKHQpO2lmKEFycmF5LmlzQXJyYXkoZSkpZT1lLnNsaWNlKCkuc29ydChMYSk7ZWxzZXt2YXIgcj1tKHQpLGk9clswXSxvPXJbMV07ZT1NKGksbyxlKSxlPXcoTWF0aC5mbG9vcihpL2UpKmUsTWF0aC5mbG9vcihvL2UpKmUsZSl9cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gYSh0LGUpfSkpfWZ1bmN0aW9uIGEobixpKXt2YXIgYT1bXSxzPVtdO3JldHVybiBmdW5jdGlvbihuLHIsaSl7dmFyIGEscyxjLHUsbCxoLGY9bmV3IEFycmF5LGQ9bmV3IEFycmF5O2E9cz0tMSx1PW5bMF0+PXIsWWFbdTw8MV0uZm9yRWFjaChwKTtmb3IoOysrYTx0LTE7KWM9dSx1PW5bYSsxXT49cixZYVtjfHU8PDFdLmZvckVhY2gocCk7WWFbdTw8MF0uZm9yRWFjaChwKTtmb3IoOysrczxlLTE7KXtmb3IoYT0tMSx1PW5bcyp0K3RdPj1yLGw9bltzKnRdPj1yLFlhW3U8PDF8bDw8Ml0uZm9yRWFjaChwKTsrK2E8dC0xOyljPXUsdT1uW3MqdCt0K2ErMV0+PXIsaD1sLGw9bltzKnQrYSsxXT49cixZYVtjfHU8PDF8bDw8MnxoPDwzXS5mb3JFYWNoKHApO1lhW3V8bDw8M10uZm9yRWFjaChwKX1hPS0xLGw9bltzKnRdPj1yLFlhW2w8PDJdLmZvckVhY2gocCk7Zm9yKDsrK2E8dC0xOyloPWwsbD1uW3MqdCthKzFdPj1yLFlhW2w8PDJ8aDw8M10uZm9yRWFjaChwKTtmdW5jdGlvbiBwKHQpe3ZhciBlLG4scj1bdFswXVswXSthLHRbMF1bMV0rc10sYz1bdFsxXVswXSthLHRbMV1bMV0rc10sdT1vKHIpLGw9byhjKTsoZT1kW3VdKT8obj1mW2xdKT8oZGVsZXRlIGRbZS5lbmRdLGRlbGV0ZSBmW24uc3RhcnRdLGU9PT1uPyhlLnJpbmcucHVzaChjKSxpKGUucmluZykpOmZbZS5zdGFydF09ZFtuLmVuZF09e3N0YXJ0OmUuc3RhcnQsZW5kOm4uZW5kLHJpbmc6ZS5yaW5nLmNvbmNhdChuLnJpbmcpfSk6KGRlbGV0ZSBkW2UuZW5kXSxlLnJpbmcucHVzaChjKSxkW2UuZW5kPWxdPWUpOihlPWZbbF0pPyhuPWRbdV0pPyhkZWxldGUgZltlLnN0YXJ0XSxkZWxldGUgZFtuLmVuZF0sZT09PW4/KGUucmluZy5wdXNoKGMpLGkoZS5yaW5nKSk6ZltuLnN0YXJ0XT1kW2UuZW5kXT17c3RhcnQ6bi5zdGFydCxlbmQ6ZS5lbmQscmluZzpuLnJpbmcuY29uY2F0KGUucmluZyl9KTooZGVsZXRlIGZbZS5zdGFydF0sZS5yaW5nLnVuc2hpZnQociksZltlLnN0YXJ0PXVdPWUpOmZbdV09ZFtsXT17c3RhcnQ6dSxlbmQ6bCxyaW5nOltyLGNdfX1ZYVtsPDwzXS5mb3JFYWNoKHApfShuLGksKGZ1bmN0aW9uKHQpe3IodCxuLGkpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLG49dC5sZW5ndGgscj10W24tMV1bMV0qdFswXVswXS10W24tMV1bMF0qdFswXVsxXTsrK2U8bjspcis9dFtlLTFdWzFdKnRbZV1bMF0tdFtlLTFdWzBdKnRbZV1bMV07cmV0dXJuIHJ9KHQpPjA/YS5wdXNoKFt0XSk6cy5wdXNoKHQpfSkpLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49MCxyPWEubGVuZ3RoO248cjsrK24paWYoLTEhPT1SYSgoZT1hW25dKVswXSx0KSlyZXR1cm4gdm9pZCBlLnB1c2godCl9KSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6aSxjb29yZGluYXRlczphfX1mdW5jdGlvbiBvKGUpe3JldHVybiAyKmVbMF0rZVsxXSoodCsxKSo0fWZ1bmN0aW9uIHMobixyLGkpe24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGEsbz1uWzBdLHM9blsxXSxjPTB8byx1PTB8cyxsPXJbdSp0K2NdO28+MCYmbzx0JiZjPT09byYmKGE9clt1KnQrYy0xXSxuWzBdPW8rKGktYSkvKGwtYSktLjUpLHM+MCYmczxlJiZ1PT09cyYmKGE9clsodS0xKSp0K2NdLG5bMV09cysoaS1hKS8obC1hKS0uNSl9KSl9cmV0dXJuIGkuY29udG91cj1hLGkuc2l6ZT1mdW5jdGlvbihuKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bdCxlXTt2YXIgcj1NYXRoLmNlaWwoblswXSksYT1NYXRoLmNlaWwoblsxXSk7aWYoIShyPjAmJmE+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gdD1yLGU9YSxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpBcnJheS5pc0FycmF5KHQpP0lhKERhLmNhbGwodCkpOklhKHQpLGkpOm59LGkuc21vb3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQ/czpqYSxpKTpyPT09c30saX07ZnVuY3Rpb24gVWEodCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxpOysrbylmb3IodmFyIHM9MCxjPTA7czxyK247KytzKXM8ciYmKGMrPXQuZGF0YVtzK28qcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW3MtYStvKnJdKSxlLmRhdGFbcy1uK28qcl09Yy9NYXRoLm1pbihzKzEsci0xK2EtcyxhKSl9ZnVuY3Rpb24gJGEodCxlLG4pe2Zvcih2YXIgcj10LndpZHRoLGk9dC5oZWlnaHQsYT0xKyhuPDwxKSxvPTA7bzxyOysrbylmb3IodmFyIHM9MCxjPTA7czxpK247KytzKXM8aSYmKGMrPXQuZGF0YVtvK3Mqcl0pLHM+PW4mJihzPj1hJiYoYy09dC5kYXRhW28rKHMtYSkqcl0pLGUuZGF0YVtvKyhzLW4pKnJdPWMvTWF0aC5taW4ocysxLGktMSthLXMsYSkpfWZ1bmN0aW9uIHFhKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFdhKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIEhhKCl7cmV0dXJuIDF9dmFyIFZhPWZ1bmN0aW9uKCl7dmFyIHQ9cWEsZT1XYSxuPUhhLHI9OTYwLGk9NTAwLGE9MjAsbz0yLHM9MyphLGM9cisyKnM+Pm8sdT1pKzIqcz4+byxsPUlhKDIwKTtmdW5jdGlvbiBoKHIpe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoYyp1KSxoPW5ldyBGbG9hdDMyQXJyYXkoYyp1KTtyLmZvckVhY2goKGZ1bmN0aW9uKHIsYSxsKXt2YXIgaD0rdChyLGEsbCkrcz4+byxmPStlKHIsYSxsKStzPj5vLGQ9K24ocixhLGwpO2g+PTAmJmg8YyYmZj49MCYmZjx1JiYoaVtoK2YqY10rPWQpfSkpLFVhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSxhPj5vKSwkYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aX0sYT4+byksVWEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOmh9LGE+Pm8pLCRhKHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0se3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTppfSxhPj5vKSxVYSh7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LHt3aWR0aDpjLGhlaWdodDp1LGRhdGE6aH0sYT4+byksJGEoe3dpZHRoOmMsaGVpZ2h0OnUsZGF0YTpofSx7d2lkdGg6YyxoZWlnaHQ6dSxkYXRhOml9LGE+Pm8pO3ZhciBkPWwoaSk7aWYoIUFycmF5LmlzQXJyYXkoZCkpe3ZhciBwPUkoaSk7ZD1NKDAscCxkKSwoZD13KDAsTWF0aC5mbG9vcihwL2QpKmQsZCkpLnNoaWZ0KCl9cmV0dXJuIHphKCkudGhyZXNob2xkcyhkKS5zaXplKFtjLHVdKShpKS5tYXAoZil9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC52YWx1ZSo9TWF0aC5wb3coMiwtMipvKSx0LmNvb3JkaW5hdGVzLmZvckVhY2goZCksdH1mdW5jdGlvbiBkKHQpe3QuZm9yRWFjaChwKX1mdW5jdGlvbiBwKHQpe3QuZm9yRWFjaCh5KX1mdW5jdGlvbiB5KHQpe3RbMF09dFswXSpNYXRoLnBvdygyLG8pLXMsdFsxXT10WzFdKk1hdGgucG93KDIsbyktc31mdW5jdGlvbiBnKCl7cmV0dXJuIGM9cisyKihzPTMqYSk+Pm8sdT1pKzIqcz4+byxofXJldHVybiBoLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpJYSgrZSksaCk6dH0saC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWEoK3QpLGgpOmV9LGgud2VpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6SWEoK3QpLGgpOm59LGguc2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bcixpXTt2YXIgZT1NYXRoLmNlaWwodFswXSksbj1NYXRoLmNlaWwodFsxXSk7aWYoIShlPj0wfHxlPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2l6ZSIpO3JldHVybiByPWUsaT1uLGcoKX0saC5jZWxsU2l6ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gMTw8bztpZighKCh0PSt0KT49MSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNlbGwgc2l6ZSIpO3JldHVybiBvPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLGcoKX0saC50aHJlc2hvbGRzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6QXJyYXkuaXNBcnJheSh0KT9JYShEYS5jYWxsKHQpKTpJYSh0KSxoKTpsfSxoLmJhbmR3aWR0aD1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gTWF0aC5zcXJ0KGEqKGErMSkpO2lmKCEoKHQ9K3QpPj0wKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYmFuZHdpZHRoIik7cmV0dXJuIGE9TWF0aC5yb3VuZCgoTWF0aC5zcXJ0KDQqdCp0KzEpLTEpLzIpLGcoKX0saH0sR2E9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBYYSh0LGUsbixyLGksYSxvLHMsYyx1KXt0aGlzLnRhcmdldD10LHRoaXMudHlwZT1lLHRoaXMuc3ViamVjdD1uLHRoaXMuaWRlbnRpZmllcj1yLHRoaXMuYWN0aXZlPWksdGhpcy54PWEsdGhpcy55PW8sdGhpcy5keD1zLHRoaXMuZHk9Yyx0aGlzLl89dX1mdW5jdGlvbiBaYSgpe3JldHVybiF1ZS5jdHJsS2V5JiYhdWUuYnV0dG9ufWZ1bmN0aW9uIEthKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZX1mdW5jdGlvbiBRYSh0KXtyZXR1cm4gbnVsbD09dD97eDp1ZS54LHk6dWUueX06dH1mdW5jdGlvbiBKYSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31YYS5wcm90b3R5cGUub249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl8ub24uYXBwbHkodGhpcy5fLGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT10aGlzLl8/dGhpczp0fTt2YXIgdG89ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpPVphLGE9S2Esbz1RYSxzPUphLGM9e30sdT1odCgic3RhcnQiLCJkcmFnIiwiZW5kIiksbD0wLGg9MDtmdW5jdGlvbiBmKHQpe3Qub24oIm1vdXNlZG93bi5kcmFnIixkKS5maWx0ZXIocykub24oInRvdWNoc3RhcnQuZHJhZyIsZykub24oInRvdWNobW92ZS5kcmFnIixtKS5vbigidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnIix2KS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gZCgpe2lmKCFyJiZpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIG89YigibW91c2UiLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLERuLHRoaXMsYXJndW1lbnRzKTtvJiYod2UodWUudmlldykub24oIm1vdXNlbW92ZS5kcmFnIixwLCEwKS5vbigibW91c2V1cC5kcmFnIix5LCEwKSxDZSh1ZS52aWV3KSxUZSgpLG49ITEsdD11ZS5jbGllbnRYLGU9dWUuY2xpZW50WSxvKCJzdGFydCIpKX19ZnVuY3Rpb24gcCgpe2lmKEVlKCksIW4pe3ZhciByPXVlLmNsaWVudFgtdCxpPXVlLmNsaWVudFktZTtuPXIqcitpKmk+aH1jLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24geSgpe3dlKHVlLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLFNlKHVlLnZpZXcsbiksRWUoKSxjLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBnKCl7aWYoaS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0LGUsbj11ZS5jaGFuZ2VkVG91Y2hlcyxyPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLG89bi5sZW5ndGg7Zm9yKHQ9MDt0PG87Kyt0KShlPWIoblt0XS5pZGVudGlmaWVyLHIsQm4sdGhpcyxhcmd1bWVudHMpKSYmKFRlKCksZSgic3RhcnQiKSl9fWZ1bmN0aW9uIG0oKXt2YXIgdCxlLG49dWUuY2hhbmdlZFRvdWNoZXMscj1uLmxlbmd0aDtmb3IodD0wO3Q8cjsrK3QpKGU9Y1tuW3RdLmlkZW50aWZpZXJdKSYmKEVlKCksZSgiZHJhZyIpKX1mdW5jdGlvbiB2KCl7dmFyIHQsZSxuPXVlLmNoYW5nZWRUb3VjaGVzLGk9bi5sZW5ndGg7Zm9yKHImJmNsZWFyVGltZW91dChyKSxyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cj1udWxsfSksNTAwKSx0PTA7dDxpOysrdCkoZT1jW25bdF0uaWRlbnRpZmllcl0pJiYoVGUoKSxlKCJlbmQiKSl9ZnVuY3Rpb24gYih0LGUsbixyLGkpe3ZhciBhLHMsaCxkPW4oZSx0KSxwPXUuY29weSgpO2lmKHllKG5ldyBYYShmLCJiZWZvcmVzdGFydCIsYSx0LGwsZFswXSxkWzFdLDAsMCxwKSwoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9KHVlLnN1YmplY3Q9YT1vLmFwcGx5KHIsaSkpJiYocz1hLngtZFswXXx8MCxoPWEueS1kWzFdfHwwLCEwKX0pKSlyZXR1cm4gZnVuY3Rpb24gbyh1KXt2YXIgeSxnPWQ7c3dpdGNoKHUpe2Nhc2Uic3RhcnQiOmNbdF09byx5PWwrKzticmVhaztjYXNlImVuZCI6ZGVsZXRlIGNbdF0sLS1sO2Nhc2UiZHJhZyI6ZD1uKGUsdCkseT1sfXllKG5ldyBYYShmLHUsYSx0LHksZFswXStzLGRbMV0raCxkWzBdLWdbMF0sZFsxXS1nWzFdLHApLHAuYXBwbHkscCxbdSxyLGldKX19cmV0dXJuIGYuZmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6R2EoISF0KSxmKTppfSxmLmNvbnRhaW5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKHQpLGYpOmF9LGYuc3ViamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkdhKHQpLGYpOm99LGYudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6R2EoISF0KSxmKTpzfSxmLm9uPWZ1bmN0aW9uKCl7dmFyIHQ9dS5vbi5hcHBseSh1LGFyZ3VtZW50cyk7cmV0dXJuIHQ9PT11P2Y6dH0sZi5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSh0PSt0KSp0LGYpOk1hdGguc3FydChoKX0sZn0sZW89e30sbm89e307ZnVuY3Rpb24gcm8odCl7cmV0dXJuIG5ldyBGdW5jdGlvbigiZCIsInJldHVybiB7Iit0Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK2UrJ10gfHwgIiInfSkpLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIGlvKHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCksbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIHIgaW4gdClyIGluIGV8fG4ucHVzaChlW3JdPXIpfSkpLG59ZnVuY3Rpb24gYW8odCxlKXt2YXIgbj10KyIiLHI9bi5sZW5ndGg7cmV0dXJuIHI8ZT9uZXcgQXJyYXkoZS1yKzEpLmpvaW4oMCkrbjpufWZ1bmN0aW9uIG9vKHQpe3ZhciBlLG49dC5nZXRVVENIb3VycygpLHI9dC5nZXRVVENNaW51dGVzKCksaT10LmdldFVUQ1NlY29uZHMoKSxhPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7cmV0dXJuIGlzTmFOKHQpPyJJbnZhbGlkIERhdGUiOigoZT10LmdldFVUQ0Z1bGxZZWFyKCkpPDA/Ii0iK2FvKC1lLDYpOmU+OTk5OT8iKyIrYW8oZSw2KTphbyhlLDQpKSsiLSIrYW8odC5nZXRVVENNb250aCgpKzEsMikrIi0iK2FvKHQuZ2V0VVRDRGF0ZSgpLDIpKyhhPyJUIithbyhuLDIpKyI6IithbyhyLDIpKyI6IithbyhpLDIpKyIuIithbyhhLDMpKyJaIjppPyJUIithbyhuLDIpKyI6IithbyhyLDIpKyI6IithbyhpLDIpKyJaIjpyfHxuPyJUIithbyhuLDIpKyI6IithbyhyLDIpKyJaIjoiIil9dmFyIHNvPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBSZWdFeHAoJ1siJyt0KyJcblxyXSIpLG49dC5jaGFyQ29kZUF0KDApO2Z1bmN0aW9uIHIodCxlKXt2YXIgcixpPVtdLGE9dC5sZW5ndGgsbz0wLHM9MCxjPWE8PTAsdT0hMTtmdW5jdGlvbiBsKCl7aWYoYylyZXR1cm4gbm87aWYodSlyZXR1cm4gdT0hMSxlbzt2YXIgZSxyLGk9bztpZigzND09PXQuY2hhckNvZGVBdChpKSl7Zm9yKDtvKys8YSYmMzQhPT10LmNoYXJDb2RlQXQobyl8fDM0PT09dC5jaGFyQ29kZUF0KCsrbyk7KTtyZXR1cm4oZT1vKT49YT9jPSEwOjEwPT09KHI9dC5jaGFyQ29kZUF0KG8rKykpP3U9ITA6MTM9PT1yJiYodT0hMCwxMD09PXQuY2hhckNvZGVBdChvKSYmKytvKSx0LnNsaWNlKGkrMSxlLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO288YTspe2lmKDEwPT09KHI9dC5jaGFyQ29kZUF0KGU9bysrKSkpdT0hMDtlbHNlIGlmKDEzPT09cil1PSEwLDEwPT09dC5jaGFyQ29kZUF0KG8pJiYrK287ZWxzZSBpZihyIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShpLGUpfXJldHVybiBjPSEwLHQuc2xpY2UoaSxhKX1mb3IoMTA9PT10LmNoYXJDb2RlQXQoYS0xKSYmLS1hLDEzPT09dC5jaGFyQ29kZUF0KGEtMSkmJi0tYTsocj1sKCkpIT09bm87KXtmb3IodmFyIGg9W107ciE9PWVvJiZyIT09bm87KWgucHVzaChyKSxyPWwoKTtlJiZudWxsPT0oaD1lKGgscysrKSl8fGkucHVzaChoKX1yZXR1cm4gaX1mdW5jdGlvbiBpKGUsbil7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gbi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvKGVbdF0pfSkpLmpvaW4odCl9KSl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5tYXAobykuam9pbih0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10PyIiOnQgaW5zdGFuY2VvZiBEYXRlP29vKHQpOmUudGVzdCh0Kz0iIik/JyInK3QucmVwbGFjZSgvIi9nLCciIicpKyciJzp0fXJldHVybntwYXJzZTpmdW5jdGlvbih0LGUpe3ZhciBuLGksYT1yKHQsKGZ1bmN0aW9uKHQscil7aWYobilyZXR1cm4gbih0LHItMSk7aT10LG49ZT9mdW5jdGlvbih0LGUpe3ZhciBuPXJvKHQpO3JldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBlKG4ociksaSx0KX19KHQsZSk6cm8odCl9KSk7cmV0dXJuIGEuY29sdW1ucz1pfHxbXSxhfSxwYXJzZVJvd3M6cixmb3JtYXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbnVsbD09biYmKG49aW8oZSkpLFtuLm1hcChvKS5qb2luKHQpXS5jb25jYXQoaShlLG4pKS5qb2luKCJcbiIpfSxmb3JtYXRCb2R5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWUmJihlPWlvKHQpKSxpKHQsZSkuam9pbigiXG4iKX0sZm9ybWF0Um93czpmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoYSkuam9pbigiXG4iKX0sZm9ybWF0Um93OmEsZm9ybWF0VmFsdWU6b319LGNvPXNvKCIsIiksdW89Y28ucGFyc2UsbG89Y28ucGFyc2VSb3dzLGhvPWNvLmZvcm1hdCxmbz1jby5mb3JtYXRCb2R5LHBvPWNvLmZvcm1hdFJvd3MseW89Y28uZm9ybWF0Um93LGdvPWNvLmZvcm1hdFZhbHVlLG1vPXNvKCJcdCIpLHZvPW1vLnBhcnNlLGJvPW1vLnBhcnNlUm93cyx4bz1tby5mb3JtYXQsX289bW8uZm9ybWF0Qm9keSxrbz1tby5mb3JtYXRSb3dzLHdvPW1vLmZvcm1hdFJvdyxUbz1tby5mb3JtYXRWYWx1ZTtmdW5jdGlvbiBFbyh0KXtmb3IodmFyIGUgaW4gdCl7dmFyIG4scixpPXRbZV0udHJpbSgpO2lmKGkpaWYoInRydWUiPT09aSlpPSEwO2Vsc2UgaWYoImZhbHNlIj09PWkpaT0hMTtlbHNlIGlmKCJOYU4iPT09aSlpPU5hTjtlbHNlIGlmKGlzTmFOKG49K2kpKXtpZighKHI9aS5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKSljb250aW51ZTtDbyYmcls0XSYmIXJbN10mJihpPWkucmVwbGFjZSgvLS9nLCIvIikucmVwbGFjZSgvVC8sIiAiKSksaT1uZXcgRGF0ZShpKX1lbHNlIGk9bjtlbHNlIGk9bnVsbDt0W2VdPWl9cmV0dXJuIHR9dmFyIENvPW5ldyBEYXRlKCIyMDE5LTAxLTAxVDAwOjAwIikuZ2V0SG91cnMoKXx8bmV3IERhdGUoIjIwMTktMDctMDFUMDA6MDAiKS5nZXRIb3VycygpO2Z1bmN0aW9uIFNvKHQpe3JldHVybit0fWZ1bmN0aW9uIEFvKHQpe3JldHVybiB0KnR9ZnVuY3Rpb24gTW8odCl7cmV0dXJuIHQqKDItdCl9ZnVuY3Rpb24gT28odCl7cmV0dXJuKCh0Kj0yKTw9MT90KnQ6LS10KigyLXQpKzEpLzJ9dmFyIE5vPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksQm89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiAxLU1hdGgucG93KDEtdCxlKX1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksRG89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybigodCo9Mik8PTE/TWF0aC5wb3codCxlKToyLU1hdGgucG93KDItdCxlKSkvMn1yZXR1cm4gZT0rZSxuLmV4cG9uZW50PXQsbn0oMyksTG89TWF0aC5QSSxJbz1Mby8yO2Z1bmN0aW9uIFJvKHQpe3JldHVybiAxPT0rdD8xOjEtTWF0aC5jb3ModCpJbyl9ZnVuY3Rpb24gRm8odCl7cmV0dXJuIE1hdGguc2luKHQqSW8pfWZ1bmN0aW9uIFBvKHQpe3JldHVybigxLU1hdGguY29zKExvKnQpKS8yfWZ1bmN0aW9uIGpvKHQpe3JldHVybiAxLjAwMDk3NzUxNzEwNjU0OTQqKE1hdGgucG93KDIsLTEwKnQpLS4wMDA5NzY1NjI1KX1mdW5jdGlvbiBZbyh0KXtyZXR1cm4gam8oMS0rdCl9ZnVuY3Rpb24gem8odCl7cmV0dXJuIDEtam8odCl9ZnVuY3Rpb24gVW8odCl7cmV0dXJuKCh0Kj0yKTw9MT9qbygxLXQpOjItam8odC0xKSkvMn1mdW5jdGlvbiAkbyh0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIHFvKHQpe3JldHVybiBNYXRoLnNxcnQoMS0gLS10KnQpfWZ1bmN0aW9uIFdvKHQpe3JldHVybigodCo9Mik8PTE/MS1NYXRoLnNxcnQoMS10KnQpOk1hdGguc3FydCgxLSh0LT0yKSp0KSsxKS8yfWZ1bmN0aW9uIEhvKHQpe3JldHVybiAxLVZvKDEtdCl9ZnVuY3Rpb24gVm8odCl7cmV0dXJuKHQ9K3QpPDQvMTE/Ny41NjI1KnQqdDp0PDgvMTE/Ny41NjI1Kih0LT02LzExKSp0KzMvNDp0PDEwLzExPzcuNTYyNSoodC09OS8xMSkqdCsxNS8xNjo3LjU2MjUqKHQtPTIxLzIyKSp0KzYzLzY0fWZ1bmN0aW9uIEdvKHQpe3JldHVybigodCo9Mik8PTE/MS1WbygxLXQpOlZvKHQtMSkrMSkvMn12YXIgWG89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybih0PSt0KSp0KihlKih0LTEpK3QpfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksWm89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybi0tdCp0KigodCsxKSplK3QpKzF9cmV0dXJuIGU9K2Usbi5vdmVyc2hvb3Q9dCxufSgxLjcwMTU4KSxLbz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuKCh0Kj0yKTwxP3QqdCooKGUrMSkqdC1lKToodC09MikqdCooKGUrMSkqdCtlKSsyKS8yfXJldHVybiBlPStlLG4ub3ZlcnNob290PXQsbn0oMS43MDE1OCksUW89MipNYXRoLlBJLEpvPWZ1bmN0aW9uIHQoZSxuKXt2YXIgcj1NYXRoLmFzaW4oMS8oZT1NYXRoLm1heCgxLGUpKSkqKG4vPVFvKTtmdW5jdGlvbiBpKHQpe3JldHVybiBlKmpvKC0gLS10KSpNYXRoLnNpbigoci10KS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKlFvKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksdHM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89UW8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIDEtZSpqbyh0PSt0KSpNYXRoLnNpbigodCtyKS9uKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKlFvKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyksZXM9ZnVuY3Rpb24gdChlLG4pe3ZhciByPU1hdGguYXNpbigxLyhlPU1hdGgubWF4KDEsZSkpKSoobi89UW8pO2Z1bmN0aW9uIGkodCl7cmV0dXJuKCh0PTIqdC0xKTwwP2Uqam8oLXQpKk1hdGguc2luKChyLXQpL24pOjItZSpqbyh0KSpNYXRoLnNpbigocit0KS9uKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSxuKlFvKX0saS5wZXJpb2Q9ZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKX0saX0oMSwuMyk7ZnVuY3Rpb24gbnModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmJsb2IoKX12YXIgcnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmV0Y2godCxlKS50aGVuKG5zKX07ZnVuY3Rpb24gaXModCl7aWYoIXQub2spdGhyb3cgbmV3IEVycm9yKHQuc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3JldHVybiB0LmFycmF5QnVmZmVyKCl9dmFyIGFzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihpcyl9O2Z1bmN0aW9uIG9zKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtyZXR1cm4gdC50ZXh0KCl9dmFyIHNzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZldGNoKHQsZSkudGhlbihvcyl9O2Z1bmN0aW9uIGNzKHQpe3JldHVybiBmdW5jdGlvbihlLG4scil7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHI9bixuPXZvaWQgMCksc3MoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gdChlLHIpfSkpfX1mdW5jdGlvbiB1cyh0LGUsbixyKXszPT09YXJndW1lbnRzLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIG4mJihyPW4sbj12b2lkIDApO3ZhciBpPXNvKHQpO3JldHVybiBzcyhlLG4pLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLnBhcnNlKHQscil9KSl9dmFyIGxzPWNzKHVvKSxocz1jcyh2byksZnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4scil7dmFyIGk9bmV3IEltYWdlO2Zvcih2YXIgYSBpbiBlKWlbYV09ZVthXTtpLm9uZXJyb3I9cixpLm9ubG9hZD1mdW5jdGlvbigpe24oaSl9LGkuc3JjPXR9KSl9O2Z1bmN0aW9uIGRzKHQpe2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcih0LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0KTtpZigyMDQhPT10LnN0YXR1cyYmMjA1IT09dC5zdGF0dXMpcmV0dXJuIHQuanNvbigpfXZhciBwcz1mdW5jdGlvbih0LGUpe3JldHVybiBmZXRjaCh0LGUpLnRoZW4oZHMpfTtmdW5jdGlvbiB5cyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXtyZXR1cm4gc3MoZSxuKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsdCl9KSl9fXZhciBncz15cygiYXBwbGljYXRpb24veG1sIiksbXM9eXMoInRleHQvaHRtbCIpLHZzPXlzKCJpbWFnZS9zdmcreG1sIiksYnM9ZnVuY3Rpb24odCxlKXt2YXIgbjtmdW5jdGlvbiByKCl7dmFyIHIsaSxhPW4ubGVuZ3RoLG89MCxzPTA7Zm9yKHI9MDtyPGE7KytyKW8rPShpPW5bcl0pLngscys9aS55O2ZvcihvPW8vYS10LHM9cy9hLWUscj0wO3I8YTsrK3IpKGk9bltyXSkueC09byxpLnktPXN9cmV0dXJuIG51bGw9PXQmJih0PTApLG51bGw9PWUmJihlPTApLHIuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXR9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscik6ZX0scn0seHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fSxfcz1mdW5jdGlvbigpe3JldHVybiAxZS02KihNYXRoLnJhbmRvbSgpLS41KX07ZnVuY3Rpb24ga3ModCxlLG4scil7aWYoaXNOYU4oZSl8fGlzTmFOKG4pKXJldHVybiB0O3ZhciBpLGEsbyxzLGMsdSxsLGgsZixkPXQuX3Jvb3QscD17ZGF0YTpyfSx5PXQuX3gwLGc9dC5feTAsbT10Ll94MSx2PXQuX3kxO2lmKCFkKXJldHVybiB0Ll9yb290PXAsdDtmb3IoO2QubGVuZ3RoOylpZigodT1lPj0oYT0oeSttKS8yKSk/eT1hOm09YSwobD1uPj0obz0oZyt2KS8yKSk/Zz1vOnY9byxpPWQsIShkPWRbaD1sPDwxfHVdKSlyZXR1cm4gaVtoXT1wLHQ7aWYocz0rdC5feC5jYWxsKG51bGwsZC5kYXRhKSxjPSt0Ll95LmNhbGwobnVsbCxkLmRhdGEpLGU9PT1zJiZuPT09YylyZXR1cm4gcC5uZXh0PWQsaT9pW2hdPXA6dC5fcm9vdD1wLHQ7ZG97aT1pP2lbaF09bmV3IEFycmF5KDQpOnQuX3Jvb3Q9bmV3IEFycmF5KDQpLCh1PWU+PShhPSh5K20pLzIpKT95PWE6bT1hLChsPW4+PShvPShnK3YpLzIpKT9nPW86dj1vfXdoaWxlKChoPWw8PDF8dSk9PShmPShjPj1vKTw8MXxzPj1hKSk7cmV0dXJuIGlbZl09ZCxpW2hdPXAsdH12YXIgd3M9ZnVuY3Rpb24odCxlLG4scixpKXt0aGlzLm5vZGU9dCx0aGlzLngwPWUsdGhpcy55MD1uLHRoaXMueDE9cix0aGlzLnkxPWl9O2Z1bmN0aW9uIFRzKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIEVzKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIENzKHQsZSxuKXt2YXIgcj1uZXcgU3MobnVsbD09ZT9UczplLG51bGw9PW4/RXM6bixOYU4sTmFOLE5hTixOYU4pO3JldHVybiBudWxsPT10P3I6ci5hZGRBbGwodCl9ZnVuY3Rpb24gU3ModCxlLG4scixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9bix0aGlzLl95MD1yLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBBcyh0KXtmb3IodmFyIGU9e2RhdGE6dC5kYXRhfSxuPWU7dD10Lm5leHQ7KW49bi5uZXh0PXtkYXRhOnQuZGF0YX07cmV0dXJuIGV9dmFyIE1zPUNzLnByb3RvdHlwZT1Tcy5wcm90b3R5cGU7ZnVuY3Rpb24gT3ModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIE5zKHQpe3JldHVybiB0LnkrdC52eX1Ncy5jb3B5PWZ1bmN0aW9uKCl7dmFyIHQsZSxuPW5ldyBTcyh0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHI9dGhpcy5fcm9vdDtpZighcilyZXR1cm4gbjtpZighci5sZW5ndGgpcmV0dXJuIG4uX3Jvb3Q9QXMociksbjtmb3IodD1be3NvdXJjZTpyLHRhcmdldDpuLl9yb290PW5ldyBBcnJheSg0KX1dO3I9dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1yLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpyLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpyLnRhcmdldFtpXT1BcyhlKSk7cmV0dXJuIG59LE1zLmFkZD1mdW5jdGlvbih0KXt2YXIgZT0rdGhpcy5feC5jYWxsKG51bGwsdCksbj0rdGhpcy5feS5jYWxsKG51bGwsdCk7cmV0dXJuIGtzKHRoaXMuY292ZXIoZSxuKSxlLG4sdCl9LE1zLmFkZEFsbD1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9bmV3IEFycmF5KGEpLGM9MS8wLHU9MS8wLGw9LTEvMCxoPS0xLzA7Zm9yKG49MDtuPGE7KytuKWlzTmFOKHI9K3RoaXMuX3guY2FsbChudWxsLGU9dFtuXSkpfHxpc05hTihpPSt0aGlzLl95LmNhbGwobnVsbCxlKSl8fChvW25dPXIsc1tuXT1pLHI8YyYmKGM9cikscj5sJiYobD1yKSxpPHUmJih1PWkpLGk+aCYmKGg9aSkpO2lmKGM+bHx8dT5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGMsdSkuY292ZXIobCxoKSxuPTA7bjxhOysrbilrcyh0aGlzLG9bbl0sc1tuXSx0W25dKTtyZXR1cm4gdGhpc30sTXMuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5feDAscj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4obikpaT0obj1NYXRoLmZsb29yKHQpKSsxLGE9KHI9TWF0aC5mbG9vcihlKSkrMTtlbHNle2Zvcih2YXIgbyxzLGM9aS1uLHU9dGhpcy5fcm9vdDtuPnR8fHQ+PWl8fHI+ZXx8ZT49YTspc3dpdGNoKHM9KGU8cik8PDF8dDxuLChvPW5ldyBBcnJheSg0KSlbc109dSx1PW8sYyo9MixzKXtjYXNlIDA6aT1uK2MsYT1yK2M7YnJlYWs7Y2FzZSAxOm49aS1jLGE9citjO2JyZWFrO2Nhc2UgMjppPW4rYyxyPWEtYzticmVhaztjYXNlIDM6bj1pLWMscj1hLWN9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PXUpfXJldHVybiB0aGlzLl94MD1uLHRoaXMuX3kwPXIsdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LE1zLmRhdGE9ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy52aXNpdCgoZnVuY3Rpb24oZSl7aWYoIWUubGVuZ3RoKWRve3QucHVzaChlLmRhdGEpfXdoaWxlKGU9ZS5uZXh0KX0pKSx0fSxNcy5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jb3ZlcigrdFswXVswXSwrdFswXVsxXSkuY292ZXIoK3RbMV1bMF0sK3RbMV1bMV0pOmlzTmFOKHRoaXMuX3gwKT92b2lkIDA6W1t0aGlzLl94MCx0aGlzLl95MF0sW3RoaXMuX3gxLHRoaXMuX3kxXV19LE1zLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvLHMsYyx1LGw9dGhpcy5feDAsaD10aGlzLl95MCxmPXRoaXMuX3gxLGQ9dGhpcy5feTEscD1bXSx5PXRoaXMuX3Jvb3Q7Zm9yKHkmJnAucHVzaChuZXcgd3MoeSxsLGgsZixkKSksbnVsbD09bj9uPTEvMDoobD10LW4saD1lLW4sZj10K24sZD1lK24sbio9bik7Yz1wLnBvcCgpOylpZighKCEoeT1jLm5vZGUpfHwoaT1jLngwKT5mfHwoYT1jLnkwKT5kfHwobz1jLngxKTxsfHwocz1jLnkxKTxoKSlpZih5Lmxlbmd0aCl7dmFyIGc9KGkrbykvMixtPShhK3MpLzI7cC5wdXNoKG5ldyB3cyh5WzNdLGcsbSxvLHMpLG5ldyB3cyh5WzJdLGksbSxnLHMpLG5ldyB3cyh5WzFdLGcsYSxvLG0pLG5ldyB3cyh5WzBdLGksYSxnLG0pKSwodT0oZT49bSk8PDF8dD49ZykmJihjPXBbcC5sZW5ndGgtMV0scFtwLmxlbmd0aC0xXT1wW3AubGVuZ3RoLTEtdV0scFtwLmxlbmd0aC0xLXVdPWMpfWVsc2V7dmFyIHY9dC0rdGhpcy5feC5jYWxsKG51bGwseS5kYXRhKSxiPWUtK3RoaXMuX3kuY2FsbChudWxsLHkuZGF0YSkseD12KnYrYipiO2lmKHg8bil7dmFyIF89TWF0aC5zcXJ0KG49eCk7bD10LV8saD1lLV8sZj10K18sZD1lK18scj15LmRhdGF9fXJldHVybiByfSxNcy5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaCxmLGQ9dGhpcy5fcm9vdCxwPXRoaXMuX3gwLHk9dGhpcy5feTAsZz10aGlzLl94MSxtPXRoaXMuX3kxO2lmKCFkKXJldHVybiB0aGlzO2lmKGQubGVuZ3RoKWZvcig7Oyl7aWYoKHU9YT49KHM9KHArZykvMikpP3A9czpnPXMsKGw9bz49KGM9KHkrbSkvMikpP3k9YzptPWMsZT1kLCEoZD1kW2g9bDw8MXx1XSkpcmV0dXJuIHRoaXM7aWYoIWQubGVuZ3RoKWJyZWFrOyhlW2grMSYzXXx8ZVtoKzImM118fGVbaCszJjNdKSYmKG49ZSxmPWgpfWZvcig7ZC5kYXRhIT09dDspaWYocj1kLCEoZD1kLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPWQubmV4dCkmJmRlbGV0ZSBkLm5leHQscj8oaT9yLm5leHQ9aTpkZWxldGUgci5uZXh0LHRoaXMpOmU/KGk/ZVtoXT1pOmRlbGV0ZSBlW2hdLChkPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZkPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhZC5sZW5ndGgmJihuP25bZl09ZDp0aGlzLl9yb290PWQpLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LE1zLnJlbW92ZUFsbD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxuPXQubGVuZ3RoO2U8bjsrK2UpdGhpcy5yZW1vdmUodFtlXSk7cmV0dXJuIHRoaXN9LE1zLnJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sTXMuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LE1zLnZpc2l0PWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbyxzPVtdLGM9dGhpcy5fcm9vdDtmb3IoYyYmcy5wdXNoKG5ldyB3cyhjLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1zLnBvcCgpOylpZighdChjPWUubm9kZSxyPWUueDAsaT1lLnkwLGE9ZS54MSxvPWUueTEpJiZjLmxlbmd0aCl7dmFyIHU9KHIrYSkvMixsPShpK28pLzI7KG49Y1szXSkmJnMucHVzaChuZXcgd3Mobix1LGwsYSxvKSksKG49Y1syXSkmJnMucHVzaChuZXcgd3MobixyLGwsdSxvKSksKG49Y1sxXSkmJnMucHVzaChuZXcgd3Mobix1LGksYSxsKSksKG49Y1swXSkmJnMucHVzaChuZXcgd3MobixyLGksdSxsKSl9cmV0dXJuIHRoaXN9LE1zLnZpc2l0QWZ0ZXI9ZnVuY3Rpb24odCl7dmFyIGUsbj1bXSxyPVtdO2Zvcih0aGlzLl9yb290JiZuLnB1c2gobmV3IHdzKHRoaXMuX3Jvb3QsdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpKTtlPW4ucG9wKCk7KXt2YXIgaT1lLm5vZGU7aWYoaS5sZW5ndGgpe3ZhciBhLG89ZS54MCxzPWUueTAsYz1lLngxLHU9ZS55MSxsPShvK2MpLzIsaD0ocyt1KS8yOyhhPWlbMF0pJiZuLnB1c2gobmV3IHdzKGEsbyxzLGwsaCkpLChhPWlbMV0pJiZuLnB1c2gobmV3IHdzKGEsbCxzLGMsaCkpLChhPWlbMl0pJiZuLnB1c2gobmV3IHdzKGEsbyxoLGwsdSkpLChhPWlbM10pJiZuLnB1c2gobmV3IHdzKGEsbCxoLGMsdSkpfXIucHVzaChlKX1mb3IoO2U9ci5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LE1zLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9dCx0aGlzKTp0aGlzLl94fSxNcy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLl95PXQsdGhpcyk6dGhpcy5feX07dmFyIEJzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj0xLGk9MTtmdW5jdGlvbiBhKCl7Zm9yKHZhciB0LGEscyxjLHUsbCxoLGY9ZS5sZW5ndGgsZD0wO2Q8aTsrK2QpZm9yKGE9Q3MoZSxPcyxOcykudmlzaXRBZnRlcihvKSx0PTA7dDxmOysrdClzPWVbdF0sbD1uW3MuaW5kZXhdLGg9bCpsLGM9cy54K3MudngsdT1zLnkrcy52eSxhLnZpc2l0KHApO2Z1bmN0aW9uIHAodCxlLG4saSxhKXt2YXIgbz10LmRhdGEsZj10LnIsZD1sK2Y7aWYoIW8pcmV0dXJuIGU+YytkfHxpPGMtZHx8bj51K2R8fGE8dS1kO2lmKG8uaW5kZXg+cy5pbmRleCl7dmFyIHA9Yy1vLngtby52eCx5PXUtby55LW8udnksZz1wKnAreSp5O2c8ZCpkJiYoMD09PXAmJihnKz0ocD1fcygpKSpwKSwwPT09eSYmKGcrPSh5PV9zKCkpKnkpLGc9KGQtKGc9TWF0aC5zcXJ0KGcpKSkvZypyLHMudngrPShwKj1nKSooZD0oZio9ZikvKGgrZikpLHMudnkrPSh5Kj1nKSpkLG8udngtPXAqKGQ9MS1kKSxvLnZ5LT15KmQpfX19ZnVuY3Rpb24gbyh0KXtpZih0LmRhdGEpcmV0dXJuIHQucj1uW3QuZGF0YS5pbmRleF07Zm9yKHZhciBlPXQucj0wO2U8NDsrK2UpdFtlXSYmdFtlXS5yPnQuciYmKHQucj10W2VdLnIpfWZ1bmN0aW9uIHMoKXtpZihlKXt2YXIgcixpLGE9ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGEpLHI9MDtyPGE7KytyKWk9ZVtyXSxuW2kuaW5kZXhdPSt0KGkscixlKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXhzKG51bGw9PXQ/MTordCkpLGEuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxhLml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K3QsYSk6aX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxhKTpyfSxhLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnhzKCtlKSxzKCksYSk6dH0sYX07ZnVuY3Rpb24gRHModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gTHModCxlKXt2YXIgbj10LmdldChlKTtpZighbil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIG59dmFyIElzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbz1EcyxzPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKGlbdC5zb3VyY2UuaW5kZXhdLGlbdC50YXJnZXQuaW5kZXhdKX0sYz14cygzMCksdT0xO2Z1bmN0aW9uIGwocil7Zm9yKHZhciBpPTAsbz10Lmxlbmd0aDtpPHU7KytpKWZvcih2YXIgcyxjLGwsaCxmLGQscCx5PTA7eTxvOysreSljPShzPXRbeV0pLnNvdXJjZSxoPShsPXMudGFyZ2V0KS54K2wudngtYy54LWMudnh8fF9zKCksZj1sLnkrbC52eS1jLnktYy52eXx8X3MoKSxoKj1kPSgoZD1NYXRoLnNxcnQoaCpoK2YqZikpLW5beV0pL2QqciplW3ldLGYqPWQsbC52eC09aCoocD1hW3ldKSxsLnZ5LT1mKnAsYy52eCs9aCoocD0xLXApLGMudnkrPWYqcH1mdW5jdGlvbiBoKCl7aWYocil7dmFyIHMsYyx1PXIubGVuZ3RoLGw9dC5sZW5ndGgsaD1RaShyLG8pO2ZvcihzPTAsaT1uZXcgQXJyYXkodSk7czxsOysrcykoYz10W3NdKS5pbmRleD1zLCJvYmplY3QiIT10eXBlb2YgYy5zb3VyY2UmJihjLnNvdXJjZT1McyhoLGMuc291cmNlKSksIm9iamVjdCIhPXR5cGVvZiBjLnRhcmdldCYmKGMudGFyZ2V0PUxzKGgsYy50YXJnZXQpKSxpW2Muc291cmNlLmluZGV4XT0oaVtjLnNvdXJjZS5pbmRleF18fDApKzEsaVtjLnRhcmdldC5pbmRleF09KGlbYy50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihzPTAsYT1uZXcgQXJyYXkobCk7czxsOysrcyljPXRbc10sYVtzXT1pW2Muc291cmNlLmluZGV4XS8oaVtjLnNvdXJjZS5pbmRleF0raVtjLnRhcmdldC5pbmRleF0pO2U9bmV3IEFycmF5KGwpLGYoKSxuPW5ldyBBcnJheShsKSxkKCl9fWZ1bmN0aW9uIGYoKXtpZihyKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOysrbillW25dPStzKHRbbl0sbix0KX1mdW5jdGlvbiBkKCl7aWYocilmb3IodmFyIGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpbltlXT0rYyh0W2VdLGUsdCl9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxsLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10LGgoKX0sbC5saW5rcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGgoKSxsKTp0fSxsLmlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LGwpOnV9LGwuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksZigpLGwpOnN9LGwuZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksZCgpLGwpOmN9LGx9O2Z1bmN0aW9uIFJzKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gRnModCl7cmV0dXJuIHQueX12YXIgUHM9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpLGpzPWZ1bmN0aW9uKHQpe3ZhciBlLG49MSxyPS4wMDEsaT0xLU1hdGgucG93KHIsMS8zMDApLGE9MCxvPS42LHM9UWkoKSxjPVduKGwpLHU9aHQoInRpY2siLCJlbmQiKTtmdW5jdGlvbiBsKCl7aCgpLHUuY2FsbCgidGljayIsZSksbjxyJiYoYy5zdG9wKCksdS5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBoKHIpe3ZhciBjLHUsbD10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGg9MDtoPHI7KytoKWZvcihuKz0oYS1uKSppLHMuZWFjaCgoZnVuY3Rpb24odCl7dChuKX0pKSxjPTA7YzxsOysrYyludWxsPT0odT10W2NdKS5meD91LngrPXUudngqPW86KHUueD11LmZ4LHUudng9MCksbnVsbD09dS5meT91LnkrPXUudnkqPW86KHUueT11LmZ5LHUudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZigpe2Zvcih2YXIgZSxuPTAscj10Lmxlbmd0aDtuPHI7KytuKXtpZigoZT10W25dKS5pbmRleD1uLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQobiksYT1uKlBzO2UueD1pKk1hdGguY29zKGEpLGUueT1pKk1hdGguc2luKGEpfShpc05hTihlLnZ4KXx8aXNOYU4oZS52eSkpJiYoZS52eD1lLnZ5PTApfX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmluaXRpYWxpemUmJmUuaW5pdGlhbGl6ZSh0KSxlfXJldHVybiBudWxsPT10JiYodD1bXSksZigpLGU9e3RpY2s6aCxyZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIGMucmVzdGFydChsKSxlfSxzdG9wOmZ1bmN0aW9uKCl7cmV0dXJuIGMuc3RvcCgpLGV9LG5vZGVzOmZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZigpLHMuZWFjaChkKSxlKTp0fSxhbHBoYTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxlKTpufSxhbHBoYU1pbjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxlKTpyfSxhbHBoYURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LGUpOitpfSxhbHBoYVRhcmdldDpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rdCxlKTphfSx2ZWxvY2l0eURlY2F5OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPTEtdCxlKToxLW99LGZvcmNlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8obnVsbD09bj9zLnJlbW92ZSh0KTpzLnNldCh0LGQobikpLGUpOnMuZ2V0KHQpfSxmaW5kOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxhLG8scyxjLHU9MCxsPXQubGVuZ3RoO2ZvcihudWxsPT1yP3I9MS8wOnIqPXIsdT0wO3U8bDsrK3UpKG89KGk9ZS0ocz10W3VdKS54KSppKyhhPW4tcy55KSphKTxyJiYoYz1zLHI9byk7cmV0dXJuIGN9LG9uOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT8odS5vbih0LG4pLGUpOnUub24odCl9fX0sWXM9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpPXhzKC0zMCksYT0xLG89MS8wLHM9LjgxO2Z1bmN0aW9uIGMocil7dmFyIGksYT10Lmxlbmd0aCxvPUNzKHQsUnMsRnMpLnZpc2l0QWZ0ZXIobCk7Zm9yKG49cixpPTA7aTxhOysraSllPXRbaV0sby52aXNpdChoKX1mdW5jdGlvbiB1KCl7aWYodCl7dmFyIGUsbixhPXQubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSluPXRbZV0scltuLmluZGV4XT0raShuLGUsdCl9fWZ1bmN0aW9uIGwodCl7dmFyIGUsbixpLGEsbyxzPTAsYz0wO2lmKHQubGVuZ3RoKXtmb3IoaT1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYobj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGMrPW4saSs9biplLngsYSs9biplLnkpO3QueD1pL2MsdC55PWEvY31lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPXJbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGgodCxpLGMsdSl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGw9dC54LWUueCxoPXQueS1lLnksZj11LWksZD1sKmwraCpoO2lmKGYqZi9zPGQpcmV0dXJuIGQ8byYmKDA9PT1sJiYoZCs9KGw9X3MoKSkqbCksMD09PWgmJihkKz0oaD1fcygpKSpoKSxkPGEmJihkPU1hdGguc3FydChhKmQpKSxlLnZ4Kz1sKnQudmFsdWUqbi9kLGUudnkrPWgqdC52YWx1ZSpuL2QpLCEwO2lmKCEodC5sZW5ndGh8fGQ+PW8pKXsodC5kYXRhIT09ZXx8dC5uZXh0KSYmKDA9PT1sJiYoZCs9KGw9X3MoKSkqbCksMD09PWgmJihkKz0oaD1fcygpKSpoKSxkPGEmJihkPU1hdGguc3FydChhKmQpKSk7ZG97dC5kYXRhIT09ZSYmKGY9clt0LmRhdGEuaW5kZXhdKm4vZCxlLnZ4Kz1sKmYsZS52eSs9aCpmKX13aGlsZSh0PXQubmV4dCl9fXJldHVybiBjLmluaXRpYWxpemU9ZnVuY3Rpb24oZSl7dD1lLHUoKX0sYy5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnhzKCt0KSx1KCksYyk6aX0sYy5kaXN0YW5jZU1pbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10KnQsYyk6TWF0aC5zcXJ0KGEpfSxjLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQqdCxjKTpNYXRoLnNxcnQobyl9LGMudGhldGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCp0LGMpOk1hdGguc3FydChzKX0sY30senM9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXhzKC4xKTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgbz0wLHM9ci5sZW5ndGg7bzxzOysrbyl7dmFyIGM9cltvXSx1PWMueC1lfHwxZS02LGw9Yy55LW58fDFlLTYsaD1NYXRoLnNxcnQodSp1K2wqbCksZj0oYVtvXS1oKSppW29dKnQvaDtjLnZ4Kz11KmYsYy52eSs9bCpmfX1mdW5jdGlvbiBjKCl7aWYocil7dmFyIGUsbj1yLmxlbmd0aDtmb3IoaT1uZXcgQXJyYXkobiksYT1uZXcgQXJyYXkobiksZT0wO2U8bjsrK2UpYVtlXT0rdChyW2VdLGUsciksaVtlXT1pc05hTihhW2VdKT8wOitvKHJbZV0sZSxyKX19cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXhzKCt0KSksbnVsbD09ZSYmKGU9MCksbnVsbD09biYmKG49MCkscy5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe3I9dCxjKCl9LHMuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksYygpLHMpOm99LHMucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eHMoK2UpLGMoKSxzKTp0fSxzLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3Qscyk6ZX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHMpOm59LHN9LFVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4scixpPXhzKC4xKTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oclthXS1pLngpKm5bYV0qdH1mdW5jdGlvbiBvKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobykscj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpblthXT1pc05hTihyW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD14cyhudWxsPT10PzA6K3QpKSxhLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7ZT10LG8oKX0sYS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnhzKCt0KSxvKCksYSk6aX0sYS54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6eHMoK2UpLG8oKSxhKTp0fSxhfSwkcz1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaT14cyguMSk7ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGksYT0wLG89ZS5sZW5ndGg7YTxvOysrYSkoaT1lW2FdKS52eSs9KHJbYV0taS55KSpuW2FdKnR9ZnVuY3Rpb24gbygpe2lmKGUpe3ZhciBhLG89ZS5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KG8pLHI9bmV3IEFycmF5KG8pLGE9MDthPG87KythKW5bYV09aXNOYU4oclthXT0rdChlW2FdLGEsZSkpPzA6K2koZVthXSxhLGUpfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9eHMobnVsbD09dD8wOit0KSksYS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2U9dCxvKCl9LGEuc3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDp4cygrdCksbygpLGEpOml9LGEueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnhzKCtlKSxvKCksYSk6dH0sYX07ZnVuY3Rpb24gcXModCxlKXtpZigobj0odD1lP3QudG9FeHBvbmVudGlhbChlLTEpOnQudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIG4scj10LnNsaWNlKDAsbik7cmV0dXJuW3IubGVuZ3RoPjE/clswXStyLnNsaWNlKDIpOnIsK3Quc2xpY2UobisxKV19dmFyIFdzPWZ1bmN0aW9uKHQpe3JldHVybih0PXFzKE1hdGguYWJzKHQpKSk/dFsxXTpOYU59LEhzPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIFZzKHQpe2lmKCEoZT1Icy5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgR3Moe2ZpbGw6ZVsxXSxhbGlnbjplWzJdLHNpZ246ZVszXSxzeW1ib2w6ZVs0XSx6ZXJvOmVbNV0sd2lkdGg6ZVs2XSxjb21tYTplWzddLHByZWNpc2lvbjplWzhdJiZlWzhdLnNsaWNlKDEpLHRyaW06ZVs5XSx0eXBlOmVbMTBdfSl9ZnVuY3Rpb24gR3ModCl7dGhpcy5maWxsPXZvaWQgMD09PXQuZmlsbD8iICI6dC5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09dC5hbGlnbj8iPiI6dC5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09dC5zaWduPyItIjp0LnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09dC5zeW1ib2w/IiI6dC5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhdC56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09dC53aWR0aD92b2lkIDA6K3Qud2lkdGgsdGhpcy5jb21tYT0hIXQuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09dC5wcmVjaXNpb24/dm9pZCAwOit0LnByZWNpc2lvbix0aGlzLnRyaW09ISF0LnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PXQudHlwZT8iIjp0LnR5cGUrIiJ9VnMucHJvdG90eXBlPUdzLnByb3RvdHlwZSxHcy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgWHMsWnMsS3MsUXMsSnM9ZnVuY3Rpb24odCxlKXt2YXIgbj1xcyh0LGUpO2lmKCFuKXJldHVybiB0KyIiO3ZhciByPW5bMF0saT1uWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStyOnIubGVuZ3RoPmkrMT9yLnNsaWNlKDAsaSsxKSsiLiIrci5zbGljZShpKzEpOnIrbmV3IEFycmF5KGktci5sZW5ndGgrMikuam9pbigiMCIpfSx0Yz17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSnMoMTAwKnQsZSl9LHI6SnMsczpmdW5jdGlvbih0LGUpe3ZhciBuPXFzKHQsZSk7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIHI9blswXSxpPW5bMV0sYT1pLShYcz0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkpKzEsbz1yLmxlbmd0aDtyZXR1cm4gYT09PW8/cjphPm8/cituZXcgQXJyYXkoYS1vKzEpLmpvaW4oIjAiKTphPjA/ci5zbGljZSgwLGEpKyIuIityLnNsaWNlKGEpOiIwLiIrbmV3IEFycmF5KDEtYSkuam9pbigiMCIpK3FzKHQsTWF0aC5tYXgoMCxlK2EtMSkpWzBdfSxYOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDE2KX19LGVjPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxuYz1BcnJheS5wcm90b3R5cGUubWFwLHJjPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiwrUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXSxpYz1mdW5jdGlvbih0KXt2YXIgZSxuLHI9dm9pZCAwPT09dC5ncm91cGluZ3x8dm9pZCAwPT09dC50aG91c2FuZHM/ZWM6KGU9bmMuY2FsbCh0Lmdyb3VwaW5nLE51bWJlciksbj10LnRob3VzYW5kcysiIixmdW5jdGlvbih0LHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPVtdLG89MCxzPWVbMF0sYz0wO2k+MCYmcz4wJiYoYytzKzE+ciYmKHM9TWF0aC5tYXgoMSxyLWMpKSxhLnB1c2godC5zdWJzdHJpbmcoaS09cyxpK3MpKSwhKChjKz1zKzEpPnIpKTspcz1lW289KG8rMSklZS5sZW5ndGhdO3JldHVybiBhLnJldmVyc2UoKS5qb2luKG4pfSksaT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMF0rIiIsYT12b2lkIDA9PT10LmN1cnJlbmN5PyIiOnQuY3VycmVuY3lbMV0rIiIsbz12b2lkIDA9PT10LmRlY2ltYWw/Ii4iOnQuZGVjaW1hbCsiIixzPXZvaWQgMD09PXQubnVtZXJhbHM/ZWM6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1swLTldL2csKGZ1bmN0aW9uKGUpe3JldHVybiB0WytlXX0pKX19KG5jLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxjPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLHU9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIixsPXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIGgodCl7dmFyIGU9KHQ9VnModCkpLmZpbGwsbj10LmFsaWduLGg9dC5zaWduLGY9dC5zeW1ib2wsZD10Lnplcm8scD10LndpZHRoLHk9dC5jb21tYSxnPXQucHJlY2lzaW9uLG09dC50cmltLHY9dC50eXBlOyJuIj09PXY/KHk9ITAsdj0iZyIpOnRjW3ZdfHwodm9pZCAwPT09ZyYmKGc9MTIpLG09ITAsdj0iZyIpLChkfHwiMCI9PT1lJiYiPSI9PT1uKSYmKGQ9ITAsZT0iMCIsbj0iPSIpO3ZhciBiPSIkIj09PWY/aToiIyI9PT1mJiYvW2JveFhdLy50ZXN0KHYpPyIwIit2LnRvTG93ZXJDYXNlKCk6IiIseD0iJCI9PT1mP2E6L1slcF0vLnRlc3Qodik/YzoiIixfPXRjW3ZdLGs9L1tkZWZncHJzJV0vLnRlc3Qodik7ZnVuY3Rpb24gdyh0KXt2YXIgaSxhLGMsZj1iLHc9eDtpZigiYyI9PT12KXc9Xyh0KSt3LHQ9IiI7ZWxzZXt2YXIgVD0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT9sOl8oTWF0aC5hYnModCksZyksbSYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUsbj10Lmxlbmd0aCxyPTEsaT0tMTtyPG47KytyKXN3aXRjaCh0W3JdKXtjYXNlIi4iOmk9ZT1yO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPXIpLGU9cjticmVhaztkZWZhdWx0OmlmKCErdFtyXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxUJiYwPT0rdCYmIisiIT09aCYmKFQ9ITEpLGY9KFQ/IigiPT09aD9oOnU6Ii0iPT09aHx8IigiPT09aD8iIjpoKStmLHc9KCJzIj09PXY/cmNbOCtYcy8zXToiIikrdysoVCYmIigiPT09aD8iKSI6IiIpLGspZm9yKGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspaWYoNDg+KGM9dC5jaGFyQ29kZUF0KGkpKXx8Yz41Nyl7dz0oNDY9PT1jP28rdC5zbGljZShpKzEpOnQuc2xpY2UoaSkpK3csdD10LnNsaWNlKDAsaSk7YnJlYWt9fXkmJiFkJiYodD1yKHQsMS8wKSk7dmFyIEU9Zi5sZW5ndGgrdC5sZW5ndGgrdy5sZW5ndGgsQz1FPHA/bmV3IEFycmF5KHAtRSsxKS5qb2luKGUpOiIiO3N3aXRjaCh5JiZkJiYodD1yKEMrdCxDLmxlbmd0aD9wLXcubGVuZ3RoOjEvMCksQz0iIiksbil7Y2FzZSI8Ijp0PWYrdCt3K0M7YnJlYWs7Y2FzZSI9Ijp0PWYrQyt0K3c7YnJlYWs7Y2FzZSJeIjp0PUMuc2xpY2UoMCxFPUMubGVuZ3RoPj4xKStmK3QrdytDLnNsaWNlKEUpO2JyZWFrO2RlZmF1bHQ6dD1DK2YrdCt3fXJldHVybiBzKHQpfXJldHVybiBnPXZvaWQgMD09PWc/NjovW2dwcnNdLy50ZXN0KHYpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsZykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsZykpLHcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdCsiIn0sd31yZXR1cm57Zm9ybWF0OmgsZm9ybWF0UHJlZml4OmZ1bmN0aW9uKHQsZSl7dmFyIG49aCgoKHQ9VnModCkpLnR5cGU9ImYiLHQpKSxyPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKFdzKGUpLzMpKSksaT1NYXRoLnBvdygxMCwtciksYT1yY1s4K3IvM107cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBuKGkqdCkrYX19fX07ZnVuY3Rpb24gYWModCl7cmV0dXJuIFpzPWljKHQpLEtzPVpzLmZvcm1hdCxRcz1acy5mb3JtYXRQcmVmaXgsWnN9YWMoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO3ZhciBvYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtV3MoTWF0aC5hYnModCkpKX0sc2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgoMCwzKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihXcyhlKS8zKSkpLVdzKE1hdGguYWJzKHQpKSl9LGNjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9TWF0aC5hYnModCksZT1NYXRoLmFicyhlKS10LE1hdGgubWF4KDAsV3MoZSktV3ModCkpKzF9LHVjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBsY307ZnVuY3Rpb24gbGMoKXt0aGlzLnJlc2V0KCl9bGMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpsYyxyZXNldDpmdW5jdGlvbigpe3RoaXMucz10aGlzLnQ9MH0sYWRkOmZ1bmN0aW9uKHQpe2ZjKGhjLHQsdGhpcy50KSxmYyh0aGlzLGhjLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1oYy50OnRoaXMucz1oYy50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBoYz1uZXcgbGM7ZnVuY3Rpb24gZmModCxlLG4pe3ZhciByPXQucz1lK24saT1yLWUsYT1yLWk7dC50PWUtYSsobi1pKX12YXIgZGM9TWF0aC5QSSxwYz1kYy8yLHljPWRjLzQsZ2M9MipkYyxtYz0xODAvZGMsdmM9ZGMvMTgwLGJjPU1hdGguYWJzLHhjPU1hdGguYXRhbixfYz1NYXRoLmF0YW4yLGtjPU1hdGguY29zLHdjPU1hdGguY2VpbCxUYz1NYXRoLmV4cCxFYz0oTWF0aC5mbG9vcixNYXRoLmxvZyksQ2M9TWF0aC5wb3csU2M9TWF0aC5zaW4sQWM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9LE1jPU1hdGguc3FydCxPYz1NYXRoLnRhbjtmdW5jdGlvbiBOYyh0KXtyZXR1cm4gdD4xPzA6dDwtMT9kYzpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gQmModCl7cmV0dXJuIHQ+MT9wYzp0PC0xPy1wYzpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRGModCl7cmV0dXJuKHQ9U2ModC8yKSkqdH1mdW5jdGlvbiBMYygpe31mdW5jdGlvbiBJYyh0LGUpe3QmJkZjLmhhc093blByb3BlcnR5KHQudHlwZSkmJkZjW3QudHlwZV0odCxlKX12YXIgUmM9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtJYyh0Lmdlb21ldHJ5LGUpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmZlYXR1cmVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspSWMobltyXS5nZW9tZXRyeSxlKX19LEZjPXtTcGhlcmU6ZnVuY3Rpb24odCxlKXtlLnNwaGVyZSgpfSxQb2ludDpmdW5jdGlvbih0LGUpe3Q9dC5jb29yZGluYXRlcyxlLnBvaW50KHRbMF0sdFsxXSx0WzJdKX0sTXVsdGlQb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspdD1uW3JdLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7UGModC5jb29yZGluYXRlcyxlLDApfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KVBjKG5bcl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe2pjKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspamMobltyXSxlKX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KUljKG5bcl0sZSl9fTtmdW5jdGlvbiBQYyh0LGUsbil7dmFyIHIsaT0tMSxhPXQubGVuZ3RoLW47Zm9yKGUubGluZVN0YXJ0KCk7KytpPGE7KXI9dFtpXSxlLnBvaW50KHJbMF0sclsxXSxyWzJdKTtlLmxpbmVFbmQoKX1mdW5jdGlvbiBqYyh0LGUpe3ZhciBuPS0xLHI9dC5sZW5ndGg7Zm9yKGUucG9seWdvblN0YXJ0KCk7KytuPHI7KVBjKHRbbl0sZSwxKTtlLnBvbHlnb25FbmQoKX12YXIgWWMsemMsVWMsJGMscWMsV2M9ZnVuY3Rpb24odCxlKXt0JiZSYy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1JjW3QudHlwZV0odCxlKTpJYyh0LGUpfSxIYz11YygpLFZjPXVjKCksR2M9e3BvaW50OkxjLGxpbmVTdGFydDpMYyxsaW5lRW5kOkxjLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0hjLnJlc2V0KCksR2MubGluZVN0YXJ0PVhjLEdjLmxpbmVFbmQ9WmN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgdD0rSGM7VmMuYWRkKHQ8MD9nYyt0OnQpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUxjfSxzcGhlcmU6ZnVuY3Rpb24oKXtWYy5hZGQoZ2MpfX07ZnVuY3Rpb24gWGMoKXtHYy5wb2ludD1LY31mdW5jdGlvbiBaYygpe1FjKFljLHpjKX1mdW5jdGlvbiBLYyh0LGUpe0djLnBvaW50PVFjLFljPXQsemM9ZSxVYz10Kj12YywkYz1rYyhlPShlKj12YykvMit5YykscWM9U2MoZSl9ZnVuY3Rpb24gUWModCxlKXt2YXIgbj0odCo9dmMpLVVjLHI9bj49MD8xOi0xLGk9cipuLGE9a2MoZT0oZSo9dmMpLzIreWMpLG89U2MoZSkscz1xYypvLGM9JGMqYStzKmtjKGkpLHU9cypyKlNjKGkpO0hjLmFkZChfYyh1LGMpKSxVYz10LCRjPWEscWM9b312YXIgSmM9ZnVuY3Rpb24odCl7cmV0dXJuIFZjLnJlc2V0KCksV2ModCxHYyksMipWY307ZnVuY3Rpb24gdHUodCl7cmV0dXJuW19jKHRbMV0sdFswXSksQmModFsyXSldfWZ1bmN0aW9uIGV1KHQpe3ZhciBlPXRbMF0sbj10WzFdLHI9a2Mobik7cmV0dXJuW3Iqa2MoZSkscipTYyhlKSxTYyhuKV19ZnVuY3Rpb24gbnUodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gcnUodCxlKXtyZXR1cm5bdFsxXSplWzJdLXRbMl0qZVsxXSx0WzJdKmVbMF0tdFswXSplWzJdLHRbMF0qZVsxXS10WzFdKmVbMF1dfWZ1bmN0aW9uIGl1KHQsZSl7dFswXSs9ZVswXSx0WzFdKz1lWzFdLHRbMl0rPWVbMl19ZnVuY3Rpb24gYXUodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uIG91KHQpe3ZhciBlPU1jKHRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdKTt0WzBdLz1lLHRbMV0vPWUsdFsyXS89ZX12YXIgc3UsY3UsdXUsbHUsaHUsZnUsZHUscHUseXUsZ3UsbXU9dWMoKSx2dT17cG9pbnQ6YnUsbGluZVN0YXJ0Ol91LGxpbmVFbmQ6a3UscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dnUucG9pbnQ9d3UsdnUubGluZVN0YXJ0PVR1LHZ1LmxpbmVFbmQ9RXUsbXUucmVzZXQoKSxHYy5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0djLnBvbHlnb25FbmQoKSx2dS5wb2ludD1idSx2dS5saW5lU3RhcnQ9X3UsdnUubGluZUVuZD1rdSxIYzwwPyhzdT0tKHV1PTE4MCksY3U9LShsdT05MCkpOm11PjFlLTY/bHU9OTA6bXU8LTFlLTYmJihjdT0tOTApLGd1WzBdPXN1LGd1WzFdPXV1fSxzcGhlcmU6ZnVuY3Rpb24oKXtzdT0tKHV1PTE4MCksY3U9LShsdT05MCl9fTtmdW5jdGlvbiBidSh0LGUpe3l1LnB1c2goZ3U9W3N1PXQsdXU9dF0pLGU8Y3UmJihjdT1lKSxlPmx1JiYobHU9ZSl9ZnVuY3Rpb24geHUodCxlKXt2YXIgbj1ldShbdCp2YyxlKnZjXSk7aWYocHUpe3ZhciByPXJ1KHB1LG4pLGk9cnUoW3JbMV0sLXJbMF0sMF0scik7b3UoaSksaT10dShpKTt2YXIgYSxvPXQtaHUscz1vPjA/MTotMSxjPWlbMF0qbWMqcyx1PWJjKG8pPjE4MDt1XihzKmh1PGMmJmM8cyp0KT8oYT1pWzFdKm1jKT5sdSYmKGx1PWEpOnVeKHMqaHU8KGM9KGMrMzYwKSUzNjAtMTgwKSYmYzxzKnQpPyhhPS1pWzFdKm1jKTxjdSYmKGN1PWEpOihlPGN1JiYoY3U9ZSksZT5sdSYmKGx1PWUpKSx1P3Q8aHU/Q3Uoc3UsdCk+Q3Uoc3UsdXUpJiYodXU9dCk6Q3UodCx1dSk+Q3Uoc3UsdXUpJiYoc3U9dCk6dXU+PXN1Pyh0PHN1JiYoc3U9dCksdD51dSYmKHV1PXQpKTp0Pmh1P0N1KHN1LHQpPkN1KHN1LHV1KSYmKHV1PXQpOkN1KHQsdXUpPkN1KHN1LHV1KSYmKHN1PXQpfWVsc2UgeXUucHVzaChndT1bc3U9dCx1dT10XSk7ZTxjdSYmKGN1PWUpLGU+bHUmJihsdT1lKSxwdT1uLGh1PXR9ZnVuY3Rpb24gX3UoKXt2dS5wb2ludD14dX1mdW5jdGlvbiBrdSgpe2d1WzBdPXN1LGd1WzFdPXV1LHZ1LnBvaW50PWJ1LHB1PW51bGx9ZnVuY3Rpb24gd3UodCxlKXtpZihwdSl7dmFyIG49dC1odTttdS5hZGQoYmMobik+MTgwP24rKG4+MD8zNjA6LTM2MCk6bil9ZWxzZSBmdT10LGR1PWU7R2MucG9pbnQodCxlKSx4dSh0LGUpfWZ1bmN0aW9uIFR1KCl7R2MubGluZVN0YXJ0KCl9ZnVuY3Rpb24gRXUoKXt3dShmdSxkdSksR2MubGluZUVuZCgpLGJjKG11KT4xZS02JiYoc3U9LSh1dT0xODApKSxndVswXT1zdSxndVsxXT11dSxwdT1udWxsfWZ1bmN0aW9uIEN1KHQsZSl7cmV0dXJuKGUtPXQpPDA/ZSszNjA6ZX1mdW5jdGlvbiBTdSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gQXUodCxlKXtyZXR1cm4gdFswXTw9dFsxXT90WzBdPD1lJiZlPD10WzFdOmU8dFswXXx8dFsxXTxlfXZhciBNdSxPdSxOdSxCdSxEdSxMdSxJdSxSdSxGdSxQdSxqdSxZdSx6dSxVdSwkdSxxdSxXdT1mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhLG8scztpZihsdT11dT0tKHN1PWN1PTEvMCkseXU9W10sV2ModCx2dSksbj15dS5sZW5ndGgpe2Zvcih5dS5zb3J0KFN1KSxlPTEsYT1bcj15dVswXV07ZTxuOysrZSlBdShyLChpPXl1W2VdKVswXSl8fEF1KHIsaVsxXSk/KEN1KHJbMF0saVsxXSk+Q3UoclswXSxyWzFdKSYmKHJbMV09aVsxXSksQ3UoaVswXSxyWzFdKT5DdShyWzBdLHJbMV0pJiYoclswXT1pWzBdKSk6YS5wdXNoKHI9aSk7Zm9yKG89LTEvMCxlPTAscj1hW249YS5sZW5ndGgtMV07ZTw9bjtyPWksKytlKWk9YVtlXSwocz1DdShyWzFdLGlbMF0pKT5vJiYobz1zLHN1PWlbMF0sdXU9clsxXSl9cmV0dXJuIHl1PWd1PW51bGwsc3U9PT0xLzB8fGN1PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3N1LGN1XSxbdXUsbHVdXX0sSHU9e3NwaGVyZTpMYyxwb2ludDpWdSxsaW5lU3RhcnQ6WHUsbGluZUVuZDpRdSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtIdS5saW5lU3RhcnQ9SnUsSHUubGluZUVuZD10bH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0h1LmxpbmVTdGFydD1YdSxIdS5saW5lRW5kPVF1fX07ZnVuY3Rpb24gVnUodCxlKXt0Kj12Yzt2YXIgbj1rYyhlKj12Yyk7R3UobiprYyh0KSxuKlNjKHQpLFNjKGUpKX1mdW5jdGlvbiBHdSh0LGUsbil7KytNdSxOdSs9KHQtTnUpL011LEJ1Kz0oZS1CdSkvTXUsRHUrPShuLUR1KS9NdX1mdW5jdGlvbiBYdSgpe0h1LnBvaW50PVp1fWZ1bmN0aW9uIFp1KHQsZSl7dCo9dmM7dmFyIG49a2MoZSo9dmMpO1V1PW4qa2ModCksJHU9bipTYyh0KSxxdT1TYyhlKSxIdS5wb2ludD1LdSxHdShVdSwkdSxxdSl9ZnVuY3Rpb24gS3UodCxlKXt0Kj12Yzt2YXIgbj1rYyhlKj12Yykscj1uKmtjKHQpLGk9bipTYyh0KSxhPVNjKGUpLG89X2MoTWMoKG89JHUqYS1xdSppKSpvKyhvPXF1KnItVXUqYSkqbysobz1VdSppLSR1KnIpKm8pLFV1KnIrJHUqaStxdSphKTtPdSs9byxMdSs9byooVXUrKFV1PXIpKSxJdSs9byooJHUrKCR1PWkpKSxSdSs9byoocXUrKHF1PWEpKSxHdShVdSwkdSxxdSl9ZnVuY3Rpb24gUXUoKXtIdS5wb2ludD1WdX1mdW5jdGlvbiBKdSgpe0h1LnBvaW50PWVsfWZ1bmN0aW9uIHRsKCl7bmwoWXUsenUpLEh1LnBvaW50PVZ1fWZ1bmN0aW9uIGVsKHQsZSl7WXU9dCx6dT1lLHQqPXZjLGUqPXZjLEh1LnBvaW50PW5sO3ZhciBuPWtjKGUpO1V1PW4qa2ModCksJHU9bipTYyh0KSxxdT1TYyhlKSxHdShVdSwkdSxxdSl9ZnVuY3Rpb24gbmwodCxlKXt0Kj12Yzt2YXIgbj1rYyhlKj12Yykscj1uKmtjKHQpLGk9bipTYyh0KSxhPVNjKGUpLG89JHUqYS1xdSppLHM9cXUqci1VdSphLGM9VXUqaS0kdSpyLHU9TWMobypvK3MqcytjKmMpLGw9QmModSksaD11JiYtbC91O0Z1Kz1oKm8sUHUrPWgqcyxqdSs9aCpjLE91Kz1sLEx1Kz1sKihVdSsoVXU9cikpLEl1Kz1sKigkdSsoJHU9aSkpLFJ1Kz1sKihxdSsocXU9YSkpLEd1KFV1LCR1LHF1KX12YXIgcmw9ZnVuY3Rpb24odCl7TXU9T3U9TnU9QnU9RHU9THU9SXU9UnU9RnU9UHU9anU9MCxXYyh0LEh1KTt2YXIgZT1GdSxuPVB1LHI9anUsaT1lKmUrbipuK3IqcjtyZXR1cm4gaTwxZS0xMiYmKGU9THUsbj1JdSxyPVJ1LE91PDFlLTYmJihlPU51LG49QnUscj1EdSksKGk9ZSplK24qbityKnIpPDFlLTEyKT9bTmFOLE5hTl06W19jKG4sZSkqbWMsQmMoci9NYyhpKSkqbWNdfSxpbD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19LGFsPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBuPXQobixyKSxlKG5bMF0sblsxXSl9cmV0dXJuIHQuaW52ZXJ0JiZlLmludmVydCYmKG4uaW52ZXJ0PWZ1bmN0aW9uKG4scil7cmV0dXJuKG49ZS5pbnZlcnQobixyKSkmJnQuaW52ZXJ0KG5bMF0sblsxXSl9KSxufTtmdW5jdGlvbiBvbCh0LGUpe3JldHVybltiYyh0KT5kYz90K01hdGgucm91bmQoLXQvZ2MpKmdjOnQsZV19ZnVuY3Rpb24gc2wodCxlLG4pe3JldHVybih0JT1nYyk/ZXx8bj9hbCh1bCh0KSxsbChlLG4pKTp1bCh0KTplfHxuP2xsKGUsbik6b2x9ZnVuY3Rpb24gY2wodCl7cmV0dXJuIGZ1bmN0aW9uKGUsbil7cmV0dXJuWyhlKz10KT5kYz9lLWdjOmU8LWRjP2UrZ2M6ZSxuXX19ZnVuY3Rpb24gdWwodCl7dmFyIGU9Y2wodCk7cmV0dXJuIGUuaW52ZXJ0PWNsKC10KSxlfWZ1bmN0aW9uIGxsKHQsZSl7dmFyIG49a2ModCkscj1TYyh0KSxpPWtjKGUpLGE9U2MoZSk7ZnVuY3Rpb24gbyh0LGUpe3ZhciBvPWtjKGUpLHM9a2ModCkqbyxjPVNjKHQpKm8sdT1TYyhlKSxsPXUqbitzKnI7cmV0dXJuW19jKGMqaS1sKmEscypuLXUqciksQmMobCppK2MqYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBvPWtjKGUpLHM9a2ModCkqbyxjPVNjKHQpKm8sdT1TYyhlKSxsPXUqaS1jKmE7cmV0dXJuW19jKGMqaSt1KmEscypuK2wqciksQmMobCpuLXMqcildfSxvfW9sLmludmVydD1vbDt2YXIgaGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qdmMsZVsxXSp2YykpWzBdKj1tYyxlWzFdKj1tYyxlfXJldHVybiB0PXNsKHRbMF0qdmMsdFsxXSp2Yyx0Lmxlbmd0aD4yP3RbMl0qdmM6MCksZS5pbnZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuKGU9dC5pbnZlcnQoZVswXSp2YyxlWzFdKnZjKSlbMF0qPW1jLGVbMV0qPW1jLGV9LGV9O2Z1bmN0aW9uIGZsKHQsZSxuLHIsaSxhKXtpZihuKXt2YXIgbz1rYyhlKSxzPVNjKGUpLGM9cipuO251bGw9PWk/KGk9ZStyKmdjLGE9ZS1jLzIpOihpPWRsKG8saSksYT1kbChvLGEpLChyPjA/aTxhOmk+YSkmJihpKz1yKmdjKSk7Zm9yKHZhciB1LGw9aTtyPjA/bD5hOmw8YTtsLT1jKXU9dHUoW28sLXMqa2MobCksLXMqU2MobCldKSx0LnBvaW50KHVbMF0sdVsxXSl9fWZ1bmN0aW9uIGRsKHQsZSl7KGU9ZXUoZSkpWzBdLT10LG91KGUpO3ZhciBuPU5jKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LW46bikrZ2MtMWUtNiklZ2N9dmFyIHBsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuPWlsKFswLDBdKSxyPWlsKDkwKSxpPWlsKDYpLGE9e3BvaW50OmZ1bmN0aW9uKG4scil7dC5wdXNoKG49ZShuLHIpKSxuWzBdKj1tYyxuWzFdKj1tY319O2Z1bmN0aW9uIG8oKXt2YXIgbz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKnZjLGM9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqdmM7cmV0dXJuIHQ9W10sZT1zbCgtb1swXSp2Yywtb1sxXSp2YywwKS5pbnZlcnQsZmwoYSxzLGMsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmlsKFsrdFswXSwrdFsxXV0pLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aWwoK3QpLG8pOnJ9LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6aWwoK3QpLG8pOml9LG99LHlsPWZ1bmN0aW9uKCl7dmFyIHQsZT1bXTtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24oZSxuLHIpe3QucHVzaChbZSxuLHJdKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOkxjLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIG49ZTtyZXR1cm4gZT1bXSx0PW51bGwsbn19fSxnbD1mdW5jdGlvbih0LGUpe3JldHVybiBiYyh0WzBdLWVbMF0pPDFlLTYmJmJjKHRbMV0tZVsxXSk8MWUtNn07ZnVuY3Rpb24gbWwodCxlLG4scil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPW4sdGhpcy5lPXIsdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH12YXIgdmw9ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgYSxvLHM9W10sYz1bXTtpZih0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKCEoKGU9dC5sZW5ndGgtMSk8PTApKXt2YXIgZSxuLHI9dFswXSxvPXRbZV07aWYoZ2wocixvKSl7aWYoIXJbMl0mJiFvWzJdKXtmb3IoaS5saW5lU3RhcnQoKSxhPTA7YTxlOysrYSlpLnBvaW50KChyPXRbYV0pWzBdLHJbMV0pO3JldHVybiB2b2lkIGkubGluZUVuZCgpfW9bMF0rPTJlLTZ9cy5wdXNoKG49bmV3IG1sKHIsdCxudWxsLCEwKSksYy5wdXNoKG4ubz1uZXcgbWwocixudWxsLG4sITEpKSxzLnB1c2gobj1uZXcgbWwobyx0LG51bGwsITEpKSxjLnB1c2gobi5vPW5ldyBtbChvLG51bGwsbiwhMCkpfX0pKSxzLmxlbmd0aCl7Zm9yKGMuc29ydChlKSxibChzKSxibChjKSxhPTAsbz1jLmxlbmd0aDthPG87KythKWNbYV0uZT1uPSFuO2Zvcih2YXIgdSxsLGg9c1swXTs7KXtmb3IodmFyIGY9aCxkPSEwO2YudjspaWYoKGY9Zi5uKT09PWgpcmV0dXJuO3U9Zi56LGkubGluZVN0YXJ0KCk7ZG97aWYoZi52PWYuby52PSEwLGYuZSl7aWYoZClmb3IoYT0wLG89dS5sZW5ndGg7YTxvOysrYSlpLnBvaW50KChsPXVbYV0pWzBdLGxbMV0pO2Vsc2UgcihmLngsZi5uLngsMSxpKTtmPWYubn1lbHNle2lmKGQpZm9yKHU9Zi5wLnosYT11Lmxlbmd0aC0xO2E+PTA7LS1hKWkucG9pbnQoKGw9dVthXSlbMF0sbFsxXSk7ZWxzZSByKGYueCxmLnAueCwtMSxpKTtmPWYucH11PShmPWYubykueixkPSFkfXdoaWxlKCFmLnYpO2kubGluZUVuZCgpfX19O2Z1bmN0aW9uIGJsKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxuLHI9MCxpPXRbMF07KytyPGU7KWkubj1uPXRbcl0sbi5wPWksaT1uO2kubj1uPXRbMF0sbi5wPWl9fXZhciB4bD11YygpO2Z1bmN0aW9uIF9sKHQpe3JldHVybiBiYyh0WzBdKTw9ZGM/dFswXTpBYyh0WzBdKSooKGJjKHRbMF0pK2RjKSVnYy1kYyl9dmFyIGtsPWZ1bmN0aW9uKHQsZSl7dmFyIG49X2woZSkscj1lWzFdLGk9U2MociksYT1bU2MobiksLWtjKG4pLDBdLG89MCxzPTA7eGwucmVzZXQoKSwxPT09aT9yPXBjKzFlLTY6LTE9PT1pJiYocj0tcGMtMWUtNik7Zm9yKHZhciBjPTAsdT10Lmxlbmd0aDtjPHU7KytjKWlmKGg9KGw9dFtjXSkubGVuZ3RoKWZvcih2YXIgbCxoLGY9bFtoLTFdLGQ9X2woZikscD1mWzFdLzIreWMseT1TYyhwKSxnPWtjKHApLG09MDttPGg7KyttLGQ9Yix5PV8sZz1rLGY9dil7dmFyIHY9bFttXSxiPV9sKHYpLHg9dlsxXS8yK3ljLF89U2MoeCksaz1rYyh4KSx3PWItZCxUPXc+PTA/MTotMSxFPVQqdyxDPUU+ZGMsUz15Kl87aWYoeGwuYWRkKF9jKFMqVCpTYyhFKSxnKmsrUyprYyhFKSkpLG8rPUM/dytUKmdjOncsQ15kPj1uXmI+PW4pe3ZhciBBPXJ1KGV1KGYpLGV1KHYpKTtvdShBKTt2YXIgTT1ydShhLEEpO291KE0pO3ZhciBPPShDXnc+PTA/LTE6MSkqQmMoTVsyXSk7KHI+T3x8cj09PU8mJihBWzBdfHxBWzFdKSkmJihzKz1DXnc+PTA/MTotMSl9fXJldHVybihvPC0xZS02fHxvPDFlLTYmJnhsPC0xZS02KV4xJnN9LHdsPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgYSxvLHMsYz1lKGkpLHU9eWwoKSxsPWUodSksaD0hMSxmPXtwb2ludDpkLGxpbmVTdGFydDp5LGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PW0sZi5saW5lU3RhcnQ9dixmLmxpbmVFbmQ9YixvPVtdLGE9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PWQsZi5saW5lU3RhcnQ9eSxmLmxpbmVFbmQ9ZyxvPVAobyk7dmFyIHQ9a2woYSxyKTtvLmxlbmd0aD8oaHx8KGkucG9seWdvblN0YXJ0KCksaD0hMCksdmwobyxFbCx0LG4saSkpOnQmJihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGgmJihpLnBvbHlnb25FbmQoKSxoPSExKSxvPWE9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLG4obnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBkKGUsbil7dChlLG4pJiZpLnBvaW50KGUsbil9ZnVuY3Rpb24gcCh0LGUpe2MucG9pbnQodCxlKX1mdW5jdGlvbiB5KCl7Zi5wb2ludD1wLGMubGluZVN0YXJ0KCl9ZnVuY3Rpb24gZygpe2YucG9pbnQ9ZCxjLmxpbmVFbmQoKX1mdW5jdGlvbiBtKHQsZSl7cy5wdXNoKFt0LGVdKSxsLnBvaW50KHQsZSl9ZnVuY3Rpb24gdigpe2wubGluZVN0YXJ0KCkscz1bXX1mdW5jdGlvbiBiKCl7bShzWzBdWzBdLHNbMF1bMV0pLGwubGluZUVuZCgpO3ZhciB0LGUsbixyLGM9bC5jbGVhbigpLGY9dS5yZXN1bHQoKSxkPWYubGVuZ3RoO2lmKHMucG9wKCksYS5wdXNoKHMpLHM9bnVsbCxkKWlmKDEmYyl7aWYoKGU9KG49ZlswXSkubGVuZ3RoLTEpPjApe2ZvcihofHwoaS5wb2x5Z29uU3RhcnQoKSxoPSEwKSxpLmxpbmVTdGFydCgpLHQ9MDt0PGU7Kyt0KWkucG9pbnQoKHI9blt0XSlbMF0sclsxXSk7aS5saW5lRW5kKCl9fWVsc2UgZD4xJiYyJmMmJmYucHVzaChmLnBvcCgpLmNvbmNhdChmLnNoaWZ0KCkpKSxvLnB1c2goZi5maWx0ZXIoVGwpKX1yZXR1cm4gZn19O2Z1bmN0aW9uIFRsKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIEVsKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLXBjLTFlLTY6cGMtdFsxXSktKChlPWUueClbMF08MD9lWzFdLXBjLTFlLTY6cGMtZVsxXSl9dmFyIENsPXdsKChmdW5jdGlvbigpe3JldHVybiEwfSksKGZ1bmN0aW9uKHQpe3ZhciBlLG49TmFOLHI9TmFOLGk9TmFOO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGU9MX0scG9pbnQ6ZnVuY3Rpb24oYSxvKXt2YXIgcz1hPjA/ZGM6LWRjLGM9YmMoYS1uKTtiYyhjLWRjKTwxZS02Pyh0LnBvaW50KG4scj0ocitvKS8yPjA/cGM6LXBjKSx0LnBvaW50KGksciksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHMsciksdC5wb2ludChhLHIpLGU9MCk6aSE9PXMmJmM+PWRjJiYoYmMobi1pKTwxZS02JiYobi09MWUtNippKSxiYyhhLXMpPDFlLTYmJihhLT0xZS02KnMpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvPVNjKHQtbik7cmV0dXJuIGJjKG8pPjFlLTY/eGMoKFNjKGUpKihhPWtjKHIpKSpTYyhuKS1TYyhyKSooaT1rYyhlKSkqU2ModCkpLyhpKmEqbykpOihlK3IpLzJ9KG4scixhLG8pLHQucG9pbnQoaSxyKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQocyxyKSxlPTApLHQucG9pbnQobj1hLHI9byksaT1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dC5saW5lRW5kKCksbj1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1lfX19KSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk7aWYobnVsbD09dClpPW4qcGMsci5wb2ludCgtZGMsaSksci5wb2ludCgwLGkpLHIucG9pbnQoZGMsaSksci5wb2ludChkYywwKSxyLnBvaW50KGRjLC1pKSxyLnBvaW50KDAsLWkpLHIucG9pbnQoLWRjLC1pKSxyLnBvaW50KC1kYywwKSxyLnBvaW50KC1kYyxpKTtlbHNlIGlmKGJjKHRbMF0tZVswXSk+MWUtNil7dmFyIGE9dFswXTxlWzBdP2RjOi1kYztpPW4qYS8yLHIucG9pbnQoLWEsaSksci5wb2ludCgwLGkpLHIucG9pbnQoYSxpKX1lbHNlIHIucG9pbnQoZVswXSxlWzFdKX0pLFstZGMsLXBjXSk7dmFyIFNsPWZ1bmN0aW9uKHQpe3ZhciBlPWtjKHQpLG49Nip2YyxyPWU+MCxpPWJjKGUpPjFlLTY7ZnVuY3Rpb24gYSh0LG4pe3JldHVybiBrYyh0KSprYyhuKT5lfWZ1bmN0aW9uIG8odCxuLHIpe3ZhciBpPVsxLDAsMF0sYT1ydShldSh0KSxldShuKSksbz1udShhLGEpLHM9YVswXSxjPW8tcypzO2lmKCFjKXJldHVybiFyJiZ0O3ZhciB1PWUqby9jLGw9LWUqcy9jLGg9cnUoaSxhKSxmPWF1KGksdSk7aXUoZixhdShhLGwpKTt2YXIgZD1oLHA9bnUoZixkKSx5PW51KGQsZCksZz1wKnAteSoobnUoZixmKS0xKTtpZighKGc8MCkpe3ZhciBtPU1jKGcpLHY9YXUoZCwoLXAtbSkveSk7aWYoaXUodixmKSx2PXR1KHYpLCFyKXJldHVybiB2O3ZhciBiLHg9dFswXSxfPW5bMF0saz10WzFdLHc9blsxXTtfPHgmJihiPXgseD1fLF89Yik7dmFyIFQ9Xy14LEU9YmMoVC1kYyk8MWUtNjtpZighRSYmdzxrJiYoYj1rLGs9dyx3PWIpLEV8fFQ8MWUtNj9FP2srdz4wXnZbMV08KGJjKHZbMF0teCk8MWUtNj9rOncpOms8PXZbMV0mJnZbMV08PXc6VD5kY14oeDw9dlswXSYmdlswXTw9Xykpe3ZhciBDPWF1KGQsKC1wK20pL3kpO3JldHVybiBpdShDLGYpLFt2LHR1KEMpXX19fWZ1bmN0aW9uIHMoZSxuKXt2YXIgaT1yP3Q6ZGMtdCxhPTA7cmV0dXJuIGU8LWk/YXw9MTplPmkmJihhfD0yKSxuPC1pP2F8PTQ6bj5pJiYoYXw9OCksYX1yZXR1cm4gd2woYSwoZnVuY3Rpb24odCl7dmFyIGUsbixjLHUsbDtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dT1jPSExLGw9MX0scG9pbnQ6ZnVuY3Rpb24oaCxmKXt2YXIgZCxwPVtoLGZdLHk9YShoLGYpLGc9cj95PzA6cyhoLGYpOnk/cyhoKyhoPDA/ZGM6LWRjKSxmKTowO2lmKCFlJiYodT1jPXkpJiZ0LmxpbmVTdGFydCgpLHkhPT1jJiYoIShkPW8oZSxwKSl8fGdsKGUsZCl8fGdsKHAsZCkpJiYocFsyXT0xKSx5IT09YylsPTAseT8odC5saW5lU3RhcnQoKSxkPW8ocCxlKSx0LnBvaW50KGRbMF0sZFsxXSkpOihkPW8oZSxwKSx0LnBvaW50KGRbMF0sZFsxXSwyKSx0LmxpbmVFbmQoKSksZT1kO2Vsc2UgaWYoaSYmZSYmcl55KXt2YXIgbTtnJm58fCEobT1vKHAsZSwhMCkpfHwobD0wLHI/KHQubGluZVN0YXJ0KCksdC5wb2ludChtWzBdWzBdLG1bMF1bMV0pLHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSk6KHQucG9pbnQobVsxXVswXSxtWzFdWzFdKSx0LmxpbmVFbmQoKSx0LmxpbmVTdGFydCgpLHQucG9pbnQobVswXVswXSxtWzBdWzFdLDMpKSl9IXl8fGUmJmdsKGUscCl8fHQucG9pbnQocFswXSxwWzFdKSxlPXAsYz15LG49Z30sbGluZUVuZDpmdW5jdGlvbigpe2MmJnQubGluZUVuZCgpLGU9bnVsbH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gbHwodSYmYyk8PDF9fX0pLChmdW5jdGlvbihlLHIsaSxhKXtmbChhLHQsbixpLGUscil9KSxyP1swLC10XTpbLWRjLHQtZGNdKX07ZnVuY3Rpb24gQWwodCxlLG4scil7ZnVuY3Rpb24gaShpLGEpe3JldHVybiB0PD1pJiZpPD1uJiZlPD1hJiZhPD1yfWZ1bmN0aW9uIGEoaSxhLHMsdSl7dmFyIGw9MCxoPTA7aWYobnVsbD09aXx8KGw9byhpLHMpKSE9PShoPW8oYSxzKSl8fGMoaSxhKTwwXnM+MClkb3t1LnBvaW50KDA9PT1sfHwzPT09bD90Om4sbD4xP3I6ZSl9d2hpbGUoKGw9KGwrcys0KSU0KSE9PWgpO2Vsc2UgdS5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIG8ocixpKXtyZXR1cm4gYmMoclswXS10KTwxZS02P2k+MD8wOjM6YmMoclswXS1uKTwxZS02P2k+MD8yOjE6YmMoclsxXS1lKTwxZS02P2k+MD8xOjA6aT4wPzM6Mn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGModC54LGUueCl9ZnVuY3Rpb24gYyh0LGUpe3ZhciBuPW8odCwxKSxyPW8oZSwxKTtyZXR1cm4gbiE9PXI/bi1yOjA9PT1uP2VbMV0tdFsxXToxPT09bj90WzBdLWVbMF06Mj09PW4/dFsxXS1lWzFdOmVbMF0tdFswXX1yZXR1cm4gZnVuY3Rpb24obyl7dmFyIGMsdSxsLGgsZixkLHAseSxnLG0sdixiPW8seD15bCgpLF89e3BvaW50OmssbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Xy5wb2ludD13LHUmJnUucHVzaChsPVtdKTttPSEwLGc9ITEscD15PU5hTn0sbGluZUVuZDpmdW5jdGlvbigpe2MmJih3KGgsZiksZCYmZyYmeC5yZWpvaW4oKSxjLnB1c2goeC5yZXN1bHQoKSkpO18ucG9pbnQ9ayxnJiZiLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Yj14LGM9W10sdT1bXSx2PSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPTAsaT11Lmxlbmd0aDtuPGk7KytuKWZvcih2YXIgYSxvLHM9dVtuXSxjPTEsbD1zLmxlbmd0aCxoPXNbMF0sZj1oWzBdLGQ9aFsxXTtjPGw7KytjKWE9ZixvPWQsaD1zW2NdLGY9aFswXSxkPWhbMV0sbzw9cj9kPnImJihmLWEpKihyLW8pPihkLW8pKih0LWEpJiYrK2U6ZDw9ciYmKGYtYSkqKHItbyk8KGQtbykqKHQtYSkmJi0tZTtyZXR1cm4gZX0oKSxuPXYmJmUsaT0oYz1QKGMpKS5sZW5ndGg7KG58fGkpJiYoby5wb2x5Z29uU3RhcnQoKSxuJiYoby5saW5lU3RhcnQoKSxhKG51bGwsbnVsbCwxLG8pLG8ubGluZUVuZCgpKSxpJiZ2bChjLHMsZSxhLG8pLG8ucG9seWdvbkVuZCgpKTtiPW8sYz11PWw9bnVsbH19O2Z1bmN0aW9uIGsodCxlKXtpKHQsZSkmJmIucG9pbnQodCxlKX1mdW5jdGlvbiB3KGEsbyl7dmFyIHM9aShhLG8pO2lmKHUmJmwucHVzaChbYSxvXSksbSloPWEsZj1vLGQ9cyxtPSExLHMmJihiLmxpbmVTdGFydCgpLGIucG9pbnQoYSxvKSk7ZWxzZSBpZihzJiZnKWIucG9pbnQoYSxvKTtlbHNle3ZhciBjPVtwPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LHApKSx5PU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LHkpKV0seD1bYT1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSxhKSksbz1NYXRoLm1heCgtMWU5LE1hdGgubWluKDFlOSxvKSldOyFmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIG8scz10WzBdLGM9dFsxXSx1PTAsbD0xLGg9ZVswXS1zLGY9ZVsxXS1jO2lmKG89bi1zLGh8fCEobz4wKSl7aWYoby89aCxoPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGg+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89aS1zLGh8fCEobzwwKSl7aWYoby89aCxoPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGg+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfWlmKG89ci1jLGZ8fCEobz4wKSl7aWYoby89ZixmPDApe2lmKG88dSlyZXR1cm47bzxsJiYobD1vKX1lbHNlIGlmKGY+MCl7aWYobz5sKXJldHVybjtvPnUmJih1PW8pfWlmKG89YS1jLGZ8fCEobzwwKSl7aWYoby89ZixmPDApe2lmKG8+bClyZXR1cm47bz51JiYodT1vKX1lbHNlIGlmKGY+MCl7aWYobzx1KXJldHVybjtvPGwmJihsPW8pfXJldHVybiB1PjAmJih0WzBdPXMrdSpoLHRbMV09Yyt1KmYpLGw8MSYmKGVbMF09cytsKmgsZVsxXT1jK2wqZiksITB9fX19fShjLHgsdCxlLG4scik/cyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChhLG8pLHY9ITEpOihnfHwoYi5saW5lU3RhcnQoKSxiLnBvaW50KGNbMF0sY1sxXSkpLGIucG9pbnQoeFswXSx4WzFdKSxzfHxiLmxpbmVFbmQoKSx2PSExKX1wPWEseT1vLGc9c31yZXR1cm4gX319dmFyIE1sLE9sLE5sLEJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHI9MCxpPTAsYT05NjAsbz01MDA7cmV0dXJuIG49e3N0cmVhbTpmdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDp0PUFsKHIsaSxhLG8pKGU9bil9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rc1swXVswXSxpPStzWzBdWzFdLGE9K3NbMV1bMF0sbz0rc1sxXVsxXSx0PWU9bnVsbCxuKTpbW3IsaV0sW2Esb11dfX19LERsPXVjKCksTGw9e3NwaGVyZTpMYyxwb2ludDpMYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtMbC5wb2ludD1SbCxMbC5saW5lRW5kPUlsfSxsaW5lRW5kOkxjLHBvbHlnb25TdGFydDpMYyxwb2x5Z29uRW5kOkxjfTtmdW5jdGlvbiBJbCgpe0xsLnBvaW50PUxsLmxpbmVFbmQ9TGN9ZnVuY3Rpb24gUmwodCxlKXtNbD10Kj12YyxPbD1TYyhlKj12YyksTmw9a2MoZSksTGwucG9pbnQ9Rmx9ZnVuY3Rpb24gRmwodCxlKXt0Kj12Yzt2YXIgbj1TYyhlKj12Yykscj1rYyhlKSxpPWJjKHQtTWwpLGE9a2MoaSksbz1yKlNjKGkpLHM9Tmwqbi1PbCpyKmEsYz1PbCpuK05sKnIqYTtEbC5hZGQoX2MoTWMobypvK3MqcyksYykpLE1sPXQsT2w9bixObD1yfXZhciBQbD1mdW5jdGlvbih0KXtyZXR1cm4gRGwucmVzZXQoKSxXYyh0LExsKSwrRGx9LGpsPVtudWxsLG51bGxdLFlsPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpqbH0semw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gamxbMF09dCxqbFsxXT1lLFBsKFlsKX0sVWw9e0ZlYXR1cmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcWwodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5mZWF0dXJlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKHFsKG5bcl0uZ2VvbWV0cnksZSkpcmV0dXJuITA7cmV0dXJuITF9fSwkbD17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFdsKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5jb29yZGluYXRlcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKFdsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSGwodC5jb29yZGluYXRlcyxlKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuY29vcmRpbmF0ZXMscj0tMSxpPW4ubGVuZ3RoOysrcjxpOylpZihIbChuW3JdLGUpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZsKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpUG9seWdvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10LmNvb3JkaW5hdGVzLHI9LTEsaT1uLmxlbmd0aDsrK3I8aTspaWYoVmwobltyXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXQuZ2VvbWV0cmllcyxyPS0xLGk9bi5sZW5ndGg7KytyPGk7KWlmKHFsKG5bcl0sZSkpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBxbCh0LGUpe3JldHVybiEoIXR8fCEkbC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpKSYmJGxbdC50eXBlXSh0LGUpfWZ1bmN0aW9uIFdsKHQsZSl7cmV0dXJuIDA9PT16bCh0LGUpfWZ1bmN0aW9uIEhsKHQsZSl7Zm9yKHZhciBuLHIsaSxhPTAsbz10Lmxlbmd0aDthPG87YSsrKXtpZigwPT09KHI9emwodFthXSxlKSkpcmV0dXJuITA7aWYoYT4wJiYoaT16bCh0W2FdLHRbYS0xXSkpPjAmJm48PWkmJnI8PWkmJihuK3ItaSkqKDEtTWF0aC5wb3coKG4tcikvaSwyKSk8MWUtMTIqaSlyZXR1cm4hMDtuPXJ9cmV0dXJuITF9ZnVuY3Rpb24gVmwodCxlKXtyZXR1cm4hIWtsKHQubWFwKEdsKSxYbChlKSl9ZnVuY3Rpb24gR2wodCl7cmV0dXJuKHQ9dC5tYXAoWGwpKS5wb3AoKSx0fWZ1bmN0aW9uIFhsKHQpe3JldHVyblt0WzBdKnZjLHRbMV0qdmNdfXZhciBabD1mdW5jdGlvbih0LGUpe3JldHVybih0JiZVbC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP1VsW3QudHlwZV06cWwpKHQsZSl9O2Z1bmN0aW9uIEtsKHQsZSxuKXt2YXIgcj13KHQsZS0xZS02LG4pLmNvbmNhdChlKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHIubWFwKChmdW5jdGlvbihlKXtyZXR1cm5bdCxlXX0pKX19ZnVuY3Rpb24gUWwodCxlLG4pe3ZhciByPXcodCxlLTFlLTYsbikuY29uY2F0KGUpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybltlLHRdfSkpfX1mdW5jdGlvbiBKbCgpe3ZhciB0LGUsbixyLGksYSxvLHMsYyx1LGwsaCxmPTEwLGQ9ZixwPTkwLHk9MzYwLGc9Mi41O2Z1bmN0aW9uIG0oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp2KCl9fWZ1bmN0aW9uIHYoKXtyZXR1cm4gdyh3YyhyL3ApKnAsbixwKS5tYXAobCkuY29uY2F0KHcod2Mocy95KSp5LG8seSkubWFwKGgpKS5jb25jYXQodyh3YyhlL2YpKmYsdCxmKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiYyh0JXApPjFlLTZ9KSkubWFwKGMpKS5jb25jYXQodyh3YyhhL2QpKmQsaSxkKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiYyh0JXkpPjFlLTZ9KSkubWFwKHUpKX1yZXR1cm4gbS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB2KCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19KSl9LG0ub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbbChyKS5jb25jYXQoaChvKS5zbGljZSgxKSxsKG4pLnJldmVyc2UoKS5zbGljZSgxKSxoKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0sbS5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5leHRlbnRNYWpvcih0KS5leHRlbnRNaW5vcih0KTptLmV4dGVudE1pbm9yKCl9LG0uZXh0ZW50TWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sbj0rdFsxXVswXSxzPSt0WzBdWzFdLG89K3RbMV1bMV0scj5uJiYodD1yLHI9bixuPXQpLHM+byYmKHQ9cyxzPW8sbz10KSxtLnByZWNpc2lvbihnKSk6W1tyLHNdLFtuLG9dXX0sbS5leHRlbnRNaW5vcj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rblswXVswXSx0PStuWzFdWzBdLGE9K25bMF1bMV0saT0rblsxXVsxXSxlPnQmJihuPWUsZT10LHQ9biksYT5pJiYobj1hLGE9aSxpPW4pLG0ucHJlY2lzaW9uKGcpKTpbW2UsYV0sW3QsaV1dfSxtLnN0ZXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bS5zdGVwTWFqb3IodCkuc3RlcE1pbm9yKHQpOm0uc3RlcE1pbm9yKCl9LG0uc3RlcE1ham9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSt0WzBdLHk9K3RbMV0sbSk6W3AseV19LG0uc3RlcE1pbm9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sbSk6W2YsZF19LG0ucHJlY2lzaW9uPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStmLGM9S2woYSxpLDkwKSx1PVFsKGUsdCxnKSxsPUtsKHMsbyw5MCksaD1RbChyLG4sZyksbSk6Z30sbS5leHRlbnRNYWpvcihbWy0xODAsLTg5Ljk5OTk5OV0sWzE4MCw4OS45OTk5OTldXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC4wMDAwMDFdLFsxODAsODAuMDAwMDAxXV0pfWZ1bmN0aW9uIHRoKCl7cmV0dXJuIEpsKCkoKX12YXIgZWgsbmgscmgsaWgsYWg9ZnVuY3Rpb24odCxlKXt2YXIgbj10WzBdKnZjLHI9dFsxXSp2YyxpPWVbMF0qdmMsYT1lWzFdKnZjLG89a2Mocikscz1TYyhyKSxjPWtjKGEpLHU9U2MoYSksbD1vKmtjKG4pLGg9bypTYyhuKSxmPWMqa2MoaSksZD1jKlNjKGkpLHA9MipCYyhNYyhEYyhhLXIpK28qYypEYyhpLW4pKSkseT1TYyhwKSxnPXA/ZnVuY3Rpb24odCl7dmFyIGU9U2ModCo9cCkveSxuPVNjKHAtdCkveSxyPW4qbCtlKmYsaT1uKmgrZSpkLGE9bipzK2UqdTtyZXR1cm5bX2MoaSxyKSptYyxfYyhhLE1jKHIqcitpKmkpKSptY119OmZ1bmN0aW9uKCl7cmV0dXJuW24qbWMsciptY119O3JldHVybiBnLmRpc3RhbmNlPXAsZ30sb2g9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHNoPXVjKCksY2g9dWMoKSx1aD17cG9pbnQ6TGMsbGluZVN0YXJ0OkxjLGxpbmVFbmQ6TGMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dWgubGluZVN0YXJ0PWxoLHVoLmxpbmVFbmQ9ZGh9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt1aC5saW5lU3RhcnQ9dWgubGluZUVuZD11aC5wb2ludD1MYyxzaC5hZGQoYmMoY2gpKSxjaC5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1zaC8yO3JldHVybiBzaC5yZXNldCgpLHR9fTtmdW5jdGlvbiBsaCgpe3VoLnBvaW50PWhofWZ1bmN0aW9uIGhoKHQsZSl7dWgucG9pbnQ9ZmgsZWg9cmg9dCxuaD1paD1lfWZ1bmN0aW9uIGZoKHQsZSl7Y2guYWRkKGloKnQtcmgqZSkscmg9dCxpaD1lfWZ1bmN0aW9uIGRoKCl7ZmgoZWgsbmgpfXZhciBwaD11aCx5aD0xLzAsZ2g9eWgsbWg9LXloLHZoPW1oO3ZhciBiaCx4aCxfaCxraCx3aD17cG9pbnQ6ZnVuY3Rpb24odCxlKXt0PHloJiYoeWg9dCk7dD5taCYmKG1oPXQpO2U8Z2gmJihnaD1lKTtlPnZoJiYodmg9ZSl9LGxpbmVTdGFydDpMYyxsaW5lRW5kOkxjLHBvbHlnb25TdGFydDpMYyxwb2x5Z29uRW5kOkxjLHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PVtbeWgsZ2hdLFttaCx2aF1dO3JldHVybiBtaD12aD0tKGdoPXloPTEvMCksdH19LFRoPTAsRWg9MCxDaD0wLFNoPTAsQWg9MCxNaD0wLE9oPTAsTmg9MCxCaD0wLERoPXtwb2ludDpMaCxsaW5lU3RhcnQ6SWgsbGluZUVuZDpQaCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtEaC5saW5lU3RhcnQ9amgsRGgubGluZUVuZD1ZaH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0RoLnBvaW50PUxoLERoLmxpbmVTdGFydD1JaCxEaC5saW5lRW5kPVBofSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1CaD9bT2gvQmgsTmgvQmhdOk1oP1tTaC9NaCxBaC9NaF06Q2g/W1RoL0NoLEVoL0NoXTpbTmFOLE5hTl07cmV0dXJuIFRoPUVoPUNoPVNoPUFoPU1oPU9oPU5oPUJoPTAsdH19O2Z1bmN0aW9uIExoKHQsZSl7VGgrPXQsRWgrPWUsKytDaH1mdW5jdGlvbiBJaCgpe0RoLnBvaW50PVJofWZ1bmN0aW9uIFJoKHQsZSl7RGgucG9pbnQ9RmgsTGgoX2g9dCxraD1lKX1mdW5jdGlvbiBGaCh0LGUpe3ZhciBuPXQtX2gscj1lLWtoLGk9TWMobipuK3Iqcik7U2grPWkqKF9oK3QpLzIsQWgrPWkqKGtoK2UpLzIsTWgrPWksTGgoX2g9dCxraD1lKX1mdW5jdGlvbiBQaCgpe0RoLnBvaW50PUxofWZ1bmN0aW9uIGpoKCl7RGgucG9pbnQ9emh9ZnVuY3Rpb24gWWgoKXtVaChiaCx4aCl9ZnVuY3Rpb24gemgodCxlKXtEaC5wb2ludD1VaCxMaChiaD1faD10LHhoPWtoPWUpfWZ1bmN0aW9uIFVoKHQsZSl7dmFyIG49dC1faCxyPWUta2gsaT1NYyhuKm4rcipyKTtTaCs9aSooX2grdCkvMixBaCs9aSooa2grZSkvMixNaCs9aSxPaCs9KGk9a2gqdC1faCplKSooX2grdCksTmgrPWkqKGtoK2UpLEJoKz0zKmksTGgoX2g9dCxraD1lKX12YXIgJGg9RGg7ZnVuY3Rpb24gcWgodCl7dGhpcy5fY29udGV4dD10fXFoLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhZGl1cz10LHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSksdGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTticmVhaztkZWZhdWx0OnRoaXMuX2NvbnRleHQubW92ZVRvKHQrdGhpcy5fcmFkaXVzLGUpLHRoaXMuX2NvbnRleHQuYXJjKHQsZSx0aGlzLl9yYWRpdXMsMCxnYyl9fSxyZXN1bHQ6TGN9O3ZhciBXaCxIaCxWaCxHaCxYaCxaaD11YygpLEtoPXtwb2ludDpMYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtLaC5wb2ludD1RaH0sbGluZUVuZDpmdW5jdGlvbigpe1doJiZKaChIaCxWaCksS2gucG9pbnQ9TGN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1doPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7V2g9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K1poO3JldHVybiBaaC5yZXNldCgpLHR9fTtmdW5jdGlvbiBRaCh0LGUpe0toLnBvaW50PUpoLEhoPUdoPXQsVmg9WGg9ZX1mdW5jdGlvbiBKaCh0LGUpe0doLT10LFhoLT1lLFpoLmFkZChNYyhHaCpHaCtYaCpYaCkpLEdoPXQsWGg9ZX12YXIgdGY9S2g7ZnVuY3Rpb24gZWYoKXt0aGlzLl9zdHJpbmc9W119ZnVuY3Rpb24gbmYodCl7cmV0dXJuIm0wLCIrdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIistMip0KyJhIit0KyIsIit0KyIgMCAxLDEgMCwiKzIqdCsieiJ9ZWYucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOm5mKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9bmYodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fTt2YXIgcmY9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9NC41O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJigiZnVuY3Rpb24iPT10eXBlb2YgaSYmci5wb2ludFJhZGl1cygraS5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFdjKHQsbihyKSkpLHIucmVzdWx0KCl9cmV0dXJuIGEuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4gV2ModCxuKHBoKSkscGgucmVzdWx0KCl9LGEubWVhc3VyZT1mdW5jdGlvbih0KXtyZXR1cm4gV2ModCxuKHRmKSksdGYucmVzdWx0KCl9LGEuYm91bmRzPWZ1bmN0aW9uKHQpe3JldHVybiBXYyh0LG4od2gpKSx3aC5yZXN1bHQoKX0sYS5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4gV2ModCxuKCRoKSksJGgucmVzdWx0KCl9LGEucHJvamVjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT1lPyh0PW51bGwsb2gpOih0PWUpLnN0cmVhbSxhKTp0fSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bnVsbD09dD8oZT1udWxsLG5ldyBlZik6bmV3IHFoKGU9dCksImZ1bmN0aW9uIiE9dHlwZW9mIGkmJnIucG9pbnRSYWRpdXMoaSksYSk6ZX0sYS5wb2ludFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OihyLnBvaW50UmFkaXVzKCt0KSwrdCksYSk6aX0sYS5wcm9qZWN0aW9uKHQpLmNvbnRleHQoZSl9LGFmPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06b2YodCl9fTtmdW5jdGlvbiBvZih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49bmV3IHNmO2Zvcih2YXIgciBpbiB0KW5bcl09dFtyXTtyZXR1cm4gbi5zdHJlYW09ZSxufX1mdW5jdGlvbiBzZigpe31mdW5jdGlvbiBjZih0LGUsbil7dmFyIHI9dC5jbGlwRXh0ZW50JiZ0LmNsaXBFeHRlbnQoKTtyZXR1cm4gdC5zY2FsZSgxNTApLnRyYW5zbGF0ZShbMCwwXSksbnVsbCE9ciYmdC5jbGlwRXh0ZW50KG51bGwpLFdjKG4sdC5zdHJlYW0od2gpKSxlKHdoLnJlc3VsdCgpKSxudWxsIT1yJiZ0LmNsaXBFeHRlbnQociksdH1mdW5jdGlvbiB1Zih0LGUsbil7cmV0dXJuIGNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPWVbMV1bMF0tZVswXVswXSxpPWVbMV1bMV0tZVswXVsxXSxhPU1hdGgubWluKHIvKG5bMV1bMF0tblswXVswXSksaS8oblsxXVsxXS1uWzBdWzFdKSksbz0rZVswXVswXSsoci1hKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9K2VbMF1bMV0rKGktYSooblsxXVsxXStuWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW28sc10pfSksbil9ZnVuY3Rpb24gbGYodCxlLG4pe3JldHVybiB1Zih0LFtbMCwwXSxlXSxuKX1mdW5jdGlvbiBoZih0LGUsbil7cmV0dXJuIGNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVswXS1uWzBdWzBdKSxhPShyLWkqKG5bMV1bMF0rblswXVswXSkpLzIsbz0taSpuWzBdWzFdO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1mdW5jdGlvbiBmZih0LGUsbil7cmV0dXJuIGNmKHQsKGZ1bmN0aW9uKG4pe3ZhciByPStlLGk9ci8oblsxXVsxXS1uWzBdWzFdKSxhPS1pKm5bMF1bMF0sbz0oci1pKihuWzFdWzFdK25bMF1bMV0pKS8yO3Quc2NhbGUoMTUwKmkpLnRyYW5zbGF0ZShbYSxvXSl9KSxuKX1zZi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnNmLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBkZj1rYygzMCp2YykscGY9ZnVuY3Rpb24odCxlKXtyZXR1cm4rZT9mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4ocixpLGEsbyxzLGMsdSxsLGgsZixkLHAseSxnKXt2YXIgbT11LXIsdj1sLWksYj1tKm0rdip2O2lmKGI+NCplJiZ5LS0pe3ZhciB4PW8rZixfPXMrZCxrPWMrcCx3PU1jKHgqeCtfKl8rayprKSxUPUJjKGsvPXcpLEU9YmMoYmMoayktMSk8MWUtNnx8YmMoYS1oKTwxZS02PyhhK2gpLzI6X2MoXyx4KSxDPXQoRSxUKSxTPUNbMF0sQT1DWzFdLE09Uy1yLE89QS1pLE49dipNLW0qTzsoTipOL2I+ZXx8YmMoKG0qTSt2Kk8pL2ItLjUpPi4zfHxvKmYrcypkK2MqcDxkZikmJihuKHIsaSxhLG8scyxjLFMsQSxFLHgvPXcsXy89dyxrLHksZyksZy5wb2ludChTLEEpLG4oUyxBLEUseCxfLGssdSxsLGgsZixkLHAseSxnKSl9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgcixpLGEsbyxzLGMsdSxsLGgsZixkLHAseT17cG9pbnQ6ZyxsaW5lU3RhcnQ6bSxsaW5lRW5kOmIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSx5LmxpbmVTdGFydD14fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCkseS5saW5lU3RhcnQ9bX19O2Z1bmN0aW9uIGcobixyKXtuPXQobixyKSxlLnBvaW50KG5bMF0sblsxXSl9ZnVuY3Rpb24gbSgpe2w9TmFOLHkucG9pbnQ9dixlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHYocixpKXt2YXIgYT1ldShbcixpXSksbz10KHIsaSk7bihsLGgsdSxmLGQscCxsPW9bMF0saD1vWzFdLHU9cixmPWFbMF0sZD1hWzFdLHA9YVsyXSwxNixlKSxlLnBvaW50KGwsaCl9ZnVuY3Rpb24gYigpe3kucG9pbnQ9ZyxlLmxpbmVFbmQoKX1mdW5jdGlvbiB4KCl7bSgpLHkucG9pbnQ9Xyx5LmxpbmVFbmQ9a31mdW5jdGlvbiBfKHQsZSl7dihyPXQsZSksaT1sLGE9aCxvPWYscz1kLGM9cCx5LnBvaW50PXZ9ZnVuY3Rpb24gaygpe24obCxoLHUsZixkLHAsaSxhLHIsbyxzLGMsMTYsZSkseS5saW5lRW5kPWIsYigpfXJldHVybiB5fX0odCxlKTpmdW5jdGlvbih0KXtyZXR1cm4gb2Yoe3BvaW50OmZ1bmN0aW9uKGUsbil7ZT10KGUsbiksdGhpcy5zdHJlYW0ucG9pbnQoZVswXSxlWzFdKX19KX0odCl9O3ZhciB5Zj1vZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLnN0cmVhbS5wb2ludCh0KnZjLGUqdmMpfX0pO2Z1bmN0aW9uIGdmKHQsZSxuLHIsaSl7ZnVuY3Rpb24gYShhLG8pe3JldHVybltlK3QqKGEqPXIpLG4tdCoobyo9aSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihhLG8pe3JldHVyblsoYS1lKS90KnIsKG4tbykvdCppXX0sYX1mdW5jdGlvbiBtZih0LGUsbixyLGksYSl7dmFyIG89a2MoYSkscz1TYyhhKSxjPW8qdCx1PXMqdCxsPW8vdCxoPXMvdCxmPShzKm4tbyplKS90LGQ9KHMqZStvKm4pL3Q7ZnVuY3Rpb24gcCh0LGEpe3JldHVybltjKih0Kj1yKS11KihhKj1pKStlLG4tdSp0LWMqYV19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IqKGwqdC1oKmUrZiksaSooZC1oKnQtbCplKV19LHB9ZnVuY3Rpb24gdmYodCl7cmV0dXJuIGJmKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gYmYodCl7dmFyIGUsbixyLGksYSxvLHMsYyx1LGwsaD0xNTAsZj00ODAsZD0yNTAscD0wLHk9MCxnPTAsbT0wLHY9MCxiPTAseD0xLF89MSxrPW51bGwsdz1DbCxUPW51bGwsRT1vaCxDPS41O2Z1bmN0aW9uIFModCl7cmV0dXJuIGModFswXSp2Yyx0WzFdKnZjKX1mdW5jdGlvbiBBKHQpe3JldHVybih0PWMuaW52ZXJ0KHRbMF0sdFsxXSkpJiZbdFswXSptYyx0WzFdKm1jXX1mdW5jdGlvbiBNKCl7dmFyIHQ9bWYoaCwwLDAseCxfLGIpLmFwcGx5KG51bGwsZShwLHkpKSxyPShiP21mOmdmKShoLGYtdFswXSxkLXRbMV0seCxfLGIpO3JldHVybiBuPXNsKGcsbSx2KSxzPWFsKGUsciksYz1hbChuLHMpLG89cGYocyxDKSxPKCl9ZnVuY3Rpb24gTygpe3JldHVybiB1PWw9bnVsbCxTfXJldHVybiBTLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gdSYmbD09PXQ/dTp1PXlmKGZ1bmN0aW9uKHQpe3JldHVybiBvZih7cG9pbnQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj10KGUsbik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSl9KG4pKHcobyhFKGw9dCkpKSkpfSxTLnByZWNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dCxrPXZvaWQgMCxPKCkpOnd9LFMucG9zdGNsaXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9dCxUPXI9aT1hPW51bGwsTygpKTpFfSxTLmNsaXBBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odz0rdD9TbChrPXQqdmMpOihrPW51bGwsQ2wpLE8oKSk6ayptY30sUy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFQ9cj1pPWE9bnVsbCxvaCk6QWwoVD0rdFswXVswXSxyPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTygpKTpudWxsPT1UP251bGw6W1tULHJdLFtpLGFdXX0sUy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rdCxNKCkpOmh9LFMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPSt0WzBdLGQ9K3RbMV0sTSgpKTpbZixkXX0sUy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dFswXSUzNjAqdmMseT10WzFdJTM2MCp2YyxNKCkpOltwKm1jLHkqbWNdfSxTLnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10WzBdJTM2MCp2YyxtPXRbMV0lMzYwKnZjLHY9dC5sZW5ndGg+Mj90WzJdJTM2MCp2YzowLE0oKSk6W2cqbWMsbSptYyx2Km1jXX0sUy5hbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYj10JTM2MCp2YyxNKCkpOmIqbWN9LFMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHg9dD8tMToxLE0oKSk6eDwwfSxTLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQ/LTE6MSxNKCkpOl88MH0sUy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cGYocyxDPXQqdCksTygpKTpNYyhDKX0sUy5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYoUyx0LGUpfSxTLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbGYoUyx0LGUpfSxTLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGhmKFMsdCxlKX0sUy5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmYoUyx0LGUpfSxmdW5jdGlvbigpe3JldHVybiBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFMuaW52ZXJ0PWUuaW52ZXJ0JiZBLE0oKX19ZnVuY3Rpb24geGYodCl7dmFyIGU9MCxuPWRjLzMscj1iZih0KSxpPXIoZSxuKTtyZXR1cm4gaS5wYXJhbGxlbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihlPXRbMF0qdmMsbj10WzFdKnZjKTpbZSptYyxuKm1jXX0saX1mdW5jdGlvbiBfZih0LGUpe3ZhciBuPVNjKHQpLHI9KG4rU2MoZSkpLzI7aWYoYmMocik8MWUtNilyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9a2ModCk7ZnVuY3Rpb24gbih0LG4pe3JldHVyblt0KmUsU2MobikvZV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuW3QvZSxCYyhuKmUpXX0sbn0odCk7dmFyIGk9MStuKigyKnItbiksYT1NYyhpKS9yO2Z1bmN0aW9uIG8odCxlKXt2YXIgbj1NYyhpLTIqcipTYyhlKSkvcjtyZXR1cm5bbipTYyh0Kj1yKSxhLW4qa2ModCldfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPWEtZSxvPV9jKHQsYmMobikpKkFjKG4pO3JldHVybiBuKnI8MCYmKG8tPWRjKkFjKHQpKkFjKG4pKSxbby9yLEJjKChpLSh0KnQrbipuKSpyKnIpLygyKnIpKV19LG99dmFyIGtmPWZ1bmN0aW9uKCl7cmV0dXJuIHhmKF9mKS5zY2FsZSgxNTUuNDI0KS5jZW50ZXIoWzAsMzMuNjQ0Ml0pfSx3Zj1mdW5jdGlvbigpe3JldHVybiBrZigpLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCkudHJhbnNsYXRlKFs0ODAsMjUwXSkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pfTt2YXIgVGY9ZnVuY3Rpb24oKXt2YXIgdCxlLG4scixpLGEsbz13ZigpLHM9a2YoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLGM9a2YoKS5yb3RhdGUoWzE1NywwXSkuY2VudGVyKFstMywxOS45XSkucGFyYWxsZWxzKFs4LDE4XSksdT17cG9pbnQ6ZnVuY3Rpb24odCxlKXthPVt0LGVdfX07ZnVuY3Rpb24gbCh0KXt2YXIgZT10WzBdLG89dFsxXTtyZXR1cm4gYT1udWxsLG4ucG9pbnQoZSxvKSxhfHwoci5wb2ludChlLG8pLGEpfHwoaS5wb2ludChlLG8pLGEpfWZ1bmN0aW9uIGgoKXtyZXR1cm4gdD1lPW51bGwsbH1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9by5zY2FsZSgpLG49by50cmFuc2xhdGUoKSxyPSh0WzBdLW5bMF0pL2UsaT0odFsxXS1uWzFdKS9lO3JldHVybihpPj0uMTImJmk8LjIzNCYmcj49LS40MjUmJnI8LS4yMTQ/czppPj0uMTY2JiZpPC4yMzQmJnI+PS0uMjE0JiZyPC0uMTE1P2M6bykuaW52ZXJ0KHQpfSxsLnN0cmVhbT1mdW5jdGlvbihuKXtyZXR1cm4gdCYmZT09PW4/dDoocj1bby5zdHJlYW0oZT1uKSxzLnN0cmVhbShuKSxjLnN0cmVhbShuKV0saT1yLmxlbmd0aCx0PXtwb2ludDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMTsrK248aTspcltuXS5wb2ludCh0LGUpfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KXJbdF0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgdD0tMTsrK3Q8aTspclt0XS5wb2x5Z29uRW5kKCl9fSk7dmFyIHIsaX0sbC5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8ucHJlY2lzaW9uKHQpLHMucHJlY2lzaW9uKHQpLGMucHJlY2lzaW9uKHQpLGgoKSk6by5wcmVjaXNpb24oKX0sbC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oby5zY2FsZSh0KSxzLnNjYWxlKC4zNSp0KSxjLnNjYWxlKHQpLGwudHJhbnNsYXRlKG8udHJhbnNsYXRlKCkpKTpvLnNjYWxlKCl9LGwudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBvLnRyYW5zbGF0ZSgpO3ZhciBlPW8uc2NhbGUoKSxhPSt0WzBdLGw9K3RbMV07cmV0dXJuIG49by50cmFuc2xhdGUodCkuY2xpcEV4dGVudChbW2EtLjQ1NSplLGwtLjIzOCplXSxbYSsuNDU1KmUsbCsuMjM4KmVdXSkuc3RyZWFtKHUpLHI9cy50cmFuc2xhdGUoW2EtLjMwNyplLGwrLjIwMSplXSkuY2xpcEV4dGVudChbW2EtLjQyNSplKzFlLTYsbCsuMTIqZSsxZS02XSxbYS0uMjE0KmUtMWUtNixsKy4yMzQqZS0xZS02XV0pLnN0cmVhbSh1KSxpPWMudHJhbnNsYXRlKFthLS4yMDUqZSxsKy4yMTIqZV0pLmNsaXBFeHRlbnQoW1thLS4yMTQqZSsxZS02LGwrLjE2NiplKzFlLTZdLFthLS4xMTUqZS0xZS02LGwrLjIzNCplLTFlLTZdXSkuc3RyZWFtKHUpLGgoKX0sbC5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYobCx0LGUpfSxsLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbGYobCx0LGUpfSxsLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGhmKGwsdCxlKX0sbC5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmYobCx0LGUpfSxsLnNjYWxlKDEwNzApfTtmdW5jdGlvbiBFZih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj1rYyhlKSxpPWtjKG4pLGE9dChyKmkpO3JldHVyblthKmkqU2MoZSksYSpTYyhuKV19fWZ1bmN0aW9uIENmKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPU1jKGUqZStuKm4pLGk9dChyKSxhPVNjKGkpLG89a2MoaSk7cmV0dXJuW19jKGUqYSxyKm8pLEJjKHImJm4qYS9yKV19fXZhciBTZj1FZigoZnVuY3Rpb24odCl7cmV0dXJuIE1jKDIvKDErdCkpfSkpO1NmLmludmVydD1DZigoZnVuY3Rpb24odCl7cmV0dXJuIDIqQmModC8yKX0pKTt2YXIgQWY9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoU2YpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSxNZj1FZigoZnVuY3Rpb24odCl7cmV0dXJuKHQ9TmModCkpJiZ0L1NjKHQpfSkpO01mLmludmVydD1DZigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7dmFyIE9mPWZ1bmN0aW9uKCl7cmV0dXJuIHZmKE1mKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9O2Z1bmN0aW9uIE5mKHQsZSl7cmV0dXJuW3QsRWMoT2MoKHBjK2UpLzIpKV19TmYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QsMip4YyhUYyhlKSktcGNdfTt2YXIgQmY9ZnVuY3Rpb24oKXtyZXR1cm4gRGYoTmYpLnNjYWxlKDk2MS9nYyl9O2Z1bmN0aW9uIERmKHQpe3ZhciBlLG4scixpPXZmKHQpLGE9aS5jZW50ZXIsbz1pLnNjYWxlLHM9aS50cmFuc2xhdGUsYz1pLmNsaXBFeHRlbnQsdT1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYT1kYypvKCkscz1pKGhsKGkucm90YXRlKCkpLmludmVydChbMCwwXSkpO3JldHVybiBjKG51bGw9PXU/W1tzWzBdLWEsc1sxXS1hXSxbc1swXSthLHNbMV0rYV1dOnQ9PT1OZj9bW01hdGgubWF4KHNbMF0tYSx1KSxlXSxbTWF0aC5taW4oc1swXSthLG4pLHJdXTpbW3UsTWF0aC5tYXgoc1sxXS1hLGUpXSxbbixNYXRoLm1pbihzWzFdK2EscildXSl9cmV0dXJuIGkuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG8odCksbCgpKTpvKCl9LGkudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzKHQpLGwoKSk6cygpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYSh0KSxsKCkpOmEoKX0saS5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3U9ZT1uPXI9bnVsbDoodT0rdFswXVswXSxlPSt0WzBdWzFdLG49K3RbMV1bMF0scj0rdFsxXVsxXSksbCgpKTpudWxsPT11P251bGw6W1t1LGVdLFtuLHJdXX0sbCgpfWZ1bmN0aW9uIExmKHQpe3JldHVybiBPYygocGMrdCkvMil9ZnVuY3Rpb24gSWYodCxlKXt2YXIgbj1rYyh0KSxyPXQ9PT1lP1NjKHQpOkVjKG4va2MoZSkpL0VjKExmKGUpL0xmKHQpKSxpPW4qQ2MoTGYodCkscikvcjtpZighcilyZXR1cm4gTmY7ZnVuY3Rpb24gYSh0LGUpe2k+MD9lPDFlLTYtcGMmJihlPTFlLTYtcGMpOmU+cGMtMWUtNiYmKGU9cGMtMWUtNik7dmFyIG49aS9DYyhMZihlKSxyKTtyZXR1cm5bbipTYyhyKnQpLGktbiprYyhyKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1BYyhyKSpNYyh0KnQrbipuKSxvPV9jKHQsYmMobikpKkFjKG4pO3JldHVybiBuKnI8MCYmKG8tPWRjKkFjKHQpKkFjKG4pKSxbby9yLDIqeGMoQ2MoaS9hLDEvcikpLXBjXX0sYX12YXIgUmY9ZnVuY3Rpb24oKXtyZXR1cm4geGYoSWYpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9O2Z1bmN0aW9uIEZmKHQsZSl7cmV0dXJuW3QsZV19RmYuaW52ZXJ0PUZmO3ZhciBQZj1mdW5jdGlvbigpe3JldHVybiB2ZihGZikuc2NhbGUoMTUyLjYzKX07ZnVuY3Rpb24gamYodCxlKXt2YXIgbj1rYyh0KSxyPXQ9PT1lP1NjKHQpOihuLWtjKGUpKS8oZS10KSxpPW4vcit0O2lmKGJjKHIpPDFlLTYpcmV0dXJuIEZmO2Z1bmN0aW9uIGEodCxlKXt2YXIgbj1pLWUsYT1yKnQ7cmV0dXJuW24qU2MoYSksaS1uKmtjKGEpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLWUsYT1fYyh0LGJjKG4pKSpBYyhuKTtyZXR1cm4gbipyPDAmJihhLT1kYypBYyh0KSpBYyhuKSksW2EvcixpLUFjKHIpKk1jKHQqdCtuKm4pXX0sYX12YXIgWWY9ZnVuY3Rpb24oKXtyZXR1cm4geGYoamYpLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LHpmPTEuMzQwMjY0LFVmPS0uMDgxMTA2LCRmPTg5M2UtNixxZj0uMDAzNzk2LFdmPU1jKDMpLzI7ZnVuY3Rpb24gSGYodCxlKXt2YXIgbj1CYyhXZipTYyhlKSkscj1uKm4saT1yKnIqcjtyZXR1cm5bdCprYyhuKS8oV2YqKHpmKzMqVWYqcitpKig3KiRmKzkqcWYqcikpKSxuKih6ZitVZipyK2kqKCRmK3FmKnIpKV19SGYuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHI9ZSxpPXIqcixhPWkqaSppLG89MDtvPDEyJiYoYT0oaT0oci09bj0ociooemYrVWYqaSthKigkZitxZippKSktZSkvKHpmKzMqVWYqaSthKig3KiRmKzkqcWYqaSkpKSpyKSppKmksIShiYyhuKTwxZS0xMikpOysrbyk7cmV0dXJuW1dmKnQqKHpmKzMqVWYqaSthKig3KiRmKzkqcWYqaSkpL2tjKHIpLEJjKFNjKHIpL1dmKV19O3ZhciBWZj1mdW5jdGlvbigpe3JldHVybiB2ZihIZikuc2NhbGUoMTc3LjE1OCl9O2Z1bmN0aW9uIEdmKHQsZSl7dmFyIG49a2MoZSkscj1rYyh0KSpuO3JldHVybltuKlNjKHQpL3IsU2MoZSkvcl19R2YuaW52ZXJ0PUNmKHhjKTt2YXIgWGY9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoR2YpLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LFpmPWZ1bmN0aW9uKCl7dmFyIHQsZSxuLHIsaSxhLG8scz0xLGM9MCx1PTAsbD0xLGg9MSxmPTAsZD1udWxsLHA9MSx5PTEsZz1vZih7cG9pbnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1iKFt0LGVdKTt0aGlzLnN0cmVhbS5wb2ludChuWzBdLG5bMV0pfX0pLG09b2g7ZnVuY3Rpb24gdigpe3JldHVybiBwPXMqbCx5PXMqaCxhPW89bnVsbCxifWZ1bmN0aW9uIGIobil7dmFyIHI9blswXSpwLGk9blsxXSp5O2lmKGYpe3ZhciBhPWkqdC1yKmU7cj1yKnQraSplLGk9YX1yZXR1cm5bcitjLGkrdV19cmV0dXJuIGIuaW52ZXJ0PWZ1bmN0aW9uKG4pe3ZhciByPW5bMF0tYyxpPW5bMV0tdTtpZihmKXt2YXIgYT1pKnQrciplO3I9cip0LWkqZSxpPWF9cmV0dXJuW3IvcCxpL3ldfSxiLnN0cmVhbT1mdW5jdGlvbih0KXtyZXR1cm4gYSYmbz09PXQ/YTphPWcobShvPXQpKX0sYi5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT10LGQ9bj1yPWk9bnVsbCx2KCkpOm19LGIuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1udWxsPT10PyhkPW49cj1pPW51bGwsb2gpOkFsKGQ9K3RbMF1bMF0sbj0rdFswXVsxXSxyPSt0WzFdWzBdLGk9K3RbMV1bMV0pLHYoKSk6bnVsbD09ZD9udWxsOltbZCxuXSxbcixpXV19LGIuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsdigpKTpzfSxiLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rdFswXSx1PSt0WzFdLHYoKSk6W2MsdV19LGIuYW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9U2MoZj1uJTM2MCp2YyksdD1rYyhmKSx2KCkpOmYqbWN9LGIucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dD8tMToxLHYoKSk6bDwwfSxiLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXQ/LTE6MSx2KCkpOmg8MH0sYi5maXRFeHRlbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWYoYix0LGUpfSxiLmZpdFNpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbGYoYix0LGUpfSxiLmZpdFdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGhmKGIsdCxlKX0sYi5maXRIZWlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmYoYix0LGUpfSxifTtmdW5jdGlvbiBLZih0LGUpe3ZhciBuPWUqZSxyPW4qbjtyZXR1cm5bdCooLjg3MDctLjEzMTk3OSpuK3IqKHIqKC4wMDM5NzEqbi0uMDAxNTI5KnIpLS4wMTM3OTEpKSxlKigxLjAwNzIyNituKiguMDE1MDg1K3IqKC4wMjg4NzQqbi0uMDQ0NDc1LS4wMDU5MTYqcikpKV19S2YuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj1lLGk9MjU7ZG97dmFyIGE9cipyLG89YSphO3ItPW49KHIqKDEuMDA3MjI2K2EqKC4wMTUwODUrbyooLjAyODg3NCphLS4wNDQ0NzUtLjAwNTkxNipvKSkpLWUpLygxLjAwNzIyNithKiguMDQ1MjU1K28qKC4yNTk4NjYqYS0uMzExMzI1LS4wMDU5MTYqMTEqbykpKX13aGlsZShiYyhuKT4xZS02JiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPXIqcikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLHJdfTt2YXIgUWY9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoS2YpLnNjYWxlKDE3NS4yOTUpfTtmdW5jdGlvbiBKZih0LGUpe3JldHVybltrYyhlKSpTYyh0KSxTYyhlKV19SmYuaW52ZXJ0PUNmKEJjKTt2YXIgdGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdmYoSmYpLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTAuMDAwMDAxKX07ZnVuY3Rpb24gZWQodCxlKXt2YXIgbj1rYyhlKSxyPTEra2ModCkqbjtyZXR1cm5bbipTYyh0KS9yLFNjKGUpL3JdfWVkLmludmVydD1DZigoZnVuY3Rpb24odCl7cmV0dXJuIDIqeGModCl9KSk7dmFyIG5kPWZ1bmN0aW9uKCl7cmV0dXJuIHZmKGVkKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxNDIpfTtmdW5jdGlvbiByZCh0LGUpe3JldHVybltFYyhPYygocGMrZSkvMikpLC10XX1yZC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bLWUsMip4YyhUYyh0KSktcGNdfTt2YXIgaWQ9ZnVuY3Rpb24oKXt2YXIgdD1EZihyZCksZT10LmNlbnRlcixuPXQucm90YXRlO3JldHVybiB0LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKFstdFsxXSx0WzBdXSk6Wyh0PWUoKSlbMV0sLXRbMF1dfSx0LnJvdGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKFt0WzBdLHRbMV0sdC5sZW5ndGg+Mj90WzJdKzkwOjkwXSk6Wyh0PW4oKSlbMF0sdFsxXSx0WzJdLTkwXX0sbihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9O2Z1bmN0aW9uIGFkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIG9kKHQsZSl7cmV0dXJuIHQrZS54fWZ1bmN0aW9uIHNkKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX12YXIgY2Q9ZnVuY3Rpb24oKXt2YXIgdD1hZCxlPTEsbj0xLHI9ITE7ZnVuY3Rpb24gaShpKXt2YXIgYSxvPTA7aS5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hpbGRyZW47bj8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShvZCwwKS90Lmxlbmd0aH0obiksZS55PWZ1bmN0aW9uKHQpe3JldHVybiAxK3QucmVkdWNlKHNkLDApfShuKSk6KGUueD1hP28rPXQoZSxhKTowLGUueT0wLGE9ZSl9KSk7dmFyIHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlO2U9dC5jaGlsZHJlbjspdD1lWzBdO3JldHVybiB0fShpKSxjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVtlLmxlbmd0aC0xXTtyZXR1cm4gdH0oaSksdT1zLngtdChzLGMpLzIsbD1jLngrdChjLHMpLzI7cmV0dXJuIGkuZWFjaEFmdGVyKHI/ZnVuY3Rpb24odCl7dC54PSh0LngtaS54KSplLHQueT0oaS55LXQueSkqbn06ZnVuY3Rpb24odCl7dC54PSh0LngtdSkvKGwtdSkqZSx0Lnk9KDEtKGkueT90LnkvaS55OjEpKSpufSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxlPSt0WzBdLG49K3RbMV0saSk6cj9udWxsOltlLG5dfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLGU9K3RbMF0sbj0rdFsxXSxpKTpyP1tlLG5dOm51bGx9LGl9O2Z1bmN0aW9uIHVkKHQpe3ZhciBlPTAsbj10LmNoaWxkcmVuLHI9biYmbi5sZW5ndGg7aWYocilmb3IoOy0tcj49MDspZSs9bltyXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gbGQodCxlKXt2YXIgbixyLGksYSxvLHM9bmV3IHBkKHQpLGM9K3QudmFsdWUmJihzLnZhbHVlPXQudmFsdWUpLHU9W3NdO2ZvcihudWxsPT1lJiYoZT1oZCk7bj11LnBvcCgpOylpZihjJiYobi52YWx1ZT0rbi5kYXRhLnZhbHVlKSwoaT1lKG4uZGF0YSkpJiYobz1pLmxlbmd0aCkpZm9yKG4uY2hpbGRyZW49bmV3IEFycmF5KG8pLGE9by0xO2E+PTA7LS1hKXUucHVzaChyPW4uY2hpbGRyZW5bYV09bmV3IHBkKGlbYV0pKSxyLnBhcmVudD1uLHIuZGVwdGg9bi5kZXB0aCsxO3JldHVybiBzLmVhY2hCZWZvcmUoZGQpfWZ1bmN0aW9uIGhkKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIGZkKHQpe3QuZGF0YT10LmRhdGEuZGF0YX1mdW5jdGlvbiBkZCh0KXt2YXIgZT0wO2Rve3QuaGVpZ2h0PWV9d2hpbGUoKHQ9dC5wYXJlbnQpJiZ0LmhlaWdodDwrK2UpfWZ1bmN0aW9uIHBkKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfXBkLnByb3RvdHlwZT1sZC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnBkLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKHVkKX0sZWFjaDpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhPXRoaXMsbz1bYV07ZG97Zm9yKGU9by5yZXZlcnNlKCksbz1bXTthPWUucG9wKCk7KWlmKHQoYSksbj1hLmNoaWxkcmVuKWZvcihyPTAsaT1uLmxlbmd0aDtyPGk7KytyKW8ucHVzaChuW3JdKX13aGlsZShvLmxlbmd0aCk7cmV0dXJuIHRoaXN9LGVhY2hBZnRlcjpmdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGk9dGhpcyxhPVtpXSxvPVtdO2k9YS5wb3AoKTspaWYoby5wdXNoKGkpLGU9aS5jaGlsZHJlbilmb3Iobj0wLHI9ZS5sZW5ndGg7bjxyOysrbilhLnB1c2goZVtuXSk7Zm9yKDtpPW8ucG9wKCk7KXQoaSk7cmV0dXJuIHRoaXN9LGVhY2hCZWZvcmU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj10aGlzLGk9W3JdO3I9aS5wb3AoKTspaWYodChyKSxlPXIuY2hpbGRyZW4pZm9yKG49ZS5sZW5ndGgtMTtuPj0wOy0tbilpLnB1c2goZVtuXSk7cmV0dXJuIHRoaXN9LHN1bTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0rdChlLmRhdGEpfHwwLHI9ZS5jaGlsZHJlbixpPXImJnIubGVuZ3RoOy0taT49MDspbis9cltpXS52YWx1ZTtlLnZhbHVlPW59KSl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaEJlZm9yZSgoZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5zb3J0KHQpfSkpfSxwYXRoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLG49ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gdDt2YXIgbj10LmFuY2VzdG9ycygpLHI9ZS5hbmNlc3RvcnMoKSxpPW51bGw7dD1uLnBvcCgpLGU9ci5wb3AoKTtmb3IoO3Q9PT1lOylpPXQsdD1uLnBvcCgpLGU9ci5wb3AoKTtyZXR1cm4gaX0oZSx0KSxyPVtlXTtlIT09bjspZT1lLnBhcmVudCxyLnB1c2goZSk7Zm9yKHZhciBpPXIubGVuZ3RoO3QhPT1uOylyLnNwbGljZShpLDAsdCksdD10LnBhcmVudDtyZXR1cm4gcn0sYW5jZXN0b3JzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bdF07dD10LnBhcmVudDspZS5wdXNoKHQpO3JldHVybiBlfSxkZXNjZW5kYW50czpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSx0fSxsZWF2ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVufHx0LnB1c2goZSl9KSksdH0sbGlua3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9W107cmV0dXJuIHQuZWFjaCgoZnVuY3Rpb24obil7biE9PXQmJmUucHVzaCh7c291cmNlOm4ucGFyZW50LHRhcmdldDpufSl9KSksZX0sY29weTpmdW5jdGlvbigpe3JldHVybiBsZCh0aGlzKS5lYWNoQmVmb3JlKGZkKX19O3ZhciB5ZD1BcnJheS5wcm90b3R5cGUuc2xpY2U7dmFyIGdkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9dC5sZW5ndGg7cjspbj1NYXRoLnJhbmRvbSgpKnItLXwwLGU9dFtyXSx0W3JdPXRbbl0sdFtuXT1lO3JldHVybiB0fSh5ZC5jYWxsKHQpKSkubGVuZ3RoLGE9W107cjxpOyllPXRbcl0sbiYmYmQobixlKT8rK3I6KG49X2QoYT1tZChhLGUpKSxyPTApO3JldHVybiBufTtmdW5jdGlvbiBtZCh0LGUpe3ZhciBuLHI7aWYoeGQoZSx0KSlyZXR1cm5bZV07Zm9yKG49MDtuPHQubGVuZ3RoOysrbilpZih2ZChlLHRbbl0pJiZ4ZChrZCh0W25dLGUpLHQpKXJldHVyblt0W25dLGVdO2ZvcihuPTA7bjx0Lmxlbmd0aC0xOysrbilmb3Iocj1uKzE7cjx0Lmxlbmd0aDsrK3IpaWYodmQoa2QodFtuXSx0W3JdKSxlKSYmdmQoa2QodFtuXSxlKSx0W3JdKSYmdmQoa2QodFtyXSxlKSx0W25dKSYmeGQod2QodFtuXSx0W3JdLGUpLHQpKXJldHVyblt0W25dLHRbcl0sZV07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHZkKHQsZSl7dmFyIG49dC5yLWUucixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPDB8fG4qbjxyKnIraSppfWZ1bmN0aW9uIGJkKHQsZSl7dmFyIG49dC5yLWUucisxZS02LHI9ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIG4+MCYmbipuPnIqcitpKml9ZnVuY3Rpb24geGQodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoOysrbilpZighYmQodCxlW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBfZCh0KXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm57eDooZT10WzBdKS54LHk6ZS55LHI6ZS5yfTtjYXNlIDI6cmV0dXJuIGtkKHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiB3ZCh0WzBdLHRbMV0sdFsyXSl9dmFyIGV9ZnVuY3Rpb24ga2QodCxlKXt2YXIgbj10Lngscj10LnksaT10LnIsYT1lLngsbz1lLnkscz1lLnIsYz1hLW4sdT1vLXIsbD1zLWksaD1NYXRoLnNxcnQoYypjK3UqdSk7cmV0dXJue3g6KG4rYStjL2gqbCkvMix5OihyK28rdS9oKmwpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHdkKHQsZSxuKXt2YXIgcj10LngsaT10LnksYT10LnIsbz1lLngscz1lLnksYz1lLnIsdT1uLngsbD1uLnksaD1uLnIsZj1yLW8sZD1yLXUscD1pLXMseT1pLWwsZz1jLWEsbT1oLWEsdj1yKnIraSppLWEqYSxiPXYtbypvLXMqcytjKmMseD12LXUqdS1sKmwraCpoLF89ZCpwLWYqeSxrPShwKngteSpiKS8oMipfKS1yLHc9KHkqZy1wKm0pL18sVD0oZCpiLWYqeCkvKDIqXyktaSxFPShmKm0tZCpnKS9fLEM9dyp3K0UqRS0xLFM9MiooYStrKncrVCpFKSxBPWsqaytUKlQtYSphLE09LShDPyhTK01hdGguc3FydChTKlMtNCpDKkEpKS8oMipDKTpBL1MpO3JldHVybnt4OnIrayt3Kk0seTppK1QrRSpNLHI6TX19ZnVuY3Rpb24gVGQodCxlLG4pe3ZhciByLGksYSxvLHM9dC54LWUueCxjPXQueS1lLnksdT1zKnMrYypjO3U/KGk9ZS5yK24ucixpKj1pLG89dC5yK24ucixpPihvKj1vKT8ocj0odStvLWkpLygyKnUpLGE9TWF0aC5zcXJ0KE1hdGgubWF4KDAsby91LXIqcikpLG4ueD10LngtcipzLWEqYyxuLnk9dC55LXIqYythKnMpOihyPSh1K2ktbykvKDIqdSksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxpL3UtcipyKSksbi54PWUueCtyKnMtYSpjLG4ueT1lLnkrcipjK2EqcykpOihuLng9ZS54K24ucixuLnk9ZS55KX1mdW5jdGlvbiBFZCh0LGUpe3ZhciBuPXQucitlLnItMWUtNixyPWUueC10LngsaT1lLnktdC55O3JldHVybiBuPjAmJm4qbj5yKnIraSppfWZ1bmN0aW9uIENkKHQpe3ZhciBlPXQuXyxuPXQubmV4dC5fLHI9ZS5yK24ucixpPShlLngqbi5yK24ueCplLnIpL3IsYT0oZS55Km4ucituLnkqZS5yKS9yO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIFNkKHQpe3RoaXMuXz10LHRoaXMubmV4dD1udWxsLHRoaXMucHJldmlvdXM9bnVsbH1mdW5jdGlvbiBBZCh0KXtpZighKGk9dC5sZW5ndGgpKXJldHVybiAwO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg7aWYoKGU9dFswXSkueD0wLGUueT0wLCEoaT4xKSlyZXR1cm4gZS5yO2lmKG49dFsxXSxlLng9LW4ucixuLng9ZS5yLG4ueT0wLCEoaT4yKSlyZXR1cm4gZS5yK24ucjtUZChuLGUscj10WzJdKSxlPW5ldyBTZChlKSxuPW5ldyBTZChuKSxyPW5ldyBTZChyKSxlLm5leHQ9ci5wcmV2aW91cz1uLG4ubmV4dD1lLnByZXZpb3VzPXIsci5uZXh0PW4ucHJldmlvdXM9ZTt0OmZvcihzPTM7czxpOysrcyl7VGQoZS5fLG4uXyxyPXRbc10pLHI9bmV3IFNkKHIpLGM9bi5uZXh0LHU9ZS5wcmV2aW91cyxsPW4uXy5yLGg9ZS5fLnI7ZG97aWYobDw9aCl7aWYoRWQoYy5fLHIuXykpe249YyxlLm5leHQ9bixuLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9bCs9Yy5fLnIsYz1jLm5leHR9ZWxzZXtpZihFZCh1Ll8sci5fKSl7KGU9dSkubmV4dD1uLG4ucHJldmlvdXM9ZSwtLXM7Y29udGludWUgdH1oKz11Ll8ucix1PXUucHJldmlvdXN9fXdoaWxlKGMhPT11Lm5leHQpO2ZvcihyLnByZXZpb3VzPWUsci5uZXh0PW4sZS5uZXh0PW4ucHJldmlvdXM9bj1yLGE9Q2QoZSk7KHI9ci5uZXh0KSE9PW47KShvPUNkKHIpKTxhJiYoZT1yLGE9byk7bj1lLm5leHR9Zm9yKGU9W24uX10scj1uOyhyPXIubmV4dCkhPT1uOyllLnB1c2goci5fKTtmb3Iocj1nZChlKSxzPTA7czxpOysrcykoZT10W3NdKS54LT1yLngsZS55LT1yLnk7cmV0dXJuIHIucn12YXIgTWQ9ZnVuY3Rpb24odCl7cmV0dXJuIEFkKHQpLHR9O2Z1bmN0aW9uIE9kKHQpe3JldHVybiBudWxsPT10P251bGw6TmQodCl9ZnVuY3Rpb24gTmQodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIEJkKCl7cmV0dXJuIDB9dmFyIERkPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX07ZnVuY3Rpb24gTGQodCl7cmV0dXJuIE1hdGguc3FydCh0LnZhbHVlKX12YXIgSWQ9ZnVuY3Rpb24oKXt2YXIgdD1udWxsLGU9MSxuPTEscj1CZDtmdW5jdGlvbiBpKGkpe3JldHVybiBpLng9ZS8yLGkueT1uLzIsdD9pLmVhY2hCZWZvcmUoUmQodCkpLmVhY2hBZnRlcihGZChyLC41KSkuZWFjaEJlZm9yZShQZCgxKSk6aS5lYWNoQmVmb3JlKFJkKExkKSkuZWFjaEFmdGVyKEZkKEJkLDEpKS5lYWNoQWZ0ZXIoRmQocixpLnIvTWF0aC5taW4oZSxuKSkpLmVhY2hCZWZvcmUoUGQoTWF0aC5taW4oZSxuKS8oMippLnIpKSksaX1yZXR1cm4gaS5yYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9T2QoZSksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLG49K3RbMV0saSk6W2Usbl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxpKTpyfSxpfTtmdW5jdGlvbiBSZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEZkKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKHI9bi5jaGlsZHJlbil7dmFyIHIsaSxhLG89ci5sZW5ndGgscz10KG4pKmV8fDA7aWYocylmb3IoaT0wO2k8bzsrK2kpcltpXS5yKz1zO2lmKGE9QWQocikscylmb3IoaT0wO2k8bzsrK2kpcltpXS5yLT1zO24ucj1hK3N9fX1mdW5jdGlvbiBQZCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49ZS5wYXJlbnQ7ZS5yKj10LG4mJihlLng9bi54K3QqZS54LGUueT1uLnkrdCplLnkpfX12YXIgamQ9ZnVuY3Rpb24odCl7dC54MD1NYXRoLnJvdW5kKHQueDApLHQueTA9TWF0aC5yb3VuZCh0LnkwKSx0LngxPU1hdGgucm91bmQodC54MSksdC55MT1NYXRoLnJvdW5kKHQueTEpfSxZZD1mdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgYSxvPXQuY2hpbGRyZW4scz0tMSxjPW8ubGVuZ3RoLHU9dC52YWx1ZSYmKHItZSkvdC52YWx1ZTsrK3M8YzspKGE9b1tzXSkueTA9bixhLnkxPWksYS54MD1lLGEueDE9ZSs9YS52YWx1ZSp1fSx6ZD1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLG49MCxyPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGE9aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPW4saS54MT10LGkueTE9ZS9hLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyLmNoaWxkcmVuJiZZZChyLHIueDAsdCooci5kZXB0aCsxKS9lLHIueDEsdCooci5kZXB0aCsyKS9lKTt2YXIgaT1yLngwLGE9ci55MCxvPXIueDEtbixzPXIueTEtbjtvPGkmJihpPW89KGkrbykvMiksczxhJiYoYT1zPShhK3MpLzIpLHIueDA9aSxyLnkwPWEsci54MT1vLHIueTE9c319KGUsYSkpLHImJmkuZWFjaEJlZm9yZShqZCksaX1yZXR1cm4gaS5yb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXQsaSk6cn0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStuWzBdLGU9K25bMV0saSk6W3QsZV19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxpKTpufSxpfSxVZD17ZGVwdGg6LTF9LCRkPXt9O2Z1bmN0aW9uIHFkKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFdkKHQpe3JldHVybiB0LnBhcmVudElkfXZhciBIZD1mdW5jdGlvbigpe3ZhciB0PXFkLGU9V2Q7ZnVuY3Rpb24gbihuKXt2YXIgcixpLGEsbyxzLGMsdSxsPW4ubGVuZ3RoLGg9bmV3IEFycmF5KGwpLGY9e307Zm9yKGk9MDtpPGw7KytpKXI9bltpXSxzPWhbaV09bmV3IHBkKHIpLG51bGwhPShjPXQocixpLG4pKSYmKGMrPSIiKSYmKGZbdT0iJCIrKHMuaWQ9YyldPXUgaW4gZj8kZDpzKTtmb3IoaT0wO2k8bDsrK2kpaWYocz1oW2ldLG51bGwhPShjPWUobltpXSxpLG4pKSYmKGMrPSIiKSl7aWYoIShvPWZbIiQiK2NdKSl0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrYyk7aWYobz09PSRkKXRocm93IG5ldyBFcnJvcigiYW1iaWd1b3VzOiAiK2MpO28uY2hpbGRyZW4/by5jaGlsZHJlbi5wdXNoKHMpOm8uY2hpbGRyZW49W3NdLHMucGFyZW50PW99ZWxzZXtpZihhKXRocm93IG5ldyBFcnJvcigibXVsdGlwbGUgcm9vdHMiKTthPXN9aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJubyByb290Iik7aWYoYS5wYXJlbnQ9VWQsYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1sfSkpLmVhY2hCZWZvcmUoZGQpLGEucGFyZW50PW51bGwsbD4wKXRocm93IG5ldyBFcnJvcigiY3ljbGUiKTtyZXR1cm4gYX1yZXR1cm4gbi5pZD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1OZChlKSxuKTp0fSxuLnBhcmVudElkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPU5kKHQpLG4pOmV9LG59O2Z1bmN0aW9uIFZkKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIEdkKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVswXTp0LnR9ZnVuY3Rpb24gWGQodCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lW2UubGVuZ3RoLTFdOnQudH1mdW5jdGlvbiBaZCh0LGUsbil7dmFyIHI9bi8oZS5pLXQuaSk7ZS5jLT1yLGUucys9bix0LmMrPXIsZS56Kz1uLGUubSs9bn1mdW5jdGlvbiBLZCh0LGUsbil7cmV0dXJuIHQuYS5wYXJlbnQ9PT1lLnBhcmVudD90LmE6bn1mdW5jdGlvbiBRZCh0LGUpe3RoaXMuXz10LHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1udWxsLHRoaXMuQT1udWxsLHRoaXMuYT10aGlzLHRoaXMuej0wLHRoaXMubT0wLHRoaXMuYz0wLHRoaXMucz0wLHRoaXMudD1udWxsLHRoaXMuaT1lfVFkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHBkLnByb3RvdHlwZSk7dmFyIEpkPWZ1bmN0aW9uKCl7dmFyIHQ9VmQsZT0xLG49MSxyPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgYz1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyLGksYSxvPW5ldyBRZCh0LDApLHM9W29dO2U9cy5wb3AoKTspaWYocj1lLl8uY2hpbGRyZW4pZm9yKGUuY2hpbGRyZW49bmV3IEFycmF5KGE9ci5sZW5ndGgpLGk9YS0xO2k+PTA7LS1pKXMucHVzaChuPWUuY2hpbGRyZW5baV09bmV3IFFkKHJbaV0saSkpLG4ucGFyZW50PWU7cmV0dXJuKG8ucGFyZW50PW5ldyBRZChudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYoYy5lYWNoQWZ0ZXIoYSksYy5wYXJlbnQubT0tYy56LGMuZWFjaEJlZm9yZShvKSxyKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciB1PWksbD1pLGg9aTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDx1LngmJih1PXQpLHQueD5sLngmJihsPXQpLHQuZGVwdGg+aC5kZXB0aCYmKGg9dCl9KSk7dmFyIGY9dT09PWw/MTp0KHUsbCkvMixkPWYtdS54LHA9ZS8obC54K2YrZCkseT1uLyhoLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K2QpKnAsdC55PXQuZGVwdGgqeX0pKX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciBuPWUuY2hpbGRyZW4scj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9yW2UuaS0xXTpudWxsO2lmKG4peyFmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0wLHI9MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPW4sZS5tKz1uLG4rPWUucysocis9ZS5jKX0oZSk7dmFyIGE9KG5bMF0ueituW24ubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUsbixyKXtpZihuKXtmb3IodmFyIGksYT1lLG89ZSxzPW4sYz1hLnBhcmVudC5jaGlsZHJlblswXSx1PWEubSxsPW8ubSxoPXMubSxmPWMubTtzPVhkKHMpLGE9R2QoYSkscyYmYTspYz1HZChjKSwobz1YZChvKSkuYT1lLChpPXMueitoLWEuei11K3Qocy5fLGEuXykpPjAmJihaZChLZChzLGUsciksZSxpKSx1Kz1pLGwrPWkpLGgrPXMubSx1Kz1hLm0sZis9Yy5tLGwrPW8ubTtzJiYhWGQobykmJihvLnQ9cyxvLm0rPWgtbCksYSYmIUdkKGMpJiYoYy50PWEsYy5tKz11LWYscj1lKX1yZXR1cm4gcn0oZSxpLGUucGFyZW50LkF8fHJbMF0pfWZ1bmN0aW9uIG8odCl7dC5fLng9dC56K3QucGFyZW50Lm0sdC5tKz10LnBhcmVudC5tfWZ1bmN0aW9uIHModCl7dC54Kj1lLHQueT10LmRlcHRoKm59cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hMSxlPSt0WzBdLG49K3RbMV0saSk6cj9udWxsOltlLG5dfSxpLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSEwLGU9K3RbMF0sbj0rdFsxXSxpKTpyP1tlLG5dOm51bGx9LGl9LHRwPWZ1bmN0aW9uKHQsZSxuLHIsaSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGM9by5sZW5ndGgsdT10LnZhbHVlJiYoaS1uKS90LnZhbHVlOysrczxjOykoYT1vW3NdKS54MD1lLGEueDE9cixhLnkwPW4sYS55MT1uKz1hLnZhbHVlKnV9LGVwPSgxK01hdGguc3FydCg1KSkvMjtmdW5jdGlvbiBucCh0LGUsbixyLGksYSl7Zm9yKHZhciBvLHMsYyx1LGwsaCxmLGQscCx5LGcsbT1bXSx2PWUuY2hpbGRyZW4sYj0wLHg9MCxfPXYubGVuZ3RoLGs9ZS52YWx1ZTtiPF87KXtjPWktbix1PWEtcjtkb3tsPXZbeCsrXS52YWx1ZX13aGlsZSghbCYmeDxfKTtmb3IoaD1mPWwsZz1sKmwqKHk9TWF0aC5tYXgodS9jLGMvdSkvKGsqdCkpLHA9TWF0aC5tYXgoZi9nLGcvaCk7eDxfOysreCl7aWYobCs9cz12W3hdLnZhbHVlLHM8aCYmKGg9cykscz5mJiYoZj1zKSxnPWwqbCp5LChkPU1hdGgubWF4KGYvZyxnL2gpKT5wKXtsLT1zO2JyZWFrfXA9ZH1tLnB1c2gobz17dmFsdWU6bCxkaWNlOmM8dSxjaGlsZHJlbjp2LnNsaWNlKGIseCl9KSxvLmRpY2U/WWQobyxuLHIsaSxrP3IrPXUqbC9rOmEpOnRwKG8sbixyLGs/bis9YypsL2s6aSxhKSxrLT1sLGI9eH1yZXR1cm4gbX12YXIgcnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbixyLGksYSl7bnAoZSx0LG4scixpLGEpfXJldHVybiBuLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LG59KGVwKSxpcD1mdW5jdGlvbigpe3ZhciB0PXJwLGU9ITEsbj0xLHI9MSxpPVswXSxhPUJkLG89QmQscz1CZCxjPUJkLHU9QmQ7ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC54MD10LnkwPTAsdC54MT1uLHQueTE9cix0LmVhY2hCZWZvcmUoaCksaT1bMF0sZSYmdC5lYWNoQmVmb3JlKGpkKSx0fWZ1bmN0aW9uIGgoZSl7dmFyIG49aVtlLmRlcHRoXSxyPWUueDArbixsPWUueTArbixoPWUueDEtbixmPWUueTEtbjtoPHImJihyPWg9KHIraCkvMiksZjxsJiYobD1mPShsK2YpLzIpLGUueDA9cixlLnkwPWwsZS54MT1oLGUueTE9ZixlLmNoaWxkcmVuJiYobj1pW2UuZGVwdGgrMV09YShlKS8yLHIrPXUoZSktbixsKz1vKGUpLW4sKGgtPXMoZSktbik8ciYmKHI9aD0ocitoKS8yKSwoZi09YyhlKS1uKTxsJiYobD1mPShsK2YpLzIpLHQoZSxyLGwsaCxmKSl9cmV0dXJuIGwucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LGwpOmV9LGwuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdFswXSxyPSt0WzFdLGwpOltuLHJdfSxsLnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9TmQoZSksbCk6dH0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2wucGFkZGluZ0lubmVyKHQpLnBhZGRpbmdPdXRlcih0KTpsLnBhZGRpbmdJbm5lcigpfSxsLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTphfSxsLnBhZGRpbmdPdXRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9sLnBhZGRpbmdUb3AodCkucGFkZGluZ1JpZ2h0KHQpLnBhZGRpbmdCb3R0b20odCkucGFkZGluZ0xlZnQodCk6bC5wYWRkaW5nVG9wKCl9LGwucGFkZGluZ1RvcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTpvfSxsLnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTpzfSxsLnBhZGRpbmdCb3R0b209ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpEZCgrdCksbCk6Y30sbC5wYWRkaW5nTGVmdD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkRkKCt0KSxsKTp1fSxsfSxhcD1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBhLG8scz10LmNoaWxkcmVuLGM9cy5sZW5ndGgsdT1uZXcgQXJyYXkoYysxKTtmb3IodVswXT1vPWE9MDthPGM7KythKXVbYSsxXT1vKz1zW2FdLnZhbHVlOyFmdW5jdGlvbiB0KGUsbixyLGksYSxvLGMpe2lmKGU+PW4tMSl7dmFyIGw9c1tlXTtyZXR1cm4gbC54MD1pLGwueTA9YSxsLngxPW8sdm9pZChsLnkxPWMpfXZhciBoPXVbZV0sZj1yLzIraCxkPWUrMSxwPW4tMTtmb3IoO2Q8cDspe3ZhciB5PWQrcD4+PjE7dVt5XTxmP2Q9eSsxOnA9eX1mLXVbZC0xXTx1W2RdLWYmJmUrMTxkJiYtLWQ7dmFyIGc9dVtkXS1oLG09ci1nO2lmKG8taT5jLWEpe3ZhciB2PShpKm0rbypnKS9yO3QoZSxkLGcsaSxhLHYsYyksdChkLG4sbSx2LGEsbyxjKX1lbHNle3ZhciBiPShhKm0rYypnKS9yO3QoZSxkLGcsaSxhLG8sYiksdChkLG4sbSxpLGIsbyxjKX19KDAsYyx0LnZhbHVlLGUsbixyLGkpfSxvcD1mdW5jdGlvbih0LGUsbixyLGkpeygxJnQuZGVwdGg/dHA6WWQpKHQsZSxuLHIsaSl9LHNwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4scixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsYyx1LGwsaD0tMSxmPW8ubGVuZ3RoLGQ9dC52YWx1ZTsrK2g8Zjspe2ZvcihjPShzPW9baF0pLmNoaWxkcmVuLHU9cy52YWx1ZT0wLGw9Yy5sZW5ndGg7dTxsOysrdSlzLnZhbHVlKz1jW3VdLnZhbHVlO3MuZGljZT9ZZChzLG4scixpLHIrPShhLXIpKnMudmFsdWUvZCk6dHAocyxuLHIsbis9KGktbikqcy52YWx1ZS9kLGEpLGQtPXMudmFsdWV9ZWxzZSB0Ll9zcXVhcmlmeT1vPW5wKGUsdCxuLHIsaSxhKSxvLnJhdGlvPWV9cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0sbn0oZXApLGNwPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdFtNYXRoLm1heCgwLE1hdGgubWluKGUtMSxNYXRoLmZsb29yKG4qZSkpKV19fSx1cD1mdW5jdGlvbih0LGUpe3ZhciBuPWxuKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSxscD1mdW5jdGlvbih0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQodCooMS1uKStlKm4pfX0saHA9TWF0aC5TUVJUMjtmdW5jdGlvbiBmcCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn12YXIgZHA9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dFswXSxhPXRbMV0sbz10WzJdLHM9ZVswXSxjPWVbMV0sdT1lWzJdLGw9cy1pLGg9Yy1hLGY9bCpsK2gqaDtpZihmPDFlLTEyKXI9TWF0aC5sb2codS9vKS9ocCxuPWZ1bmN0aW9uKHQpe3JldHVybltpK3QqbCxhK3QqaCxvKk1hdGguZXhwKGhwKnQqcildfTtlbHNle3ZhciBkPU1hdGguc3FydChmKSxwPSh1KnUtbypvKzQqZikvKDIqbyoyKmQpLHk9KHUqdS1vKm8tNCpmKS8oMip1KjIqZCksZz1NYXRoLmxvZyhNYXRoLnNxcnQocCpwKzEpLXApLG09TWF0aC5sb2coTWF0aC5zcXJ0KHkqeSsxKS15KTtyPShtLWcpL2hwLG49ZnVuY3Rpb24odCl7dmFyIGUsbj10KnIscz1mcChnKSxjPW8vKDIqZCkqKHMqKGU9aHAqbitnLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGcpKTtyZXR1cm5baStjKmwsYStjKmgsbypzL2ZwKGhwKm4rZyldfX1yZXR1cm4gbi5kdXJhdGlvbj0xZTMqcixufTtmdW5jdGlvbiBwcCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcj10KChlPWVuKGUpKS5oLChuPWVuKG4pKS5oKSxpPWZuKGUucyxuLnMpLGE9Zm4oZS5sLG4ubCksbz1mbihlLm9wYWNpdHksbi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1yKHQpLGUucz1pKHQpLGUubD1hKHQpLGUub3BhY2l0eT1vKHQpLGUrIiJ9fX12YXIgeXA9cHAobG4pLGdwPXBwKGZuKTtmdW5jdGlvbiBtcCh0LGUpe3ZhciBuPWZuKCh0PXlhKHQpKS5sLChlPXlhKGUpKS5sKSxyPWZuKHQuYSxlLmEpLGk9Zm4odC5iLGUuYiksYT1mbih0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQubD1uKGUpLHQuYT1yKGUpLHQuYj1pKGUpLHQub3BhY2l0eT1hKGUpLHQrIiJ9fWZ1bmN0aW9uIHZwKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3ZhciByPXQoKGU9d2EoZSkpLmgsKG49d2EobikpLmgpLGk9Zm4oZS5jLG4uYyksYT1mbihlLmwsbi5sKSxvPWZuKGUub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZS5oPXIodCksZS5jPWkodCksZS5sPWEodCksZS5vcGFjaXR5PW8odCksZSsiIn19fXZhciBicD12cChsbikseHA9dnAoZm4pO2Z1bmN0aW9uIF9wKHQpe3JldHVybiBmdW5jdGlvbiBlKG4pe2Z1bmN0aW9uIHIoZSxyKXt2YXIgaT10KChlPU5hKGUpKS5oLChyPU5hKHIpKS5oKSxhPWZuKGUucyxyLnMpLG89Zm4oZS5sLHIubCkscz1mbihlLm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuaD1pKHQpLGUucz1hKHQpLGUubD1vKE1hdGgucG93KHQsbikpLGUub3BhY2l0eT1zKHQpLGUrIiJ9fXJldHVybiBuPStuLHIuZ2FtbWE9ZSxyfSgxKX12YXIga3A9X3AobG4pLHdwPV9wKGZuKTtmdW5jdGlvbiBUcCh0LGUpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGgtMSxpPWVbMF0sYT1uZXcgQXJyYXkocjwwPzA6cik7bjxyOylhW25dPXQoaSxpPWVbKytuXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oci0xLE1hdGguZmxvb3IodCo9cikpKTtyZXR1cm4gYVtlXSh0LWUpfX12YXIgRXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKW5bcl09dChyLyhlLTEpKTtyZXR1cm4gbn0sQ3A9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49LTEscj10Lmxlbmd0aCxpPXRbci0xXSxhPTA7KytuPHI7KWU9aSxpPXRbbl0sYSs9ZVsxXSppWzBdLWVbMF0qaVsxXTtyZXR1cm4gYS8yfSxTcD1mdW5jdGlvbih0KXtmb3IodmFyIGUsbixyPS0xLGk9dC5sZW5ndGgsYT0wLG89MCxzPXRbaS0xXSxjPTA7KytyPGk7KWU9cyxzPXRbcl0sYys9bj1lWzBdKnNbMV0tc1swXSplWzFdLGErPShlWzBdK3NbMF0pKm4sbys9KGVbMV0rc1sxXSkqbjtyZXR1cm5bYS8oYyo9Myksby9jXX07ZnVuY3Rpb24gQXAodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gTXAodCl7Zm9yKHZhciBlLG4scixpPXQubGVuZ3RoLGE9WzAsMV0sbz0yLHM9MjtzPGk7KytzKXtmb3IoO28+MSYmKGU9dFthW28tMl1dLG49dFthW28tMV1dLHI9dFtzXSwoblswXS1lWzBdKSooclsxXS1lWzFdKS0oblsxXS1lWzFdKSooclswXS1lWzBdKTw9MCk7KS0tbzthW28rK109c31yZXR1cm4gYS5zbGljZSgwLG8pfXZhciBPcD1mdW5jdGlvbih0KXtpZigobj10Lmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgZSxuLHI9bmV3IEFycmF5KG4pLGk9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlyW2VdPVsrdFtlXVswXSwrdFtlXVsxXSxlXTtmb3Ioci5zb3J0KEFwKSxlPTA7ZTxuOysrZSlpW2VdPVtyW2VdWzBdLC1yW2VdWzFdXTt2YXIgYT1NcChyKSxvPU1wKGkpLHM9b1swXT09PWFbMF0sYz1vW28ubGVuZ3RoLTFdPT09YVthLmxlbmd0aC0xXSx1PVtdO2ZvcihlPWEubGVuZ3RoLTE7ZT49MDstLWUpdS5wdXNoKHRbclthW2VdXVsyXV0pO2ZvcihlPStzO2U8by5sZW5ndGgtYzsrK2UpdS5wdXNoKHRbcltvW2VdXVsyXV0pO3JldHVybiB1fSxOcD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbixyLGk9dC5sZW5ndGgsYT10W2ktMV0sbz1lWzBdLHM9ZVsxXSxjPWFbMF0sdT1hWzFdLGw9ITEsaD0wO2g8aTsrK2gpbj0oYT10W2hdKVswXSwocj1hWzFdKT5zIT11PnMmJm88KGMtbikqKHMtcikvKHUtcikrbiYmKGw9IWwpLGM9bix1PXI7cmV0dXJuIGx9LEJwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHI9LTEsaT10Lmxlbmd0aCxhPXRbaS0xXSxvPWFbMF0scz1hWzFdLGM9MDsrK3I8aTspZT1vLG49cyxlLT1vPShhPXRbcl0pWzBdLG4tPXM9YVsxXSxjKz1NYXRoLnNxcnQoZSplK24qbik7cmV0dXJuIGN9LERwPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCl9LExwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0LG4pe3JldHVybiB0PW51bGw9PXQ/MDordCxuPW51bGw9PW4/MTorbiwxPT09YXJndW1lbnRzLmxlbmd0aD8obj10LHQ9MCk6bi09dCxmdW5jdGlvbigpe3JldHVybiBlKCkqbit0fX1yZXR1cm4gbi5zb3VyY2U9dCxufShEcCksSXA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHIsaTtyZXR1cm4gdD1udWxsPT10PzA6K3Qsbj1udWxsPT1uPzE6K24sZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1yKWE9cixyPW51bGw7ZWxzZSBkb3tyPTIqZSgpLTEsYT0yKmUoKS0xLGk9cipyK2EqYX13aGlsZSghaXx8aT4xKTtyZXR1cm4gdCtuKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGkpL2kpfX1yZXR1cm4gbi5zb3VyY2U9dCxufShEcCksUnA9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKCl7dmFyIHQ9SXAuc291cmNlKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAodCgpKX19cmV0dXJuIG4uc291cmNlPXQsbn0oRHApLEZwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIG49MCxyPTA7cjx0OysrciluKz1lKCk7cmV0dXJuIG59fXJldHVybiBuLnNvdXJjZT10LG59KERwKSxQcD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49RnAuc291cmNlKGUpKHQpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKCkvdH19cmV0dXJuIG4uc291cmNlPXQsbn0oRHApLGpwPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS1lKCkpL3R9fXJldHVybiBuLnNvdXJjZT10LG59KERwKTtmdW5jdGlvbiBZcCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2UodCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKGUpLmRvbWFpbih0KX1yZXR1cm4gdGhpc31mdW5jdGlvbiB6cCh0LGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMuaW50ZXJwb2xhdG9yKHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5pbnRlcnBvbGF0b3IoZSkuZG9tYWluKHQpfXJldHVybiB0aGlzfXZhciBVcD1BcnJheS5wcm90b3R5cGUsJHA9VXAubWFwLHFwPVVwLnNsaWNlLFdwPXtuYW1lOiJpbXBsaWNpdCJ9O2Z1bmN0aW9uIEhwKCl7dmFyIHQ9UWkoKSxlPVtdLG49W10scj1XcDtmdW5jdGlvbiBpKGkpe3ZhciBhPWkrIiIsbz10LmdldChhKTtpZighbyl7aWYociE9PVdwKXJldHVybiByO3Quc2V0KGEsbz1lLnB1c2goaSkpfXJldHVybiBuWyhvLTEpJW4ubGVuZ3RoXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUuc2xpY2UoKTtlPVtdLHQ9UWkoKTtmb3IodmFyIHIsYSxvPS0xLHM9bi5sZW5ndGg7KytvPHM7KXQuaGFzKGE9KHI9bltvXSkrIiIpfHx0LnNldChhLGUucHVzaChyKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXAuY2FsbCh0KSxpKTpuLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGkpOnJ9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBIcChlLG4pLnVua25vd24ocil9LFlwLmFwcGx5KGksYXJndW1lbnRzKSxpfWZ1bmN0aW9uIFZwKCl7dmFyIHQsZSxuPUhwKCkudW5rbm93bih2b2lkIDApLHI9bi5kb21haW4saT1uLnJhbmdlLGE9WzAsMV0sbz0hMSxzPTAsYz0wLHU9LjU7ZnVuY3Rpb24gbCgpe3ZhciBuPXIoKS5sZW5ndGgsbD1hWzFdPGFbMF0saD1hW2wtMF0sZj1hWzEtbF07dD0oZi1oKS9NYXRoLm1heCgxLG4tcysyKmMpLG8mJih0PU1hdGguZmxvb3IodCkpLGgrPShmLWgtdCoobi1zKSkqdSxlPXQqKDEtcyksbyYmKGg9TWF0aC5yb3VuZChoKSxlPU1hdGgucm91bmQoZSkpO3ZhciBkPXcobikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaCt0KmV9KSk7cmV0dXJuIGkobD9kLnJldmVyc2UoKTpkKX1yZXR1cm4gZGVsZXRlIG4udW5rbm93bixuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocih0KSxsKCkpOnIoKX0sbi5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1bK3RbMF0sK3RbMV1dLGwoKSk6YS5zbGljZSgpfSxuLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGE9Wyt0WzBdLCt0WzFdXSxvPSEwLGwoKX0sbi5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sbi5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LG4ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ISF0LGwoKSk6b30sbi5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsYz0rdCksbCgpKTpzfSxuLnBhZGRpbmdJbm5lcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLHQpLGwoKSk6c30sbi5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsbCgpKTpjfSxuLmFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PU1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSksbCgpKTp1fSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVnAocigpLGEpLnJvdW5kKG8pLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIoYykuYWxpZ24odSl9LFlwLmFwcGx5KGwoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEdwKHQpe3ZhciBlPXQuY29weTtyZXR1cm4gdC5wYWRkaW5nPXQucGFkZGluZ091dGVyLGRlbGV0ZSB0LnBhZGRpbmdJbm5lcixkZWxldGUgdC5wYWRkaW5nT3V0ZXIsdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEdwKGUoKSl9LHR9ZnVuY3Rpb24gWHAoKXtyZXR1cm4gR3AoVnAuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSl9dmFyIFpwPWZ1bmN0aW9uKHQpe3JldHVybit0fSxLcD1bMCwxXTtmdW5jdGlvbiBRcCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBKcCh0LGUpe3JldHVybihlLT10PSt0KT9mdW5jdGlvbihuKXtyZXR1cm4obi10KS9lfToobj1pc05hTihlKT9OYU46LjUsZnVuY3Rpb24oKXtyZXR1cm4gbn0pO3ZhciBufWZ1bmN0aW9uIHR5KHQpe3ZhciBlLG49dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIG4+ciYmKGU9bixuPXIscj1lKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgobixNYXRoLm1pbihyLHQpKX19ZnVuY3Rpb24gZXkodCxlLG4pe3ZhciByPXRbMF0saT10WzFdLGE9ZVswXSxvPWVbMV07cmV0dXJuIGk8cj8ocj1KcChpLHIpLGE9bihvLGEpKToocj1KcChyLGkpLGE9bihhLG8pKSxmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQpKX19ZnVuY3Rpb24gbnkodCxlLG4pe3ZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKS0xLGk9bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpLG89LTE7Zm9yKHRbcl08dFswXSYmKHQ9dC5zbGljZSgpLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpOysrbzxyOylpW29dPUpwKHRbb10sdFtvKzFdKSxhW29dPW4oZVtvXSxlW28rMV0pO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj11KHQsZSwxLHIpLTE7cmV0dXJuIGFbbl0oaVtuXShlKSl9fWZ1bmN0aW9uIHJ5KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLnJhbmdlKHQucmFuZ2UoKSkuaW50ZXJwb2xhdGUodC5pbnRlcnBvbGF0ZSgpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIGl5KCl7dmFyIHQsZSxuLHIsaSxhLG89S3Ascz1LcCxjPU1uLHU9UXA7ZnVuY3Rpb24gbCgpe3JldHVybiByPU1hdGgubWluKG8ubGVuZ3RoLHMubGVuZ3RoKT4yP255OmV5LGk9YT1udWxsLGh9ZnVuY3Rpb24gaChlKXtyZXR1cm4gaXNOYU4oZT0rZSk/bjooaXx8KGk9cihvLm1hcCh0KSxzLGMpKSkodCh1KGUpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiB1KGUoKGF8fChhPXIocyxvLm1hcCh0KSxrbikpKShuKSkpfSxoLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0kcC5jYWxsKHQsWnApLHU9PT1RcHx8KHU9dHkobykpLGwoKSk6by5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXFwLmNhbGwodCksbCgpKTpzLnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbih0KXtyZXR1cm4gcz1xcC5jYWxsKHQpLGM9bHAsbCgpfSxoLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/dHkobyk6UXAsaCk6dSE9PVFwfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsbCgpKTpjfSxoLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxoKTpufSxmdW5jdGlvbihuLHIpe3JldHVybiB0PW4sZT1yLGwoKX19ZnVuY3Rpb24gYXkodCxlKXtyZXR1cm4gaXkoKSh0LGUpfXZhciBveT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhPU0odCxlLG4pO3N3aXRjaCgocj1WcyhudWxsPT1yPyIsZiI6cikpLnR5cGUpe2Nhc2UicyI6dmFyIG89TWF0aC5tYXgoTWF0aC5hYnModCksTWF0aC5hYnMoZSkpO3JldHVybiBudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1zYyhhLG8pKXx8KHIucHJlY2lzaW9uPWkpLFFzKHIsbyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbCE9ci5wcmVjaXNpb258fGlzTmFOKGk9Y2MoYSxNYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpKXx8KHIucHJlY2lzaW9uPWktKCJlIj09PXIudHlwZSkpO2JyZWFrO2Nhc2UiZiI6Y2FzZSIlIjpudWxsIT1yLnByZWNpc2lvbnx8aXNOYU4oaT1vYyhhKSl8fChyLnByZWNpc2lvbj1pLTIqKCIlIj09PXIudHlwZSkpfXJldHVybiBLcyhyKX07ZnVuY3Rpb24gc3kodCl7dmFyIGU9dC5kb21haW47cmV0dXJuIHQudGlja3M9ZnVuY3Rpb24odCl7dmFyIG49ZSgpO3JldHVybiBTKG5bMF0sbltuLmxlbmd0aC0xXSxudWxsPT10PzEwOnQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCk7cmV0dXJuIG95KHJbMF0scltyLmxlbmd0aC0xXSxudWxsPT10PzEwOnQsbil9LHQubmljZT1mdW5jdGlvbihuKXtudWxsPT1uJiYobj0xMCk7dmFyIHIsaT1lKCksYT0wLG89aS5sZW5ndGgtMSxzPWlbYV0sYz1pW29dO3JldHVybiBjPHMmJihyPXMscz1jLGM9cixyPWEsYT1vLG89ciksKHI9QShzLGMsbikpPjA/cj1BKHM9TWF0aC5mbG9vcihzL3IpKnIsYz1NYXRoLmNlaWwoYy9yKSpyLG4pOnI8MCYmKHI9QShzPU1hdGguY2VpbChzKnIpL3IsYz1NYXRoLmZsb29yKGMqcikvcixuKSkscj4wPyhpW2FdPU1hdGguZmxvb3Iocy9yKSpyLGlbb109TWF0aC5jZWlsKGMvcikqcixlKGkpKTpyPDAmJihpW2FdPU1hdGguY2VpbChzKnIpL3IsaVtvXT1NYXRoLmZsb29yKGMqcikvcixlKGkpKSx0fSx0fWZ1bmN0aW9uIGN5KCl7dmFyIHQ9YXkoUXAsUXApO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcnkodCxjeSgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpLHN5KHQpfWZ1bmN0aW9uIHV5KHQpe3ZhciBlO2Z1bmN0aW9uIG4odCl7cmV0dXJuIGlzTmFOKHQ9K3QpP2U6dH1yZXR1cm4gbi5pbnZlcnQ9bixuLmRvbWFpbj1uLnJhbmdlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSRwLmNhbGwoZSxacCksbik6dC5zbGljZSgpfSxuLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gdXkodCkudW5rbm93bihlKX0sdD1hcmd1bWVudHMubGVuZ3RoPyRwLmNhbGwodCxacCk6WzAsMV0sc3kobil9dmFyIGx5PWZ1bmN0aW9uKHQsZSl7dmFyIG4scj0wLGk9KHQ9dC5zbGljZSgpKS5sZW5ndGgtMSxhPXRbcl0sbz10W2ldO3JldHVybiBvPGEmJihuPXIscj1pLGk9bixuPWEsYT1vLG89biksdFtyXT1lLmZsb29yKGEpLHRbaV09ZS5jZWlsKG8pLHR9O2Z1bmN0aW9uIGh5KHQpe3JldHVybiBNYXRoLmxvZyh0KX1mdW5jdGlvbiBmeSh0KXtyZXR1cm4gTWF0aC5leHAodCl9ZnVuY3Rpb24gZHkodCl7cmV0dXJuLU1hdGgubG9nKC10KX1mdW5jdGlvbiBweSh0KXtyZXR1cm4tTWF0aC5leHAoLXQpfWZ1bmN0aW9uIHl5KHQpe3JldHVybiBpc0Zpbml0ZSh0KT8rKCIxZSIrdCk6dDwwPzA6dH1mdW5jdGlvbiBneSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuLXQoLWUpfX1mdW5jdGlvbiBteSh0KXt2YXIgZSxuLHI9dChoeSxmeSksaT1yLmRvbWFpbixhPTEwO2Z1bmN0aW9uIG8oKXtyZXR1cm4gZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PU1hdGguRT9NYXRoLmxvZzoxMD09PXQmJk1hdGgubG9nMTB8fDI9PT10JiZNYXRoLmxvZzJ8fCh0PU1hdGgubG9nKHQpLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS90fSl9KGEpLG49ZnVuY3Rpb24odCl7cmV0dXJuIDEwPT09dD95eTp0PT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyh0LGUpfX0oYSksaSgpWzBdPDA/KGU9Z3koZSksbj1neShuKSx0KGR5LHB5KSk6dChoeSxmeSkscn1yZXR1cm4gci5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LG8oKSk6YX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkodCksbygpKTppKCl9LHIudGlja3M9ZnVuY3Rpb24odCl7dmFyIHIsbz1pKCkscz1vWzBdLGM9b1tvLmxlbmd0aC0xXTsocj1jPHMpJiYoZj1zLHM9YyxjPWYpO3ZhciB1LGwsaCxmPWUocyksZD1lKGMpLHA9bnVsbD09dD8xMDordCx5PVtdO2lmKCEoYSUxKSYmZC1mPHApe2lmKGY9TWF0aC5yb3VuZChmKS0xLGQ9TWF0aC5yb3VuZChkKSsxLHM+MCl7Zm9yKDtmPGQ7KytmKWZvcihsPTEsdT1uKGYpO2w8YTsrK2wpaWYoISgoaD11KmwpPHMpKXtpZihoPmMpYnJlYWs7eS5wdXNoKGgpfX1lbHNlIGZvcig7ZjxkOysrZilmb3IobD1hLTEsdT1uKGYpO2w+PTE7LS1sKWlmKCEoKGg9dSpsKTxzKSl7aWYoaD5jKWJyZWFrO3kucHVzaChoKX19ZWxzZSB5PVMoZixkLE1hdGgubWluKGQtZixwKSkubWFwKG4pO3JldHVybiByP3kucmV2ZXJzZSgpOnl9LHIudGlja0Zvcm1hdD1mdW5jdGlvbih0LGkpe2lmKG51bGw9PWkmJihpPTEwPT09YT8iLjBlIjoiLCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpJiYoaT1LcyhpKSksdD09PTEvMClyZXR1cm4gaTtudWxsPT10JiYodD0xMCk7dmFyIG89TWF0aC5tYXgoMSxhKnQvci50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQvbihNYXRoLnJvdW5kKGUodCkpKTtyZXR1cm4gciphPGEtLjUmJihyKj1hKSxyPD1vP2kodCk6IiJ9fSxyLm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gaShseShpKCkse2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguZmxvb3IoZSh0KSkpfSxjZWlsOmZ1bmN0aW9uKHQpe3JldHVybiBuKE1hdGguY2VpbChlKHQpKSl9fSkpfSxyfWZ1bmN0aW9uIHZ5KCl7dmFyIHQ9bXkoaXkoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiByeSh0LHZ5KCkpLmJhc2UodC5iYXNlKCkpfSxZcC5hcHBseSh0LGFyZ3VtZW50cyksdH1mdW5jdGlvbiBieSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmxvZzFwKE1hdGguYWJzKGUvdCkpfX1mdW5jdGlvbiB4eSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguc2lnbihlKSpNYXRoLmV4cG0xKE1hdGguYWJzKGUpKSp0fX1mdW5jdGlvbiBfeSh0KXt2YXIgZT0xLG49dChieShlKSx4eShlKSk7cmV0dXJuIG4uY29uc3RhbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChieShlPStuKSx4eShlKSk6ZX0sc3kobil9ZnVuY3Rpb24ga3koKXt2YXIgdD1feShpeSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHJ5KHQsa3koKSkuY29uc3RhbnQodC5jb25zdGFudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIHd5KHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZTwwPy1NYXRoLnBvdygtZSx0KTpNYXRoLnBvdyhlLHQpfX1mdW5jdGlvbiBUeSh0KXtyZXR1cm4gdDwwPy1NYXRoLnNxcnQoLXQpOk1hdGguc3FydCh0KX1mdW5jdGlvbiBFeSh0KXtyZXR1cm4gdDwwPy10KnQ6dCp0fWZ1bmN0aW9uIEN5KHQpe3ZhciBlPXQoUXAsUXApLG49MTtmdW5jdGlvbiByKCl7cmV0dXJuIDE9PT1uP3QoUXAsUXApOi41PT09bj90KFR5LEV5KTp0KHd5KG4pLHd5KDEvbikpfXJldHVybiBlLmV4cG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSt0LHIoKSk6bn0sc3koZSl9ZnVuY3Rpb24gU3koKXt2YXIgdD1DeShpeSgpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHJ5KHQsU3koKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0sWXAuYXBwbHkodCxhcmd1bWVudHMpLHR9ZnVuY3Rpb24gQXkoKXtyZXR1cm4gU3kuYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBNeSgpe3ZhciB0LGU9W10sbj1bXSxyPVtdO2Z1bmN0aW9uIGEoKXt2YXIgdD0wLGk9TWF0aC5tYXgoMSxuLmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KGktMSk7Kyt0PGk7KXJbdC0xXT1CKGUsdC9pKTtyZXR1cm4gb31mdW5jdGlvbiBvKGUpe3JldHVybiBpc05hTihlPStlKT90Om5bdShyLGUpXX1yZXR1cm4gby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIGk9bi5pbmRleE9mKHQpO3JldHVybiBpPDA/W05hTixOYU5dOltpPjA/cltpLTFdOmVbMF0saTxyLmxlbmd0aD9yW2ldOmVbZS5sZW5ndGgtMV1dfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS5zbGljZSgpO2U9W107Zm9yKHZhciBuLHI9MCxvPXQubGVuZ3RoO3I8bzsrK3IpbnVsbD09KG49dFtyXSl8fGlzTmFOKG49K24pfHxlLnB1c2gobik7cmV0dXJuIGUuc29ydChpKSxhKCl9LG8ucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXAuY2FsbCh0KSxhKCkpOm4uc2xpY2UoKX0sby51bmtub3duPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbyk6dH0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gTXkoKS5kb21haW4oZSkucmFuZ2UobikudW5rbm93bih0KX0sWXAuYXBwbHkobyxhcmd1bWVudHMpfWZ1bmN0aW9uIE95KCl7dmFyIHQsZT0wLG49MSxyPTEsaT1bLjVdLGE9WzAsMV07ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZTw9ZT9hW3UoaSxlLDAscildOnR9ZnVuY3Rpb24gcygpe3ZhciB0PS0xO2ZvcihpPW5ldyBBcnJheShyKTsrK3Q8cjspaVt0XT0oKHQrMSkqbi0odC1yKSplKS8ocisxKTtyZXR1cm4gb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0sbj0rdFsxXSxzKCkpOltlLG5dfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShhPXFwLmNhbGwodCkpLmxlbmd0aC0xLHMoKSk6YS5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXt2YXIgbz1hLmluZGV4T2YodCk7cmV0dXJuIG88MD9bTmFOLE5hTl06bzwxP1tlLGlbMF1dOm8+PXI/W2lbci0xXSxuXTpbaVtvLTFdLGlbb11dfSxvLnVua25vd249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxvKTpvfSxvLnRocmVzaG9sZHM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5zbGljZSgpfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gT3koKS5kb21haW4oW2Usbl0pLnJhbmdlKGEpLnVua25vd24odCl9LFlwLmFwcGx5KHN5KG8pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTnkoKXt2YXIgdCxlPVsuNV0sbj1bMCwxXSxyPTE7ZnVuY3Rpb24gaShpKXtyZXR1cm4gaTw9aT9uW3UoZSxpLDAscildOnR9cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXFwLmNhbGwodCkscj1NYXRoLm1pbihlLmxlbmd0aCxuLmxlbmd0aC0xKSxpKTplLnNsaWNlKCl9LGkucmFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cXAuY2FsbCh0KSxyPU1hdGgubWluKGUubGVuZ3RoLG4ubGVuZ3RoLTEpLGkpOm4uc2xpY2UoKX0saS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7dmFyIHI9bi5pbmRleE9mKHQpO3JldHVybltlW3ItMV0sZVtyXV19LGkudW5rbm93bj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLGkpOnR9LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBOeSgpLmRvbWFpbihlKS5yYW5nZShuKS51bmtub3duKHQpfSxZcC5hcHBseShpLGFyZ3VtZW50cyl9dmFyIEJ5PW5ldyBEYXRlLER5PW5ldyBEYXRlO2Z1bmN0aW9uIEx5KHQsZSxuLHIpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQoZT0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrZSkpLGV9cmV0dXJuIGkuZmxvb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZT1uZXcgRGF0ZSgrZSkpLGV9LGkuY2VpbD1mdW5jdGlvbihuKXtyZXR1cm4gdChuPW5ldyBEYXRlKG4tMSkpLGUobiwxKSx0KG4pLG59LGkucm91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9aSh0KSxuPWkuY2VpbCh0KTtyZXR1cm4gdC1lPG4tdD9lOm59LGkub2Zmc2V0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodD1uZXcgRGF0ZSgrdCksbnVsbD09bj8xOk1hdGguZmxvb3IobikpLHR9LGkucmFuZ2U9ZnVuY3Rpb24obixyLGEpe3ZhciBvLHM9W107aWYobj1pLmNlaWwobiksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG48ciYmYT4wKSlyZXR1cm4gcztkb3tzLnB1c2gobz1uZXcgRGF0ZSgrbikpLGUobixhKSx0KG4pfXdoaWxlKG88biYmbjxyKTtyZXR1cm4gc30saS5maWx0ZXI9ZnVuY3Rpb24obil7cmV0dXJuIEx5KChmdW5jdGlvbihlKXtpZihlPj1lKWZvcig7dChlKSwhbihlKTspZS5zZXRUaW1lKGUtMSl9KSwoZnVuY3Rpb24odCxyKXtpZih0Pj10KWlmKHI8MClmb3IoOysrcjw9MDspZm9yKDtlKHQsLTEpLCFuKHQpOyk7ZWxzZSBmb3IoOy0tcj49MDspZm9yKDtlKHQsMSksIW4odCk7KTt9KSl9LG4mJihpLmNvdW50PWZ1bmN0aW9uKGUscil7cmV0dXJuIEJ5LnNldFRpbWUoK2UpLER5LnNldFRpbWUoK3IpLHQoQnkpLHQoRHkpLE1hdGguZmxvb3IobihCeSxEeSkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiB0PU1hdGguZmxvb3IodCksaXNGaW5pdGUodCkmJnQ+MD90PjE/aS5maWx0ZXIocj9mdW5jdGlvbihlKXtyZXR1cm4gcihlKSV0PT0wfTpmdW5jdGlvbihlKXtyZXR1cm4gaS5jb3VudCgwLGUpJXQ9PTB9KTppOm51bGx9KSxpfXZhciBJeT1MeSgoZnVuY3Rpb24odCl7dC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCl9KSk7SXkuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9MeSgoZnVuY3Rpb24oZSl7ZS5zZXRGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0RnVsbFllYXIoKS90KSp0KSxlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK24qdCl9KSk6bnVsbH07dmFyIFJ5PUl5LEZ5PUl5LnJhbmdlLFB5PUx5KChmdW5jdGlvbih0KXt0LnNldERhdGUoMSksdC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0TW9udGgodC5nZXRNb250aCgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZ2V0TW9udGgoKS10LmdldE1vbnRoKCkrMTIqKGUuZ2V0RnVsbFllYXIoKS10LmdldEZ1bGxZZWFyKCkpfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCl9KSksank9UHksWXk9UHkucmFuZ2U7ZnVuY3Rpb24genkodCl7cmV0dXJuIEx5KChmdW5jdGlvbihlKXtlLnNldERhdGUoZS5nZXREYXRlKCktKGUuZ2V0RGF5KCkrNy10KSU3KSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzYwNDhlNX0pKX12YXIgVXk9enkoMCksJHk9enkoMSkscXk9enkoMiksV3k9enkoMyksSHk9enkoNCksVnk9enkoNSksR3k9enkoNiksWHk9VXkucmFuZ2UsWnk9JHkucmFuZ2UsS3k9cXkucmFuZ2UsUXk9V3kucmFuZ2UsSnk9SHkucmFuZ2UsdGc9VnkucmFuZ2UsZWc9R3kucmFuZ2Usbmc9THkoKGZ1bmN0aW9uKHQpe3Quc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LTZlNCooZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKS0xfSkpLHJnPW5nLGlnPW5nLnJhbmdlLGFnPUx5KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKS02ZTQqdC5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksb2c9YWcsc2c9YWcucmFuZ2UsY2c9THkoKGZ1bmN0aW9uKHQpe3Quc2V0VGltZSh0LXQuZ2V0TWlsbGlzZWNvbmRzKCktMWUzKnQuZ2V0U2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCs2ZTQqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82ZTR9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0TWludXRlcygpfSkpLHVnPWNnLGxnPWNnLnJhbmdlLGhnPUx5KChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCsxZTMqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8xZTN9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDU2Vjb25kcygpfSkpLGZnPWhnLGRnPWhnLnJhbmdlLHBnPUx5KChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7cGcuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSxpc0Zpbml0ZSh0KSYmdD4wP3Q+MT9MeSgoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS90KSp0KX0pLChmdW5jdGlvbihlLG4pe2Uuc2V0VGltZSgrZStuKnQpfSksKGZ1bmN0aW9uKGUsbil7cmV0dXJuKG4tZSkvdH0pKTpwZzpudWxsfTt2YXIgeWc9cGcsZ2c9cGcucmFuZ2U7ZnVuY3Rpb24gbWcodCl7cmV0dXJuIEx5KChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82MDQ4ZTV9KSl9dmFyIHZnPW1nKDApLGJnPW1nKDEpLHhnPW1nKDIpLF9nPW1nKDMpLGtnPW1nKDQpLHdnPW1nKDUpLFRnPW1nKDYpLEVnPXZnLnJhbmdlLENnPWJnLnJhbmdlLFNnPXhnLnJhbmdlLEFnPV9nLnJhbmdlLE1nPWtnLnJhbmdlLE9nPXdnLnJhbmdlLE5nPVRnLnJhbmdlLEJnPUx5KChmdW5jdGlvbih0KXt0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0VVRDRGF0ZSgpLTF9KSksRGc9QmcsTGc9QmcucmFuZ2UsSWc9THkoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO0lnLmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/THkoKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihlLmdldFVUQ0Z1bGxZZWFyKCkvdCkqdCksZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24oZSxuKXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKStuKnQpfSkpOm51bGx9O3ZhciBSZz1JZyxGZz1JZy5yYW5nZTtmdW5jdGlvbiBQZyh0KXtpZigwPD10LnkmJnQueTwxMDApe3ZhciBlPW5ldyBEYXRlKC0xLHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKTtyZXR1cm4gZS5zZXRGdWxsWWVhcih0LnkpLGV9cmV0dXJuIG5ldyBEYXRlKHQueSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCl9ZnVuY3Rpb24gamcodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gWWcodCxlLG4pe3JldHVybnt5OnQsbTplLGQ6bixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHpnKHQpe3ZhciBlPXQuZGF0ZVRpbWUsbj10LmRhdGUscj10LnRpbWUsaT10LnBlcmlvZHMsYT10LmRheXMsbz10LnNob3J0RGF5cyxzPXQubW9udGhzLGM9dC5zaG9ydE1vbnRocyx1PUpnKGkpLGw9dG0oaSksaD1KZyhhKSxmPXRtKGEpLGQ9SmcobykscD10bShvKSx5PUpnKHMpLGc9dG0ocyksbT1KZyhjKSx2PXRtKGMpLGI9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXREYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXREYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldE1vbnRoKCldfSxjOm51bGwsZDpfbSxlOl9tLGY6Q20sZzpGbSxHOmptLEg6a20sSTp3bSxqOlRtLEw6RW0sbTpTbSxNOkFtLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROmN2LHM6dXYsUzpNbSx1Ok9tLFU6Tm0sVjpEbSx3OkxtLFc6SW0seDpudWxsLFg6bnVsbCx5OlJtLFk6UG0sWjpZbSwiJSI6c3Z9LHg9e2E6ZnVuY3Rpb24odCl7cmV0dXJuIG9bdC5nZXRVVENEYXkoKV19LEE6ZnVuY3Rpb24odCl7cmV0dXJuIGFbdC5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24odCl7cmV0dXJuIGNbdC5nZXRVVENNb250aCgpXX0sQjpmdW5jdGlvbih0KXtyZXR1cm4gc1t0LmdldFVUQ01vbnRoKCldfSxjOm51bGwsZDp6bSxlOnptLGY6SG0sZzpydixHOmF2LEg6VW0sSTokbSxqOnFtLEw6V20sbTpWbSxNOkdtLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGlbKyh0LmdldFVUQ0hvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRVVENNb250aCgpLzMpfSxROmN2LHM6dXYsUzpYbSx1OlptLFU6S20sVjpKbSx3OnR2LFc6ZXYseDpudWxsLFg6bnVsbCx5Om52LFk6aXYsWjpvdiwiJSI6c3Z9LF89e2E6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWQuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC53PXBbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbih0LGUsbil7dmFyIHI9aC5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0Lnc9ZltyWzBdLnRvTG93ZXJDYXNlKCldLG4rclswXS5sZW5ndGgpOi0xfSxiOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1tLmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQubT12W3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLG4pe3ZhciByPXkuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5tPWdbclswXS50b0xvd2VyQ2FzZSgpXSxuK3JbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbih0LG4scil7cmV0dXJuIFQodCxlLG4scil9LGQ6aG0sZTpobSxmOm1tLGc6c20sRzpvbSxIOmRtLEk6ZG0sajpmbSxMOmdtLG06bG0sTTpwbSxwOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj11LmV4ZWMoZS5zbGljZShuKSk7cmV0dXJuIHI/KHQucD1sW3JbMF0udG9Mb3dlckNhc2UoKV0sbityWzBdLmxlbmd0aCk6LTF9LHE6dW0sUTpibSxzOnhtLFM6eW0sdTpubSxVOnJtLFY6aW0sdzplbSxXOmFtLHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBUKHQsbixlLHIpfSxYOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gVCh0LHIsZSxuKX0seTpzbSxZOm9tLFo6Y20sIiUiOnZtfTtmdW5jdGlvbiBrKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYSxvPVtdLHM9LTEsYz0wLHU9dC5sZW5ndGg7Zm9yKG4gaW5zdGFuY2VvZiBEYXRlfHwobj1uZXcgRGF0ZSgrbikpOysrczx1OykzNz09PXQuY2hhckNvZGVBdChzKSYmKG8ucHVzaCh0LnNsaWNlKGMscykpLG51bGwhPShpPVZnW3I9dC5jaGFyQXQoKytzKV0pP3I9dC5jaGFyQXQoKytzKTppPSJlIj09PXI/IiAiOiIwIiwoYT1lW3JdKSYmKHI9YShuLGkpKSxvLnB1c2gociksYz1zKzEpO3JldHVybiBvLnB1c2godC5zbGljZShjLHMpKSxvLmpvaW4oIiIpfX1mdW5jdGlvbiB3KHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByLGksYT1ZZygxOTAwLHZvaWQgMCwxKTtpZihUKGEsdCxuKz0iIiwwKSE9bi5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gYSlyZXR1cm4gbmV3IERhdGUoYS5RKTtpZigicyJpbiBhKXJldHVybiBuZXcgRGF0ZSgxZTMqYS5zKygiTCJpbiBhP2EuTDowKSk7aWYoZSYmISgiWiJpbiBhKSYmKGEuWj0wKSwicCJpbiBhJiYoYS5IPWEuSCUxMisxMiphLnApLHZvaWQgMD09PWEubSYmKGEubT0icSJpbiBhP2EucTowKSwiViJpbiBhKXtpZihhLlY8MXx8YS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGF8fChhLnc9MSksIloiaW4gYT8oaT0ocj1qZyhZZyhhLnksMCwxKSkpLmdldFVUQ0RheSgpLHI9aT40fHwwPT09aT9iZy5jZWlsKHIpOmJnKHIpLHI9RGcub2Zmc2V0KHIsNyooYS5WLTEpKSxhLnk9ci5nZXRVVENGdWxsWWVhcigpLGEubT1yLmdldFVUQ01vbnRoKCksYS5kPXIuZ2V0VVRDRGF0ZSgpKyhhLncrNiklNyk6KGk9KHI9UGcoWWcoYS55LDAsMSkpKS5nZXREYXkoKSxyPWk+NHx8MD09PWk/JHkuY2VpbChyKTokeShyKSxyPXJnLm9mZnNldChyLDcqKGEuVi0xKSksYS55PXIuZ2V0RnVsbFllYXIoKSxhLm09ci5nZXRNb250aCgpLGEuZD1yLmdldERhdGUoKSsoYS53KzYpJTcpfWVsc2UoIlciaW4gYXx8IlUiaW4gYSkmJigidyJpbiBhfHwoYS53PSJ1ImluIGE/YS51JTc6IlciaW4gYT8xOjApLGk9IloiaW4gYT9qZyhZZyhhLnksMCwxKSkuZ2V0VVRDRGF5KCk6UGcoWWcoYS55LDAsMSkpLmdldERheSgpLGEubT0wLGEuZD0iVyJpbiBhPyhhLncrNiklNys3KmEuVy0oaSs1KSU3OmEudys3KmEuVS0oaSs2KSU3KTtyZXR1cm4iWiJpbiBhPyhhLkgrPWEuWi8xMDB8MCxhLk0rPWEuWiUxMDAsamcoYSkpOlBnKGEpfX1mdW5jdGlvbiBUKHQsZSxuLHIpe2Zvcih2YXIgaSxhLG89MCxzPWUubGVuZ3RoLGM9bi5sZW5ndGg7bzxzOyl7aWYocj49YylyZXR1cm4tMTtpZigzNz09PShpPWUuY2hhckNvZGVBdChvKyspKSl7aWYoaT1lLmNoYXJBdChvKyspLCEoYT1fW2kgaW4gVmc/ZS5jaGFyQXQobysrKTppXSl8fChyPWEodCxuLHIpKTwwKXJldHVybi0xfWVsc2UgaWYoaSE9bi5jaGFyQ29kZUF0KHIrKykpcmV0dXJuLTF9cmV0dXJuIHJ9cmV0dXJuIGIueD1rKG4sYiksYi5YPWsocixiKSxiLmM9ayhlLGIpLHgueD1rKG4seCkseC5YPWsocix4KSx4LmM9ayhlLHgpLHtmb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIixiKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLCExKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNGb3JtYXQ6ZnVuY3Rpb24odCl7dmFyIGU9ayh0Kz0iIix4KTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfSx1dGNQYXJzZTpmdW5jdGlvbih0KXt2YXIgZT13KHQrPSIiLCEwKTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0fSxlfX19dmFyIFVnLCRnLHFnLFdnLEhnLFZnPXsiLSI6IiIsXzoiICIsMDoiMCJ9LEdnPS9eXHMqXGQrLyxYZz0vXiUvLFpnPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBLZyh0LGUsbil7dmFyIHI9dDwwPyItIjoiIixpPShyPy10OnQpKyIiLGE9aS5sZW5ndGg7cmV0dXJuIHIrKGE8bj9uZXcgQXJyYXkobi1hKzEpLmpvaW4oZSkraTppKX1mdW5jdGlvbiBRZyh0KXtyZXR1cm4gdC5yZXBsYWNlKFpnLCJcXCQmIil9ZnVuY3Rpb24gSmcodCl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK3QubWFwKFFnKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gdG0odCl7Zm9yKHZhciBlPXt9LG49LTEscj10Lmxlbmd0aDsrK248cjspZVt0W25dLnRvTG93ZXJDYXNlKCldPW47cmV0dXJuIGV9ZnVuY3Rpb24gZW0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0Lnc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gbm0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMSkpO3JldHVybiByPyh0LnU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcm0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlU9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaW0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0LlY9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYW0odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Llc9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gb20odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rNCkpO3JldHVybiByPyh0Lnk9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc20odCxlLG4pe3ZhciByPUdnLmV4ZWMoZS5zbGljZShuLG4rMikpO3JldHVybiByPyh0Lnk9K3JbMF0rKCtyWzBdPjY4PzE5MDA6MmUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBjbSh0LGUsbil7dmFyIHI9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShuLG4rNikpO3JldHVybiByPyh0Llo9clsxXT8wOi0oclsyXSsoclszXXx8IjAwIikpLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHVtKHQsZSxuKXt2YXIgcj1HZy5leGVjKGUuc2xpY2UobixuKzEpKTtyZXR1cm4gcj8odC5xPTMqclswXS0zLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxtKHQsZSxuKXt2YXIgcj1HZy5leGVjKGUuc2xpY2UobixuKzIpKTtyZXR1cm4gcj8odC5tPXJbMF0tMSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBobSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBmbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQubT0wLHQuZD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBkbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuSD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBwbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuTT0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5bSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbisyKSk7cmV0dXJuIHI/KHQuUz0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBnbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbiszKSk7cmV0dXJuIHI/KHQuTD0rclswXSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBtbSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4sbis2KSk7cmV0dXJuIHI/KHQuTD1NYXRoLmZsb29yKHJbMF0vMWUzKSxuK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2bSh0LGUsbil7dmFyIHI9WGcuZXhlYyhlLnNsaWNlKG4sbisxKSk7cmV0dXJuIHI/bityWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBibSh0LGUsbil7dmFyIHI9R2cuZXhlYyhlLnNsaWNlKG4pKTtyZXR1cm4gcj8odC5RPStyWzBdLG4rclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHhtKHQsZSxuKXt2YXIgcj1HZy5leGVjKGUuc2xpY2UobikpO3JldHVybiByPyh0LnM9K3JbMF0sbityWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gX20odCxlKXtyZXR1cm4gS2codC5nZXREYXRlKCksZSwyKX1mdW5jdGlvbiBrbSh0LGUpe3JldHVybiBLZyh0LmdldEhvdXJzKCksZSwyKX1mdW5jdGlvbiB3bSh0LGUpe3JldHVybiBLZyh0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gVG0odCxlKXtyZXR1cm4gS2coMStyZy5jb3VudChSeSh0KSx0KSxlLDMpfWZ1bmN0aW9uIEVtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0TWlsbGlzZWNvbmRzKCksZSwzKX1mdW5jdGlvbiBDbSh0LGUpe3JldHVybiBFbSh0LGUpKyIwMDAifWZ1bmN0aW9uIFNtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0TW9udGgoKSsxLGUsMil9ZnVuY3Rpb24gQW0odCxlKXtyZXR1cm4gS2codC5nZXRNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBNbSh0LGUpe3JldHVybiBLZyh0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIE9tKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuIDA9PT1lPzc6ZX1mdW5jdGlvbiBObSh0LGUpe3JldHVybiBLZyhVeS5jb3VudChSeSh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gQm0odCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gZT49NHx8MD09PWU/SHkodCk6SHkuY2VpbCh0KX1mdW5jdGlvbiBEbSh0LGUpe3JldHVybiB0PUJtKHQpLEtnKEh5LmNvdW50KFJ5KHQpLHQpKyg0PT09UnkodCkuZ2V0RGF5KCkpLGUsMil9ZnVuY3Rpb24gTG0odCl7cmV0dXJuIHQuZ2V0RGF5KCl9ZnVuY3Rpb24gSW0odCxlKXtyZXR1cm4gS2coJHkuY291bnQoUnkodCktMSx0KSxlLDIpfWZ1bmN0aW9uIFJtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBGbSh0LGUpe3JldHVybiBLZygodD1CbSh0KSkuZ2V0RnVsbFllYXIoKSUxMDAsZSwyKX1mdW5jdGlvbiBQbSh0LGUpe3JldHVybiBLZyh0LmdldEZ1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gam0odCxlKXt2YXIgbj10LmdldERheSgpO3JldHVybiBLZygodD1uPj00fHwwPT09bj9IeSh0KTpIeS5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxlLDQpfWZ1bmN0aW9uIFltKHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrS2coZS82MHwwLCIwIiwyKStLZyhlJTYwLCIwIiwyKX1mdW5jdGlvbiB6bSh0LGUpe3JldHVybiBLZyh0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIFVtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDSG91cnMoKSxlLDIpfWZ1bmN0aW9uICRtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDSG91cnMoKSUxMnx8MTIsZSwyKX1mdW5jdGlvbiBxbSh0LGUpe3JldHVybiBLZygxK0RnLmNvdW50KFJnKHQpLHQpLGUsMyl9ZnVuY3Rpb24gV20odCxlKXtyZXR1cm4gS2codC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIEhtKHQsZSl7cmV0dXJuIFdtKHQsZSkrIjAwMCJ9ZnVuY3Rpb24gVm0odCxlKXtyZXR1cm4gS2codC5nZXRVVENNb250aCgpKzEsZSwyKX1mdW5jdGlvbiBHbSh0LGUpe3JldHVybiBLZyh0LmdldFVUQ01pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIFhtKHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gWm0odCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEttKHQsZSl7cmV0dXJuIEtnKHZnLmNvdW50KFJnKHQpLTEsdCksZSwyKX1mdW5jdGlvbiBRbSh0KXt2YXIgZT10LmdldFVUQ0RheSgpO3JldHVybiBlPj00fHwwPT09ZT9rZyh0KTprZy5jZWlsKHQpfWZ1bmN0aW9uIEptKHQsZSl7cmV0dXJuIHQ9UW0odCksS2coa2cuY291bnQoUmcodCksdCkrKDQ9PT1SZyh0KS5nZXRVVENEYXkoKSksZSwyKX1mdW5jdGlvbiB0dih0KXtyZXR1cm4gdC5nZXRVVENEYXkoKX1mdW5jdGlvbiBldih0LGUpe3JldHVybiBLZyhiZy5jb3VudChSZyh0KS0xLHQpLGUsMil9ZnVuY3Rpb24gbnYodCxlKXtyZXR1cm4gS2codC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHJ2KHQsZSl7cmV0dXJuIEtnKCh0PVFtKHQpKS5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIGl2KHQsZSl7cmV0dXJuIEtnKHQuZ2V0VVRDRnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiBhdih0LGUpe3ZhciBuPXQuZ2V0VVRDRGF5KCk7cmV0dXJuIEtnKCh0PW4+PTR8fDA9PT1uP2tnKHQpOmtnLmNlaWwodCkpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24gb3YoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIHN2KCl7cmV0dXJuIiUifWZ1bmN0aW9uIGN2KHQpe3JldHVybit0fWZ1bmN0aW9uIHV2KHQpe3JldHVybiBNYXRoLmZsb29yKCt0LzFlMyl9ZnVuY3Rpb24gbHYodCl7cmV0dXJuIFVnPXpnKHQpLCRnPVVnLmZvcm1hdCxxZz1VZy5wYXJzZSxXZz1VZy51dGNGb3JtYXQsSGc9VWcudXRjUGFyc2UsVWd9bHYoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTtmdW5jdGlvbiBodih0KXtyZXR1cm4gbmV3IERhdGUodCl9ZnVuY3Rpb24gZnYodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlPyt0OituZXcgRGF0ZSgrdCl9ZnVuY3Rpb24gZHYodCxlLG4scixpLG8scyxjLHUpe3ZhciBsPWF5KFFwLFFwKSxoPWwuaW52ZXJ0LGY9bC5kb21haW4sZD11KCIuJUwiKSxwPXUoIjolUyIpLHk9dSgiJUk6JU0iKSxnPXUoIiVJICVwIiksbT11KCIlYSAlZCIpLHY9dSgiJWIgJWQiKSxiPXUoIiVCIikseD11KCIlWSIpLF89W1tzLDEsMWUzXSxbcyw1LDVlM10sW3MsMTUsMTVlM10sW3MsMzAsM2U0XSxbbywxLDZlNF0sW28sNSwzZTVdLFtvLDE1LDllNV0sW28sMzAsMThlNV0sW2ksMSwzNmU1XSxbaSwzLDEwOGU1XSxbaSw2LDIxNmU1XSxbaSwxMiw0MzJlNV0sW3IsMSw4NjRlNV0sW3IsMiwxNzI4ZTVdLFtuLDEsNjA0OGU1XSxbZSwxLDI1OTJlNl0sW2UsMyw3Nzc2ZTZdLFt0LDEsMzE1MzZlNl1dO2Z1bmN0aW9uIGsoYSl7cmV0dXJuKHMoYSk8YT9kOm8oYSk8YT9wOmkoYSk8YT95OnIoYSk8YT9nOmUoYSk8YT9uKGEpPGE/bTp2OnQoYSk8YT9iOngpKGEpfWZ1bmN0aW9uIHcoZSxuLHIsaSl7aWYobnVsbD09ZSYmKGU9MTApLCJudW1iZXIiPT10eXBlb2YgZSl7dmFyIG89TWF0aC5hYnMoci1uKS9lLHM9YSgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMl19KSkucmlnaHQoXyxvKTtzPT09Xy5sZW5ndGg/KGk9TShuLzMxNTM2ZTYsci8zMTUzNmU2LGUpLGU9dCk6cz8oaT0ocz1fW28vX1tzLTFdWzJdPF9bc11bMl0vbz9zLTE6c10pWzFdLGU9c1swXSk6KGk9TWF0aC5tYXgoTShuLHIsZSksMSksZT1jKX1yZXR1cm4gbnVsbD09aT9lOmUuZXZlcnkoaSl9cmV0dXJuIGwuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRGF0ZShoKHQpKX0sbC5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZigkcC5jYWxsKHQsZnYpKTpmKCkubWFwKGh2KX0sbC50aWNrcz1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZigpLGk9clswXSxhPXJbci5sZW5ndGgtMV0sbz1hPGk7cmV0dXJuIG8mJihuPWksaT1hLGE9biksbj0obj13KHQsaSxhLGUpKT9uLnJhbmdlKGksYSsxKTpbXSxvP24ucmV2ZXJzZSgpOm59LGwudGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT1lP2s6dShlKX0sbC5uaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZigpO3JldHVybih0PXcodCxuWzBdLG5bbi5sZW5ndGgtMV0sZSkpP2YobHkobix0KSk6bH0sbC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHJ5KGwsZHYodCxlLG4scixpLG8scyxjLHUpKX0sbH12YXIgcHY9ZnVuY3Rpb24oKXtyZXR1cm4gWXAuYXBwbHkoZHYoUnksanksVXkscmcsb2csdWcsZmcseWcsJGcpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfSx5dj1MeSgoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGd2PXl2LG12PXl2LnJhbmdlLHZ2PUx5KChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksYnY9dnYseHY9dnYucmFuZ2UsX3Y9THkoKGZ1bmN0aW9uKHQpe3Quc2V0VVRDU2Vjb25kcygwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzZlNCplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzZlNH0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNaW51dGVzKCl9KSksa3Y9X3Ysd3Y9X3YucmFuZ2UsVHY9ZnVuY3Rpb24oKXtyZXR1cm4gWXAuYXBwbHkoZHYoUmcsZ3YsdmcsRGcsYnYsa3YsZmcseWcsV2cpLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKSxhcmd1bWVudHMpfTtmdW5jdGlvbiBFdigpe3ZhciB0LGUsbixyLGksYT0wLG89MSxzPVFwLGM9ITE7ZnVuY3Rpb24gdShlKXtyZXR1cm4gaXNOYU4oZT0rZSk/aTpzKDA9PT1uPy41OihlPShyKGUpLXQpKm4sYz9NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpOmUpKX1yZXR1cm4gdS5kb21haW49ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cihhPStpWzBdKSxlPXIobz0raVsxXSksbj10PT09ZT8wOjEvKGUtdCksdSk6W2Esb119LHUuY2xhbXA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ISF0LHUpOmN9LHUuaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsdSk6c30sdS51bmtub3duPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsdSk6aX0sZnVuY3Rpb24oaSl7cmV0dXJuIHI9aSx0PWkoYSksZT1pKG8pLG49dD09PWU/MDoxLyhlLXQpLHV9fWZ1bmN0aW9uIEN2KHQsZSl7cmV0dXJuIGUuZG9tYWluKHQuZG9tYWluKCkpLmludGVycG9sYXRvcih0LmludGVycG9sYXRvcigpKS5jbGFtcCh0LmNsYW1wKCkpLnVua25vd24odC51bmtub3duKCkpfWZ1bmN0aW9uIFN2KCl7dmFyIHQ9c3koRXYoKShRcCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQ3YodCxTdigpKX0senAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIEF2KCl7dmFyIHQ9bXkoRXYoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDdih0LEF2KCkpLmJhc2UodC5iYXNlKCkpfSx6cC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gTXYoKXt2YXIgdD1feShFdigpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEN2KHQsTXYoKSkuY29uc3RhbnQodC5jb25zdGFudCgpKX0senAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIE92KCl7dmFyIHQ9Q3koRXYoKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDdih0LE92KCkpLmV4cG9uZW50KHQuZXhwb25lbnQoKSl9LHpwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBOdigpe3JldHVybiBPdi5hcHBseShudWxsLGFyZ3VtZW50cykuZXhwb25lbnQoLjUpfWZ1bmN0aW9uIEJ2KCl7dmFyIHQ9W10sZT1RcDtmdW5jdGlvbiBuKG4pe2lmKCFpc05hTihuPStuKSlyZXR1cm4gZSgodSh0LG4pLTEpLyh0Lmxlbmd0aC0xKSl9cmV0dXJuIG4uZG9tYWluPWZ1bmN0aW9uKGUpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dD1bXTtmb3IodmFyIHIsYT0wLG89ZS5sZW5ndGg7YTxvOysrYSludWxsPT0ocj1lW2FdKXx8aXNOYU4ocj0rcil8fHQucHVzaChyKTtyZXR1cm4gdC5zb3J0KGkpLG59LG4uaW50ZXJwb2xhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJ2KGUpLmRvbWFpbih0KX0senAuYXBwbHkobixhcmd1bWVudHMpfWZ1bmN0aW9uIER2KCl7dmFyIHQsZSxuLHIsaSxhLG8scz0wLGM9LjUsdT0xLGw9UXAsaD0hMTtmdW5jdGlvbiBmKHQpe3JldHVybiBpc05hTih0PSt0KT9vOih0PS41KygodD0rYSh0KSktZSkqKHQ8ZT9yOmkpLGwoaD9NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpOnQpKX1yZXR1cm4gZi5kb21haW49ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YShzPStvWzBdKSxlPWEoYz0rb1sxXSksbj1hKHU9K29bMl0pLHI9dD09PWU/MDouNS8oZS10KSxpPWU9PT1uPzA6LjUvKG4tZSksZik6W3MsYyx1XX0sZi5jbGFtcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0hIXQsZik6aH0sZi5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCxmKTpsfSxmLnVua25vd249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxmKTpvfSxmdW5jdGlvbihvKXtyZXR1cm4gYT1vLHQ9byhzKSxlPW8oYyksbj1vKHUpLHI9dD09PWU/MDouNS8oZS10KSxpPWU9PT1uPzA6LjUvKG4tZSksZn19ZnVuY3Rpb24gTHYoKXt2YXIgdD1zeShEdigpKFFwKSk7cmV0dXJuIHQuY29weT1mdW5jdGlvbigpe3JldHVybiBDdih0LEx2KCkpfSx6cC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gSXYoKXt2YXIgdD1teShEdigpKS5kb21haW4oWy4xLDEsMTBdKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEN2KHQsSXYoKSkuYmFzZSh0LmJhc2UoKSl9LHpwLmFwcGx5KHQsYXJndW1lbnRzKX1mdW5jdGlvbiBSdigpe3ZhciB0PV95KER2KCkpO3JldHVybiB0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQ3YodCxSdigpKS5jb25zdGFudCh0LmNvbnN0YW50KCkpfSx6cC5hcHBseSh0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gRnYoKXt2YXIgdD1DeShEdigpKTtyZXR1cm4gdC5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEN2KHQsRnYoKSkuZXhwb25lbnQodC5leHBvbmVudCgpKX0senAuYXBwbHkodCxhcmd1bWVudHMpfWZ1bmN0aW9uIFB2KCl7cmV0dXJuIEZ2LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9dmFyIGp2PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC82fDAsbj1uZXcgQXJyYXkoZSkscj0wO3I8ZTspbltyXT0iIyIrdC5zbGljZSg2KnIsNiorK3IpO3JldHVybiBufSxZdj1qdigiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmIiksenY9anYoIjdmYzk3ZmJlYWVkNGZkYzA4NmZmZmY5OTM4NmNiMGYwMDI3ZmJmNWIxNzY2NjY2NiIpLFV2PWp2KCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKSwkdj1qdigiYTZjZWUzMWY3OGI0YjJkZjhhMzNhMDJjZmI5YTk5ZTMxYTFjZmRiZjZmZmY3ZjAwY2FiMmQ2NmEzZDlhZmZmZjk5YjE1OTI4IikscXY9anYoImZiYjRhZWIzY2RlM2NjZWJjNWRlY2JlNGZlZDlhNmZmZmZjY2U1ZDhiZGZkZGFlY2YyZjJmMiIpLFd2PWp2KCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKSxIdj1qdigiZTQxYTFjMzc3ZWI4NGRhZjRhOTg0ZWEzZmY3ZjAwZmZmZjMzYTY1NjI4Zjc4MWJmOTk5OTk5IiksVnY9anYoIjY2YzJhNWZjOGQ2MjhkYTBjYmU3OGFjM2E2ZDg1NGZmZDkyZmU1YzQ5NGIzYjNiMyIpLEd2PWp2KCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKSxYdj1qdigiNGU3OWE3ZjI4ZTJjZTE1NzU5NzZiN2IyNTlhMTRmZWRjOTQ5YWY3YWExZmY5ZGE3OWM3NTVmYmFiMGFiIiksWnY9ZnVuY3Rpb24odCl7cmV0dXJuIHluKHRbdC5sZW5ndGgtMV0pfSxLdj1uZXcgQXJyYXkoMykuY29uY2F0KCJkOGIzNjVmNWY1ZjU1YWI0YWMiLCJhNjYxMWFkZmMyN2Q4MGNkYzEwMTg1NzEiLCJhNjYxMWFkZmMyN2RmNWY1ZjU4MGNkYzEwMTg1NzEiLCI4YzUxMGFkOGIzNjVmNmU4YzNjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFkOGIzNjVmNmU4YzNmNWY1ZjVjN2VhZTU1YWI0YWMwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiLCI1NDMwMDU4YzUxMGFiZjgxMmRkZmMyN2RmNmU4YzNmNWY1ZjVjN2VhZTU4MGNkYzEzNTk3OGYwMTY2NWUwMDNjMzAiKS5tYXAoanYpLFF2PVp2KEt2KSxKdj1uZXcgQXJyYXkoMykuY29uY2F0KCJhZjhkYzNmN2Y3Zjc3ZmJmN2IiLCI3YjMyOTRjMmE1Y2ZhNmRiYTAwMDg4MzciLCI3YjMyOTRjMmE1Y2ZmN2Y3ZjdhNmRiYTAwMDg4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODNhZjhkYzNlN2Q0ZThmN2Y3ZjdkOWYwZDM3ZmJmN2IxYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzciLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiLCI0MDAwNGI3NjJhODM5OTcwYWJjMmE1Y2ZlN2Q0ZThmN2Y3ZjdkOWYwZDNhNmRiYTA1YWFlNjExYjc4MzcwMDQ0MWIiKS5tYXAoanYpLHRiPVp2KEp2KSxlYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAoanYpLG5iPVp2KGViKSxyYj1uZXcgQXJyYXkoMykuY29uY2F0KCI5OThlYzNmN2Y3ZjdmMWEzNDAiLCI1ZTNjOTliMmFiZDJmZGI4NjNlNjYxMDEiLCI1ZTNjOTliMmFiZDJmN2Y3ZjdmZGI4NjNlNjYxMDEiLCI1NDI3ODg5OThlYzNkOGRhZWJmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg5OThlYzNkOGRhZWJmN2Y3ZjdmZWUwYjZmMWEzNDBiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDYiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiLCIyZDAwNGI1NDI3ODg4MDczYWNiMmFiZDJkOGRhZWJmN2Y3ZjdmZWUwYjZmZGI4NjNlMDgyMTRiMzU4MDY3ZjNiMDgiKS5tYXAoanYpLGliPVp2KHJiKSxhYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmN2Y3Zjc2N2E5Y2YiLCJjYTAwMjBmNGE1ODI5MmM1ZGUwNTcxYjAiLCJjYTAwMjBmNGE1ODJmN2Y3Zjc5MmM1ZGUwNTcxYjAiLCJiMjE4MmJlZjhhNjJmZGRiYzdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJlZjhhNjJmZGRiYzdmN2Y3ZjdkMWU1ZjA2N2E5Y2YyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmN2Y3ZjdkMWU1ZjA5MmM1ZGU0MzkzYzMyMTY2YWMwNTMwNjEiKS5tYXAoanYpLG9iPVp2KGFiKSxzYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAoanYpLGNiPVp2KHNiKSx1Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWJmZGIiLCJkNzE5MWNmZGFlNjFhYmQ5ZTkyYzdiYjYiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmQ5ZTkyYzdiYjYiLCJkNzMwMjdmYzhkNTlmZWUwOTBlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmYzhkNTlmZWUwOTBmZmZmYmZlMGYzZjg5MWJmZGI0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOTBmZmZmYmZlMGYzZjhhYmQ5ZTk3NGFkZDE0NTc1YjQzMTM2OTUiKS5tYXAoanYpLGxiPVp2KHViKSxoYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5MWNmNjAiLCJkNzE5MWNmZGFlNjFhNmQ5NmExYTk2NDEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhNmQ5NmExYTk2NDEiLCJkNzMwMjdmYzhkNTlmZWUwOGJkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmYzhkNTlmZWUwOGJmZmZmYmZkOWVmOGI5MWNmNjAxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAiLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciLCJhNTAwMjZkNzMwMjdmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZkOWVmOGJhNmQ5NmE2NmJkNjMxYTk4NTAwMDY4MzciKS5tYXAoanYpLGZiPVp2KGhiKSxkYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAoanYpLHBiPVp2KGRiKSx5Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1Zjk5OWQ4YzkyY2EyNWYiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyMzhiNDUiLCJlZGY4ZmJiMmUyZTI2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQyY2EyNWYwMDZkMmMiLCJlZGY4ZmJjY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDU4MjQiLCJmN2ZjZmRlNWY1ZjljY2VjZTY5OWQ4Yzk2NmMyYTQ0MWFlNzYyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoanYpLGdiPVp2KHliKSxtYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGVjZjQ5ZWJjZGE4ODU2YTciLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODQxOWQiLCJlZGY4ZmJiM2NkZTM4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4ODU2YTc4MTBmN2MiLCJlZGY4ZmJiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ2ZTAxNmIiLCJmN2ZjZmRlMGVjZjRiZmQzZTY5ZWJjZGE4Yzk2YzY4YzZiYjE4ODQxOWQ4MTBmN2M0ZDAwNGIiKS5tYXAoanYpLHZiPVp2KG1iKSxiYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAoanYpLHhiPVp2KGJiKSxfYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU4YzhmZGJiODRlMzRhMzMiLCJmZWYwZDlmZGNjOGFmYzhkNTlkNzMwMWYiLCJmZWYwZDlmZGNjOGFmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllMzRhMzNiMzAwMDAiLCJmZWYwZDlmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWY5OTAwMDAiLCJmZmY3ZWNmZWU4YzhmZGQ0OWVmZGJiODRmYzhkNTllZjY1NDhkNzMwMWZiMzAwMDA3ZjAwMDAiKS5tYXAoanYpLGtiPVp2KF9iKSx3Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2UyZjBhNmJkZGIxYzkwOTkiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YwMjgxOGEiLCJmNmVmZjdiZGM5ZTE2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YxYzkwOTkwMTZjNTkiLCJmNmVmZjdkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTY0NTAiLCJmZmY3ZmJlY2UyZjBkMGQxZTZhNmJkZGI2N2E5Y2YzNjkwYzAwMjgxOGEwMTZjNTkwMTQ2MzYiKS5tYXAoanYpLFRiPVp2KHdiKSxFYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAoanYpLENiPVp2KEViKSxTYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlN2UxZWZjOTk0YzdkZDFjNzciLCJmMWVlZjZkN2I1ZDhkZjY1YjBjZTEyNTYiLCJmMWVlZjZkN2I1ZDhkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBkZDFjNzc5ODAwNDMiLCJmMWVlZjZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5MTAwM2YiLCJmN2Y0ZjllN2UxZWZkNGI5ZGFjOTk0YzdkZjY1YjBlNzI5OGFjZTEyNTY5ODAwNDM2NzAwMWYiKS5tYXAoanYpLEFiPVp2KFNiKSxNYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZGUwZGRmYTlmYjVjNTFiOGEiLCJmZWViZTJmYmI0YjlmNzY4YTFhZTAxN2UiLCJmZWViZTJmYmI0YjlmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFjNTFiOGE3YTAxNzciLCJmZWViZTJmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzciLCJmZmY3ZjNmZGUwZGRmY2M1YzBmYTlmYjVmNzY4YTFkZDM0OTdhZTAxN2U3YTAxNzc0OTAwNmEiKS5tYXAoanYpLE9iPVp2KE1iKSxOYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAoanYpLEJiPVp2KE5iKSxEYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmN2ZjYjlhZGRkOGUzMWEzNTQiLCJmZmZmY2NjMmU2OTk3OGM2NzkyMzg0NDMiLCJmZmZmY2NjMmU2OTk3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2NzkzMWEzNTQwMDY4MzciLCJmZmZmY2NkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDVhMzIiLCJmZmZmZTVmN2ZjYjlkOWYwYTNhZGRkOGU3OGM2Nzk0MWFiNWQyMzg0NDMwMDY4MzcwMDQ1MjkiKS5tYXAoanYpLExiPVp2KERiKSxJYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmY3YmNmZWM0NGZkOTVmMGUiLCJmZmZmZDRmZWQ5OGVmZTk5MjljYzRjMDIiLCJmZmZmZDRmZWQ5OGVmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjlkOTVmMGU5OTM0MDQiLCJmZmZmZDRmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI4YzJkMDQiLCJmZmZmZTVmZmY3YmNmZWUzOTFmZWM0NGZmZTk5MjllYzcwMTRjYzRjMDI5OTM0MDQ2NjI1MDYiKS5tYXAoanYpLFJiPVp2KEliKSxGYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAoanYpLFBiPVp2KEZiKSxqYj1uZXcgQXJyYXkoMykuY29uY2F0KCJkZWViZjc5ZWNhZTEzMTgyYmQiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYyMTcxYjUiLCJlZmYzZmZiZGQ3ZTc2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDYzMTgyYmQwODUxOWMiLCJlZmYzZmZjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODQ1OTQiLCJmN2ZiZmZkZWViZjdjNmRiZWY5ZWNhZTE2YmFlZDY0MjkyYzYyMTcxYjUwODUxOWMwODMwNmIiKS5tYXAoanYpLFliPVp2KGpiKSx6Yj1uZXcgQXJyYXkoMykuY29uY2F0KCJlNWY1ZTBhMWQ5OWIzMWEzNTQiLCJlZGY4ZTliYWU0YjM3NGM0NzYyMzhiNDUiLCJlZGY4ZTliYWU0YjM3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzYzMWEzNTQwMDZkMmMiLCJlZGY4ZTljN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDVhMzIiLCJmN2ZjZjVlNWY1ZTBjN2U5YzBhMWQ5OWI3NGM0NzY0MWFiNWQyMzhiNDUwMDZkMmMwMDQ0MWIiKS5tYXAoanYpLFViPVp2KHpiKSwkYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAoanYpLHFiPVp2KCRiKSxXYj1uZXcgQXJyYXkoMykuY29uY2F0KCJlZmVkZjViY2JkZGM3NTZiYjEiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg2YTUxYTMiLCJmMmYwZjdjYmM5ZTI5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg3NTZiYjE1NDI3OGYiLCJmMmYwZjdkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM0YTE0ODYiLCJmY2ZiZmRlZmVkZjVkYWRhZWJiY2JkZGM5ZTlhYzg4MDdkYmE2YTUxYTM1NDI3OGYzZjAwN2QiKS5tYXAoanYpLEhiPVp2KFdiKSxWYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWUwZDJmYzkyNzJkZTJkMjYiLCJmZWU1ZDlmY2FlOTFmYjZhNGFjYjE4MWQiLCJmZWU1ZDlmY2FlOTFmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFkZTJkMjZhNTBmMTUiLCJmZWU1ZDlmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWQ5OTAwMGQiLCJmZmY1ZjBmZWUwZDJmY2JiYTFmYzkyNzJmYjZhNGFlZjNiMmNjYjE4MWRhNTBmMTU2NzAwMGQiKS5tYXAoanYpLEdiPVp2KFZiKSxYYj1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAoanYpLFpiPVp2KFhiKSxLYj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKC00LjU0LXQqKDM1LjM0LXQqKDIzODEuNzMtdCooNjQwMi43LXQqKDcwMjQuNzItMjcxMC41Nyp0KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoMzIuNDkrdCooMTcwLjczK3QqKDUyLjgyLXQqKDEzMS40Ni10KigxNzYuNTgtNjcuMzcqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDgxLjI0K3QqKDQ0Mi4zNi10KigyNDgyLjQzLXQqKDYxNjcuMjQtdCooNjYxNC45NC0yNDc1LjY3KnQpKSkpKSkpKyIpIn0sUWI9d3AoTmEoMzAwLC41LDApLE5hKC0yNDAsLjUsMSkpLEpiPXdwKE5hKC0xMDAsLjc1LC4zNSksTmEoODAsMS41LC44KSksdHg9d3AoTmEoMjYwLC43NSwuMzUpLE5hKDgwLDEuNSwuOCkpLGV4PU5hKCksbng9ZnVuY3Rpb24odCl7KHQ8MHx8dD4xKSYmKHQtPU1hdGguZmxvb3IodCkpO3ZhciBlPU1hdGguYWJzKHQtLjUpO3JldHVybiBleC5oPTM2MCp0LTEwMCxleC5zPTEuNS0xLjUqZSxleC5sPS44LS45KmUsZXgrIiJ9LHJ4PUdlKCksaXg9TWF0aC5QSS8zLGF4PTIqTWF0aC5QSS8zLG94PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0PSguNS10KSpNYXRoLlBJLHJ4LnI9MjU1KihlPU1hdGguc2luKHQpKSplLHJ4Lmc9MjU1KihlPU1hdGguc2luKHQraXgpKSplLHJ4LmI9MjU1KihlPU1hdGguc2luKHQrYXgpKSplLHJ4KyIifSxzeD1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLm1heCgwLE1hdGgubWluKDEsdCkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK3QqKDExNzIuMzMtdCooMTA3OTMuNTYtdCooMzMzMDAuMTItdCooMzgzOTQuNDktMTQ4MjUuMDUqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK3QqKDU1Ny4zMyt0KigxMjI1LjMzLXQqKDM1NzQuOTYtdCooMTA3My43Nys3MDcuNTYqdCkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrdCooMzIxMS4xLXQqKDE1MzI3Ljk3LXQqKDI3ODE0LXQqKDIyNTY5LjE4LTY4MzguNjYqdCkpKSkpKSkrIikifTtmdW5jdGlvbiBjeCh0KXt2YXIgZT10Lmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHRbTWF0aC5tYXgoMCxNYXRoLm1pbihlLTEsTWF0aC5mbG9vcihuKmUpKSldfX12YXIgdXg9Y3goanYoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxseD1jeChqdigiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLGh4PWN4KGp2KCIwMDAwMDQwMTAwMDUwMTAxMDYwMTAxMDgwMjAxMGEwMjAyMGMwMjAyMGUwMzAyMTAwNDAzMTIwNDAzMTQwNTA0MTcwNjA0MTkwNzA1MWIwODA1MWQwOTA2MWYwYTA3MjIwYjA3MjQwYzA4MjYwZDA4MjkwZTA5MmIxMDA5MmQxMTBhMzAxMjBhMzIxNDBiMzQxNTBiMzcxNjBiMzkxODBjM2MxOTBjM2UxYjBjNDExYzBjNDMxZTBjNDUxZjBjNDgyMTBjNGEyMzBjNGMyNDBjNGYyNjBjNTEyODBiNTMyOTBiNTUyYjBiNTcyZDBiNTkyZjBhNWIzMTBhNWMzMjBhNWUzNDBhNWYzNjA5NjEzODA5NjIzOTA5NjMzYjA5NjQzZDA5NjUzZTA5NjY0MDBhNjc0MjBhNjg0NDBhNjg0NTBhNjk0NzBiNmE0OTBiNmE0YTBjNmI0YzBjNmI0ZDBkNmM0ZjBkNmM1MTBlNmM1MjBlNmQ1NDBmNmQ1NTBmNmQ1NzEwNmU1OTEwNmU1YTExNmU1YzEyNmU1ZDEyNmU1ZjEzNmU2MTEzNmU2MjE0NmU2NDE1NmU2NTE1NmU2NzE2NmU2OTE2NmU2YTE3NmU2YzE4NmU2ZDE4NmU2ZjE5NmU3MTE5NmU3MjFhNmU3NDFhNmU3NTFiNmU3NzFjNmQ3ODFjNmQ3YTFkNmQ3YzFkNmQ3ZDFlNmQ3ZjFlNmM4MDFmNmM4MjIwNmM4NDIwNmI4NTIxNmI4NzIxNmI4ODIyNmE4YTIyNmE4YzIzNjk4ZDIzNjk4ZjI0Njk5MDI1Njg5MjI1Njg5MzI2Njc5NTI2Njc5NzI3NjY5ODI3NjY5YTI4NjU5YjI5NjQ5ZDI5NjQ5ZjJhNjNhMDJhNjNhMjJiNjJhMzJjNjFhNTJjNjBhNjJkNjBhODJlNWZhOTJlNWVhYjJmNWVhZDMwNWRhZTMwNWNiMDMxNWJiMTMyNWFiMzMyNWFiNDMzNTliNjM0NThiNzM1NTdiOTM1NTZiYTM2NTViYzM3NTRiZDM4NTNiZjM5NTJjMDNhNTFjMTNhNTBjMzNiNGZjNDNjNGVjNjNkNGRjNzNlNGNjODNmNGJjYTQwNGFjYjQxNDljYzQyNDhjZTQzNDdjZjQ0NDZkMDQ1NDVkMjQ2NDRkMzQ3NDNkNDQ4NDJkNTRhNDFkNzRiM2ZkODRjM2VkOTRkM2RkYTRlM2NkYjUwM2JkZDUxM2FkZTUyMzhkZjUzMzdlMDU1MzZlMTU2MzVlMjU3MzRlMzU5MzNlNDVhMzFlNTVjMzBlNjVkMmZlNzVlMmVlODYwMmRlOTYxMmJlYTYzMmFlYjY0MjllYjY2MjhlYzY3MjZlZDY5MjVlZTZhMjRlZjZjMjNlZjZlMjFmMDZmMjBmMTcxMWZmMTczMWRmMjc0MWNmMzc2MWJmMzc4MTlmNDc5MThmNTdiMTdmNTdkMTVmNjdlMTRmNjgwMTNmNzgyMTJmNzg0MTBmODg1MGZmODg3MGVmODg5MGNmOThiMGJmOThjMGFmOThlMDlmYTkwMDhmYTkyMDdmYTk0MDdmYjk2MDZmYjk3MDZmYjk5MDZmYjliMDZmYjlkMDdmYzlmMDdmY2ExMDhmY2EzMDlmY2E1MGFmY2E2MGNmY2E4MGRmY2FhMGZmY2FjMTFmY2FlMTJmY2IwMTRmY2IyMTZmY2I0MThmYmI2MWFmYmI4MWRmYmJhMWZmYmJjMjFmYmJlMjNmYWMwMjZmYWMyMjhmYWM0MmFmYWM2MmRmOWM3MmZmOWM5MzJmOWNiMzVmOGNkMzdmOGNmM2FmN2QxM2RmN2QzNDBmNmQ1NDNmNmQ3NDZmNWQ5NDlmNWRiNGNmNGRkNGZmNGRmNTNmNGUxNTZmM2UzNWFmM2U1NWRmMmU2NjFmMmU4NjVmMmVhNjlmMWVjNmRmMWVkNzFmMWVmNzVmMWYxNzlmMmYyN2RmMmY0ODJmM2Y1ODZmM2Y2OGFmNGY4OGVmNWY5OTJmNmZhOTZmOGZiOWFmOWZjOWRmYWZkYTFmY2ZmYTQiKSksZng9Y3goanYoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKSxkeD1mdW5jdGlvbih0KXtyZXR1cm4gd2UocmUodCkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX0scHg9MDtmdW5jdGlvbiB5eCgpe3JldHVybiBuZXcgZ3h9ZnVuY3Rpb24gZ3goKXt0aGlzLl89IkAiKygrK3B4KS50b1N0cmluZygzNil9Z3gucHJvdG90eXBlPXl4LnByb3RvdHlwZT17Y29uc3RydWN0b3I6Z3gsZ2V0OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl87IShlIGluIHQpOylpZighKHQ9dC5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIHRbZV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0W3RoaXMuX109ZX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl8gaW4gdCYmZGVsZXRlIHRbdGhpcy5fXX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07dmFyIG14PWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9uZXcgeGUoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCldLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgeGUoW251bGw9PXQ/W106dF0sYmUpfSx2eD1mdW5jdGlvbih0LGUpe251bGw9PWUmJihlPU9uKCkudG91Y2hlcyk7Zm9yKHZhciBuPTAscj1lP2UubGVuZ3RoOjAsaT1uZXcgQXJyYXkocik7bjxyOysrbilpW25dPU5uKHQsZVtuXSk7cmV0dXJuIGl9LGJ4PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0seHg9TWF0aC5hYnMsX3g9TWF0aC5hdGFuMixreD1NYXRoLmNvcyx3eD1NYXRoLm1heCxUeD1NYXRoLm1pbixFeD1NYXRoLnNpbixDeD1NYXRoLnNxcnQsU3g9TWF0aC5QSSxBeD1TeC8yLE14PTIqU3g7ZnVuY3Rpb24gT3godCl7cmV0dXJuIHQ+MT8wOnQ8LTE/U3g6TWF0aC5hY29zKHQpfWZ1bmN0aW9uIE54KHQpe3JldHVybiB0Pj0xP0F4OnQ8PS0xPy1BeDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gQngodCl7cmV0dXJuIHQuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gRHgodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gTHgodCl7cmV0dXJuIHQuc3RhcnRBbmdsZX1mdW5jdGlvbiBJeCh0KXtyZXR1cm4gdC5lbmRBbmdsZX1mdW5jdGlvbiBSeCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBGeCh0LGUsbixyLGksYSxvLHMpe3ZhciBjPW4tdCx1PXItZSxsPW8taSxoPXMtYSxmPWgqYy1sKnU7aWYoIShmKmY8MWUtMTIpKXJldHVyblt0KyhmPShsKihlLWEpLWgqKHQtaSkpL2YpKmMsZStmKnVdfWZ1bmN0aW9uIFB4KHQsZSxuLHIsaSxhLG8pe3ZhciBzPXQtbixjPWUtcix1PShvP2E6LWEpL0N4KHMqcytjKmMpLGw9dSpjLGg9LXUqcyxmPXQrbCxkPWUraCxwPW4rbCx5PXIraCxnPShmK3ApLzIsbT0oZCt5KS8yLHY9cC1mLGI9eS1kLHg9dip2K2IqYixfPWktYSxrPWYqeS1wKmQsdz0oYjwwPy0xOjEpKkN4KHd4KDAsXypfKngtayprKSksVD0oaypiLXYqdykveCxFPSgtayp2LWIqdykveCxDPShrKmIrdip3KS94LFM9KC1rKnYrYip3KS94LEE9VC1nLE09RS1tLE89Qy1nLE49Uy1tO3JldHVybiBBKkErTSpNPk8qTytOKk4mJihUPUMsRT1TKSx7Y3g6VCxjeTpFLHgwMTotbCx5MDE6LWgseDExOlQqKGkvXy0xKSx5MTE6RSooaS9fLTEpfX12YXIgang9ZnVuY3Rpb24oKXt2YXIgdD1CeCxlPUR4LG49YngoMCkscj1udWxsLGk9THgsYT1JeCxvPVJ4LHM9bnVsbDtmdW5jdGlvbiBjKCl7dmFyIGMsdSxsPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxoPStlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLUF4LGQ9YS5hcHBseSh0aGlzLGFyZ3VtZW50cyktQXgscD14eChkLWYpLHk9ZD5mO2lmKHN8fChzPWM9JGkoKSksaDxsJiYodT1oLGg9bCxsPXUpLGg+MWUtMTIpaWYocD5NeC0xZS0xMilzLm1vdmVUbyhoKmt4KGYpLGgqRXgoZikpLHMuYXJjKDAsMCxoLGYsZCwheSksbD4xZS0xMiYmKHMubW92ZVRvKGwqa3goZCksbCpFeChkKSkscy5hcmMoMCwwLGwsZCxmLHkpKTtlbHNle3ZhciBnLG0sdj1mLGI9ZCx4PWYsXz1kLGs9cCx3PXAsVD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLEU9VD4xZS0xMiYmKHI/K3IuYXBwbHkodGhpcyxhcmd1bWVudHMpOkN4KGwqbCtoKmgpKSxDPVR4KHh4KGgtbCkvMiwrbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpLFM9QyxBPUM7aWYoRT4xZS0xMil7dmFyIE09TngoRS9sKkV4KFQpKSxPPU54KEUvaCpFeChUKSk7KGstPTIqTSk+MWUtMTI/KHgrPU0qPXk/MTotMSxfLT1NKTooaz0wLHg9Xz0oZitkKS8yKSwody09MipPKT4xZS0xMj8odis9Tyo9eT8xOi0xLGItPU8pOih3PTAsdj1iPShmK2QpLzIpfXZhciBOPWgqa3godiksQj1oKkV4KHYpLEQ9bCpreChfKSxMPWwqRXgoXyk7aWYoQz4xZS0xMil7dmFyIEksUj1oKmt4KGIpLEY9aCpFeChiKSxQPWwqa3goeCksaj1sKkV4KHgpO2lmKHA8U3gmJihJPUZ4KE4sQixQLGosUixGLEQsTCkpKXt2YXIgWT1OLUlbMF0sej1CLUlbMV0sVT1SLUlbMF0sJD1GLUlbMV0scT0xL0V4KE94KChZKlUreiokKS8oQ3goWSpZK3oqeikqQ3goVSpVKyQqJCkpKS8yKSxXPUN4KElbMF0qSVswXStJWzFdKklbMV0pO1M9VHgoQywobC1XKS8ocS0xKSksQT1UeChDLChoLVcpLyhxKzEpKX19dz4xZS0xMj9BPjFlLTEyPyhnPVB4KFAsaixOLEIsaCxBLHkpLG09UHgoUixGLEQsTCxoLEEseSkscy5tb3ZlVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxBPEM/cy5hcmMoZy5jeCxnLmN5LEEsX3goZy55MDEsZy54MDEpLF94KG0ueTAxLG0ueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxBLF94KGcueTAxLGcueDAxKSxfeChnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxoLF94KGcuY3krZy55MTEsZy5jeCtnLngxMSksX3gobS5jeSttLnkxMSxtLmN4K20ueDExKSwheSkscy5hcmMobS5jeCxtLmN5LEEsX3gobS55MTEsbS54MTEpLF94KG0ueTAxLG0ueDAxKSwheSkpKToocy5tb3ZlVG8oTixCKSxzLmFyYygwLDAsaCx2LGIsIXkpKTpzLm1vdmVUbyhOLEIpLGw+MWUtMTImJms+MWUtMTI/Uz4xZS0xMj8oZz1QeChELEwsUixGLGwsLVMseSksbT1QeChOLEIsUCxqLGwsLVMseSkscy5saW5lVG8oZy5jeCtnLngwMSxnLmN5K2cueTAxKSxTPEM/cy5hcmMoZy5jeCxnLmN5LFMsX3goZy55MDEsZy54MDEpLF94KG0ueTAxLG0ueDAxKSwheSk6KHMuYXJjKGcuY3gsZy5jeSxTLF94KGcueTAxLGcueDAxKSxfeChnLnkxMSxnLngxMSksIXkpLHMuYXJjKDAsMCxsLF94KGcuY3krZy55MTEsZy5jeCtnLngxMSksX3gobS5jeSttLnkxMSxtLmN4K20ueDExKSx5KSxzLmFyYyhtLmN4LG0uY3ksUyxfeChtLnkxMSxtLngxMSksX3gobS55MDEsbS54MDEpLCF5KSkpOnMuYXJjKDAsMCxsLF8seCx5KTpzLmxpbmVUbyhELEwpfWVsc2Ugcy5tb3ZlVG8oMCwwKTtpZihzLmNsb3NlUGF0aCgpLGMpcmV0dXJuIHM9bnVsbCxjKyIifHxudWxsfXJldHVybiBjLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLVN4LzI7cmV0dXJuW2t4KHIpKm4sRXgocikqbl19LGMuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpieCgrZSksYyk6dH0sYy5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTplfSxjLmNvcm5lclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpufSxjLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksYyk6cn0sYy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLGMpOml9LGMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksYyk6YX0sYy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpvfSxjLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bnVsbD09dD9udWxsOnQsYyk6c30sY307ZnVuY3Rpb24gWXgodCl7dGhpcy5fY29udGV4dD10fVl4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpfX19O3ZhciB6eD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFl4KHQpfTtmdW5jdGlvbiBVeCh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiAkeCh0KXtyZXR1cm4gdFsxXX12YXIgcXg9ZnVuY3Rpb24oKXt2YXIgdD1VeCxlPSR4LG49YngoITApLHI9bnVsbCxpPXp4LGE9bnVsbDtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsdSxsPW8ubGVuZ3RoLGg9ITE7Zm9yKG51bGw9PXImJihhPWkodT0kaSgpKSkscz0wO3M8PWw7KytzKSEoczxsJiZuKGM9b1tzXSxzLG8pKT09PWgmJigoaD0haCk/YS5saW5lU3RhcnQoKTphLmxpbmVFbmQoKSksaCYmYS5wb2ludCgrdChjLHMsbyksK2UoYyxzLG8pKTtpZih1KXJldHVybiBhPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gby54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YngoK2UpLG8pOnR9LG8ueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxvKTplfSxvLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCghIXQpLG8pOm59LG8uY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxudWxsIT1yJiYoYT1pKHIpKSxvKTppfSxvLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/cj1hPW51bGw6YT1pKHI9dCksbyk6cn0sb30sV3g9ZnVuY3Rpb24oKXt2YXIgdD1VeCxlPW51bGwsbj1ieCgwKSxyPSR4LGk9YngoITApLGE9bnVsbCxvPXp4LHM9bnVsbDtmdW5jdGlvbiBjKGMpe3ZhciB1LGwsaCxmLGQscD1jLmxlbmd0aCx5PSExLGc9bmV3IEFycmF5KHApLG09bmV3IEFycmF5KHApO2ZvcihudWxsPT1hJiYocz1vKGQ9JGkoKSkpLHU9MDt1PD1wOysrdSl7aWYoISh1PHAmJmkoZj1jW3VdLHUsYykpPT09eSlpZih5PSF5KWw9dSxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxoPXUtMTtoPj1sOy0taClzLnBvaW50KGdbaF0sbVtoXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9eSYmKGdbdV09K3QoZix1LGMpLG1bdV09K24oZix1LGMpLHMucG9pbnQoZT8rZShmLHUsYyk6Z1t1XSxyPytyKGYsdSxjKTptW3VdKSl9aWYoZClyZXR1cm4gcz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gdSgpe3JldHVybiBxeCgpLmRlZmluZWQoaSkuY3VydmUobykuY29udGV4dChhKX1yZXR1cm4gYy54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246YngoK24pLGU9bnVsbCxjKTp0fSxjLngwPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YngoK2UpLGMpOnR9LGMueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLGMpOmV9LGMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxyPW51bGwsYyk6bn0sYy55MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpufSxjLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxjKTpyfSxjLmxpbmVYMD1jLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiB1KCkueCh0KS55KG4pfSxjLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiB1KCkueCh0KS55KHIpfSxjLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiB1KCkueChlKS55KG4pfSxjLmRlZmluZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCghIXQpLGMpOml9LGMuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxjKTpvfSxjLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksYyk6YX0sY30sSHg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59LFZ4PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxHeD1mdW5jdGlvbigpe3ZhciB0PVZ4LGU9SHgsbj1udWxsLHI9YngoMCksaT1ieChNeCksYT1ieCgwKTtmdW5jdGlvbiBvKG8pe3ZhciBzLGMsdSxsLGgsZj1vLmxlbmd0aCxkPTAscD1uZXcgQXJyYXkoZikseT1uZXcgQXJyYXkoZiksZz0rci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbT1NYXRoLm1pbihNeCxNYXRoLm1heCgtTXgsaS5hcHBseSh0aGlzLGFyZ3VtZW50cyktZykpLHY9TWF0aC5taW4oTWF0aC5hYnMobSkvZixhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj12KihtPDA/LTE6MSk7Zm9yKHM9MDtzPGY7KytzKShoPXlbcFtzXT1zXT0rdChvW3NdLHMsbykpPjAmJihkKz1oKTtmb3IobnVsbCE9ZT9wLnNvcnQoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoeVt0XSx5W25dKX0pKTpudWxsIT1uJiZwLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4ob1t0XSxvW2VdKX0pKSxzPTAsdT1kPyhtLWYqYikvZDowO3M8ZjsrK3MsZz1sKWM9cFtzXSxsPWcrKChoPXlbY10pPjA/aCp1OjApK2IseVtjXT17ZGF0YTpvW2NdLGluZGV4OnMsdmFsdWU6aCxzdGFydEFuZ2xlOmcsZW5kQW5nbGU6bCxwYWRBbmdsZTp2fTtyZXR1cm4geX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmJ4KCtlKSxvKTp0fSxvLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuPW51bGwsbyk6ZX0sby5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQsZT1udWxsLG8pOm59LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KCt0KSxvKTpyfSxvLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLG8pOml9LG8ucGFkQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksbyk6YX0sb30sWHg9S3goengpO2Z1bmN0aW9uIFp4KHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gS3godCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gbmV3IFp4KHQoZSkpfXJldHVybiBlLl9jdXJ2ZT10LGV9ZnVuY3Rpb24gUXgodCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoS3godCkpOmUoKS5fY3VydmV9LHR9WngucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5fY3VydmUucG9pbnQoZSpNYXRoLnNpbih0KSxlKi1NYXRoLmNvcyh0KSl9fTt2YXIgSng9ZnVuY3Rpb24oKXtyZXR1cm4gUXgocXgoKS5jdXJ2ZShYeCkpfSx0Xz1mdW5jdGlvbigpe3ZhciB0PVd4KCkuY3VydmUoWHgpLGU9dC5jdXJ2ZSxuPXQubGluZVgwLHI9dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gUXgobigpKX0sZGVsZXRlIHQubGluZVgwLHQubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIFF4KHIoKSl9LGRlbGV0ZSB0LmxpbmVYMSx0LmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBReChpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gUXgoYSgpKX0sZGVsZXRlIHQubGluZVkxLHQuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShLeCh0KSk6ZSgpLl9jdXJ2ZX0sdH0sZV89ZnVuY3Rpb24odCxlKXtyZXR1cm5bKGU9K2UpKk1hdGguY29zKHQtPU1hdGguUEkvMiksZSpNYXRoLnNpbih0KV19LG5fPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiByXyh0KXtyZXR1cm4gdC5zb3VyY2V9ZnVuY3Rpb24gaV8odCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGFfKHQpe3ZhciBlPXJfLG49aV8scj1VeCxpPSR4LGE9bnVsbDtmdW5jdGlvbiBvKCl7dmFyIG8scz1uXy5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMscyksdT1uLmFwcGx5KHRoaXMscyk7aWYoYXx8KGE9bz0kaSgpKSx0KGEsK3IuYXBwbHkodGhpcywoc1swXT1jLHMpKSwraS5hcHBseSh0aGlzLHMpLCtyLmFwcGx5KHRoaXMsKHNbMF09dSxzKSksK2kuYXBwbHkodGhpcyxzKSksbylyZXR1cm4gYT1udWxsLG8rIiJ8fG51bGx9cmV0dXJuIG8uc291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbyk6ZX0sby50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxvKTpufSxvLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpieCgrdCksbyk6cn0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLG8pOml9LG8uY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT10P251bGw6dCxvKTphfSxvfWZ1bmN0aW9uIG9fKHQsZSxuLHIsaSl7dC5tb3ZlVG8oZSxuKSx0LmJlemllckN1cnZlVG8oZT0oZStyKS8yLG4sZSxpLHIsaSl9ZnVuY3Rpb24gc18odCxlLG4scixpKXt0Lm1vdmVUbyhlLG4pLHQuYmV6aWVyQ3VydmVUbyhlLG49KG4raSkvMixyLG4scixpKX1mdW5jdGlvbiBjXyh0LGUsbixyLGkpe3ZhciBhPWVfKGUsbiksbz1lXyhlLG49KG4raSkvMikscz1lXyhyLG4pLGM9ZV8ocixpKTt0Lm1vdmVUbyhhWzBdLGFbMV0pLHQuYmV6aWVyQ3VydmVUbyhvWzBdLG9bMV0sc1swXSxzWzFdLGNbMF0sY1sxXSl9ZnVuY3Rpb24gdV8oKXtyZXR1cm4gYV8ob18pfWZ1bmN0aW9uIGxfKCl7cmV0dXJuIGFfKHNfKX1mdW5jdGlvbiBoXygpe3ZhciB0PWFfKGNfKTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0fXZhciBmXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL1N4KTt0Lm1vdmVUbyhuLDApLHQuYXJjKDAsMCxuLDAsTXgpfX0sZF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoZS81KS8yO3QubW92ZVRvKC0zKm4sLW4pLHQubGluZVRvKC1uLC1uKSx0LmxpbmVUbygtbiwtMypuKSx0LmxpbmVUbyhuLC0zKm4pLHQubGluZVRvKG4sLW4pLHQubGluZVRvKDMqbiwtbiksdC5saW5lVG8oMypuLG4pLHQubGluZVRvKG4sbiksdC5saW5lVG8obiwzKm4pLHQubGluZVRvKC1uLDMqbiksdC5saW5lVG8oLW4sbiksdC5saW5lVG8oLTMqbixuKSx0LmNsb3NlUGF0aCgpfX0scF89TWF0aC5zcXJ0KDEvMykseV89MipwXyxnXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL3lfKSxyPW4qcF87dC5tb3ZlVG8oMCwtbiksdC5saW5lVG8ociwwKSx0LmxpbmVUbygwLG4pLHQubGluZVRvKC1yLDApLHQuY2xvc2VQYXRoKCl9fSxtXz1NYXRoLnNpbihTeC8xMCkvTWF0aC5zaW4oNypTeC8xMCksdl89TWF0aC5zaW4oTXgvMTApKm1fLGJfPS1NYXRoLmNvcyhNeC8xMCkqbV8seF89e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj1NYXRoLnNxcnQoLjg5MDgxMzA5MTUyOTI4NTIqZSkscj12XypuLGk9Yl8qbjt0Lm1vdmVUbygwLC1uKSx0LmxpbmVUbyhyLGkpO2Zvcih2YXIgYT0xO2E8NTsrK2Epe3ZhciBvPU14KmEvNSxzPU1hdGguY29zKG8pLGM9TWF0aC5zaW4obyk7dC5saW5lVG8oYypuLC1zKm4pLHQubGluZVRvKHMqci1jKmksYypyK3MqaSl9dC5jbG9zZVBhdGgoKX19LF9fPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIG49TWF0aC5zcXJ0KGUpLHI9LW4vMjt0LnJlY3QocixyLG4sbil9fSxrXz1NYXRoLnNxcnQoMyksd189e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgbj0tTWF0aC5zcXJ0KGUvKDMqa18pKTt0Lm1vdmVUbygwLDIqbiksdC5saW5lVG8oLWtfKm4sLW4pLHQubGluZVRvKGtfKm4sLW4pLHQuY2xvc2VQYXRoKCl9fSxUXz1NYXRoLnNxcnQoMykvMixFXz0xL01hdGguc3FydCgxMiksQ189MyooRV8vMisxKSxTXz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguc3FydChlL0NfKSxyPW4vMixpPW4qRV8sYT1yLG89bipFXytuLHM9LWEsYz1vO3QubW92ZVRvKHIsaSksdC5saW5lVG8oYSxvKSx0LmxpbmVUbyhzLGMpLHQubGluZVRvKC0uNSpyLVRfKmksVF8qcistLjUqaSksdC5saW5lVG8oLS41KmEtVF8qbyxUXyphKy0uNSpvKSx0LmxpbmVUbygtLjUqcy1UXypjLFRfKnMrLS41KmMpLHQubGluZVRvKC0uNSpyK1RfKmksLS41KmktVF8qciksdC5saW5lVG8oLS41KmErVF8qbywtLjUqby1UXyphKSx0LmxpbmVUbygtLjUqcytUXypjLC0uNSpjLVRfKnMpLHQuY2xvc2VQYXRoKCl9fSxBXz1bZl8sZF8sZ18sX18seF8sd18sU19dLE1fPWZ1bmN0aW9uKCl7dmFyIHQ9YngoZl8pLGU9YngoNjQpLG49bnVsbDtmdW5jdGlvbiByKCl7dmFyIHI7aWYobnx8KG49cj0kaSgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KG4sK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBuPW51bGwscisiInx8bnVsbH1yZXR1cm4gci50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YngoZSkscik6dH0sci5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLHIpOmV9LHIuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6dCxyKTpufSxyfSxPXz1mdW5jdGlvbigpe307ZnVuY3Rpb24gTl8odCxlLG4pe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK24pLzYpfWZ1bmN0aW9uIEJfKHQpe3RoaXMuX2NvbnRleHQ9dH1CXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOk5fKHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0Ok5fKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgRF89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBCXyh0KX07ZnVuY3Rpb24gTF8odCl7dGhpcy5fY29udGV4dD10fUxfLnByb3RvdHlwZT17YXJlYVN0YXJ0Ok9fLGFyZWFFbmQ6T18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KX19LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDI9dCx0aGlzLl95Mj1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gzPXQsdGhpcy5feTM9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94ND10LHRoaXMuX3k0PWUsdGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNiwodGhpcy5feTArNCp0aGlzLl95MStlKS82KTticmVhaztkZWZhdWx0Ok5fKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fTt2YXIgSV89ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBMXyh0KX07ZnVuY3Rpb24gUl8odCl7dGhpcy5fY29udGV4dD10fVJfLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYzPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO3ZhciBuPSh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYscj0odGhpcy5feTArNCp0aGlzLl95MStlKS82O3RoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obixyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6Tl8odGhpcyx0LGUpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZX19O3ZhciBGXz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFJfKHQpfTtmdW5jdGlvbiBQXyh0LGUpe3RoaXMuX2Jhc2lzPW5ldyBCXyh0KSx0aGlzLl9iZXRhPWV9UF8ucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxuPXQubGVuZ3RoLTE7aWYobj4wKWZvcih2YXIgcixpPXRbMF0sYT1lWzBdLG89dFtuXS1pLHM9ZVtuXS1hLGM9LTE7KytjPD1uOylyPWMvbix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbY10rKDEtdGhpcy5fYmV0YSkqKGkrcipvKSx0aGlzLl9iZXRhKmVbY10rKDEtdGhpcy5fYmV0YSkqKGErcipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBqXz1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIDE9PT1lP25ldyBCXyh0KTpuZXcgUF8odCxlKX1yZXR1cm4gbi5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjg1KTtmdW5jdGlvbiBZXyh0LGUsbil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtbiksdC5feDIsdC5feTIpfWZ1bmN0aW9uIHpfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn16Xy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6WV8odGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OllfKHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgVV89ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBuZXcgel8odCxlKX1yZXR1cm4gbi50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oMCk7ZnVuY3Rpb24gJF8odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fSRfLnByb3RvdHlwZT17YXJlYVN0YXJ0Ok9fLGFyZWFFbmQ6T18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHFfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3ICRfKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApO2Z1bmN0aW9uIFdfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1XXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpZXyh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEhfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gbmV3IFdfKHQsZSl9cmV0dXJuIG4udGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KDApO2Z1bmN0aW9uIFZfKHQsZSxuKXt2YXIgcj10Ll94MSxpPXQuX3kxLGE9dC5feDIsbz10Ll95MjtpZih0Ll9sMDFfYT4xZS0xMil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsYz0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7cj0ocipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2MsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2N9aWYodC5fbDIzX2E+MWUtMTIpe3ZhciB1PTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLGw9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqdSt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL2wsbz0obyp1K3QuX3kxKnQuX2wyM18yYS1uKnQuX2wxMl8yYSkvbH10Ll9jb250ZXh0LmJlemllckN1cnZlVG8ocixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gR18odCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1HXy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIG49dGhpcy5feDItdCxyPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhuKm4rcipyLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlZfKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIFhfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgR18odCxlKTpuZXcgel8odCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiBaXyh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfVpfLnByb3RvdHlwZT17YXJlYVN0YXJ0Ok9fLGFyZWFFbmQ6T18sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciBuPXRoaXMuX3gyLXQscj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cobipuK3Iqcix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6Vl8odGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgS189ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiBuKHQpe3JldHVybiBlP25ldyBaXyh0LGUpOm5ldyAkXyh0LDApfXJldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0sbn0oLjUpO2Z1bmN0aW9uIFFfKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9UV8ucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgbj10aGlzLl94Mi10LHI9dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KG4qbityKnIsdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlZfKHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEpfPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gZT9uZXcgUV8odCxlKTpuZXcgV18odCwwKX1yZXR1cm4gbi5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LG59KC41KTtmdW5jdGlvbiB0ayh0KXt0aGlzLl9jb250ZXh0PXR9dGsucHJvdG90eXBlPXthcmVhU3RhcnQ6T18sYXJlYUVuZDpPXyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dD0rdCxlPStlLHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSl9fTt2YXIgZWs9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB0ayh0KX07ZnVuY3Rpb24gbmsodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIHJrKHQsZSxuKXt2YXIgcj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhyfHxpPDAmJi0wKSxvPShuLXQuX3kxKS8oaXx8cjwwJiYtMCkscz0oYSppK28qcikvKHIraSk7cmV0dXJuKG5rKGEpK25rKG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gaWsodCxlKXt2YXIgbj10Ll94MS10Ll94MDtyZXR1cm4gbj8oMyoodC5feTEtdC5feTApL24tZSkvMjplfWZ1bmN0aW9uIGFrKHQsZSxuKXt2YXIgcj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLXIpLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHIrcyxpK3MqZSxhLXMsby1zKm4sYSxvKX1mdW5jdGlvbiBvayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gc2sodCl7dGhpcy5fY29udGV4dD1uZXcgY2sodCl9ZnVuY3Rpb24gY2sodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHVrKHQpe3JldHVybiBuZXcgb2sodCl9ZnVuY3Rpb24gbGsodCl7cmV0dXJuIG5ldyBzayh0KX1mdW5jdGlvbiBoayh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gZmsodCl7dmFyIGUsbixyPXQubGVuZ3RoLTEsaT1uZXcgQXJyYXkociksYT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkocik7Zm9yKGlbMF09MCxhWzBdPTIsb1swXT10WzBdKzIqdFsxXSxlPTE7ZTxyLTE7KytlKWlbZV09MSxhW2VdPTQsb1tlXT00KnRbZV0rMip0W2UrMV07Zm9yKGlbci0xXT0yLGFbci0xXT03LG9bci0xXT04KnRbci0xXSt0W3JdLGU9MTtlPHI7KytlKW49aVtlXS9hW2UtMV0sYVtlXS09bixvW2VdLT1uKm9bZS0xXTtmb3IoaVtyLTFdPW9bci0xXS9hW3ItMV0sZT1yLTI7ZT49MDstLWUpaVtlXT0ob1tlXS1pW2UrMV0pL2FbZV07Zm9yKGFbci0xXT0odFtyXStpW3ItMV0pLzIsZT0wO2U8ci0xOysrZSlhW2VdPTIqdFtlKzFdLWlbZSsxXTtyZXR1cm5baSxhXX1vay5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6YWsodGhpcyx0aGlzLl90MCxpayh0aGlzLHRoaXMuX3QwKSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3ZhciBuPU5hTjtpZihlPStlLCh0PSt0KSE9PXRoaXMuX3gxfHxlIT09dGhpcy5feTEpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpOnRoaXMuX2NvbnRleHQubW92ZVRvKHQsZSk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsYWsodGhpcyxpayh0aGlzLG49cmsodGhpcyx0LGUpKSxuKTticmVhaztkZWZhdWx0OmFrKHRoaXMsdGhpcy5fdDAsbj1yayh0aGlzLHQsZSkpfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXQsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9ZSx0aGlzLl90MD1ufX19LChzay5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvay5wcm90b3R5cGUpKS5wb2ludD1mdW5jdGlvbih0LGUpe29rLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsZSx0KX0sY2sucHJvdG90eXBlPXttb3ZlVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oZSx0LHIsbixhLGkpfX0saGsucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5feCxlPXRoaXMuX3ksbj10Lmxlbmd0aDtpZihuKWlmKHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odFswXSxlWzBdKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0WzBdLGVbMF0pLDI9PT1uKXRoaXMuX2NvbnRleHQubGluZVRvKHRbMV0sZVsxXSk7ZWxzZSBmb3IodmFyIHI9ZmsodCksaT1mayhlKSxhPTAsbz0xO288bjsrK2EsKytvKXRoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhyWzBdW2FdLGlbMF1bYV0sclsxXVthXSxpWzFdW2FdLHRbb10sZVtvXSk7KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09bikmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUsdGhpcy5feD10aGlzLl95PW51bGx9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5feC5wdXNoKCt0KSx0aGlzLl95LnB1c2goK2UpfX07dmFyIGRrPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaGsodCl9O2Z1bmN0aW9uIHBrKHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1way5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgbj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKG4sZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fTt2YXIgeWs9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBwayh0LC41KX07ZnVuY3Rpb24gZ2sodCl7cmV0dXJuIG5ldyBwayh0LDApfWZ1bmN0aW9uIG1rKHQpe3JldHVybiBuZXcgcGsodCwxKX12YXIgdms9ZnVuY3Rpb24odCxlKXtpZigoaT10Lmxlbmd0aCk+MSlmb3IodmFyIG4scixpLGE9MSxvPXRbZVswXV0scz1vLmxlbmd0aDthPGk7KythKWZvcihyPW8sbz10W2VbYV1dLG49MDtuPHM7KytuKW9bbl1bMV0rPW9bbl1bMF09aXNOYU4ocltuXVsxXSk/cltuXVswXTpyW25dWzFdfSxiaz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgsbj1uZXcgQXJyYXkoZSk7LS1lPj0wOyluW2VdPWU7cmV0dXJuIG59O2Z1bmN0aW9uIHhrKHQsZSl7cmV0dXJuIHRbZV19dmFyIF9rPWZ1bmN0aW9uKCl7dmFyIHQ9YngoW10pLGU9Ymssbj12ayxyPXhrO2Z1bmN0aW9uIGkoaSl7dmFyIGEsbyxzPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGM9aS5sZW5ndGgsdT1zLmxlbmd0aCxsPW5ldyBBcnJheSh1KTtmb3IoYT0wO2E8dTsrK2Epe2Zvcih2YXIgaCxmPXNbYV0sZD1sW2FdPW5ldyBBcnJheShjKSxwPTA7cDxjOysrcClkW3BdPWg9WzAsK3IoaVtwXSxmLHAsaSldLGguZGF0YT1pW3BdO2Qua2V5PWZ9Zm9yKGE9MCxvPWUobCk7YTx1OysrYSlsW29bYV1dLmluZGV4PWE7cmV0dXJuIG4obCxvKSxsfXJldHVybiBpLmtleXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpieChuXy5jYWxsKGUpKSxpKTp0fSxpLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YngoK3QpLGkpOnJ9LGkub3JkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09dD9iazoiZnVuY3Rpb24iPT10eXBlb2YgdD90OmJ4KG5fLmNhbGwodCkpLGkpOmV9LGkub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/dms6dCxpKTpufSxpfSxraz1mdW5jdGlvbih0LGUpe2lmKChyPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPW49MDtuPHI7KytuKWkrPXRbbl1bYV1bMV18fDA7aWYoaSlmb3Iobj0wO248cjsrK24pdFtuXVthXVsxXS89aX12ayh0LGUpfX0sd2s9ZnVuY3Rpb24odCxlKXtpZigocz10Lmxlbmd0aCk+MClmb3IodmFyIG4scixpLGEsbyxzLGM9MCx1PXRbZVswXV0ubGVuZ3RoO2M8dTsrK2MpZm9yKGE9bz0wLG49MDtuPHM7KytuKShpPShyPXRbZVtuXV1bY10pWzFdLXJbMF0pPjA/KHJbMF09YSxyWzFdPWErPWkpOmk8MD8oclsxXT1vLHJbMF09bys9aSk6KHJbMF09MCxyWzFdPWkpfSxUaz1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIG4scj0wLGk9dFtlWzBdXSxhPWkubGVuZ3RoO3I8YTsrK3Ipe2Zvcih2YXIgbz0wLHM9MDtvPG47KytvKXMrPXRbb11bcl1bMV18fDA7aVtyXVsxXSs9aVtyXVswXT0tcy8yfXZrKHQsZSl9fSxFaz1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4wJiYocj0obj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgbixyLGksYT0wLG89MTtvPHI7KytvKXtmb3IodmFyIHM9MCxjPTAsdT0wO3M8aTsrK3Mpe2Zvcih2YXIgbD10W2Vbc11dLGg9bFtvXVsxXXx8MCxmPShoLShsW28tMV1bMV18fDApKS8yLGQ9MDtkPHM7KytkKXt2YXIgcD10W2VbZF1dO2YrPShwW29dWzFdfHwwKS0ocFtvLTFdWzFdfHwwKX1jKz1oLHUrPWYqaH1uW28tMV1bMV0rPW5bby0xXVswXT1hLGMmJihhLT11L2MpfW5bby0xXVsxXSs9bltvLTFdWzBdPWEsdmsodCxlKX19LENrPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKFNrKTtyZXR1cm4gYmsodCkuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVt0XS1lW25dfSkpfTtmdW5jdGlvbiBTayh0KXtmb3IodmFyIGUsbj0tMSxyPTAsaT10Lmxlbmd0aCxhPS0xLzA7KytuPGk7KShlPSt0W25dWzFdKT5hJiYoYT1lLHI9bik7cmV0dXJuIHJ9dmFyIEFrPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWFwKE1rKTtyZXR1cm4gYmsodCkuc29ydCgoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVt0XS1lW25dfSkpfTtmdW5jdGlvbiBNayh0KXtmb3IodmFyIGUsbj0wLHI9LTEsaT10Lmxlbmd0aDsrK3I8aTspKGU9K3Rbcl1bMV0pJiYobis9ZSk7cmV0dXJuIG59dmFyIE9rPWZ1bmN0aW9uKHQpe3JldHVybiBBayh0KS5yZXZlcnNlKCl9LE5rPWZ1bmN0aW9uKHQpe3ZhciBlLG4scj10Lmxlbmd0aCxpPXQubWFwKE1rKSxhPUNrKHQpLG89MCxzPTAsYz1bXSx1PVtdO2ZvcihlPTA7ZTxyOysrZSluPWFbZV0sbzxzPyhvKz1pW25dLGMucHVzaChuKSk6KHMrPWlbbl0sdS5wdXNoKG4pKTtyZXR1cm4gdS5yZXZlcnNlKCkuY29uY2F0KGMpfSxCaz1mdW5jdGlvbih0KXtyZXR1cm4gYmsodCkucmV2ZXJzZSgpfTt2YXIgRGs9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06V2coIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBMaz0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9OkhnKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKSxJaz1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IHFuLGk9ZTtyZXR1cm4gbnVsbD09ZT8oci5yZXN0YXJ0KHQsZSxuKSxyKTooZT0rZSxuPW51bGw9PW4/VW4oKTorbixyLnJlc3RhcnQoKGZ1bmN0aW9uIGEobyl7bys9aSxyLnJlc3RhcnQoYSxpKz1lLG4pLHQobyl9KSxlLG4pLHIpfSxSaz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19O2Z1bmN0aW9uIEZrKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIFBrKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIGprKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gWWsodCl7dC5VPXQuQz10Lkw9dC5SPXQuUD10Lk49bnVsbH1mdW5jdGlvbiB6ayh0LGUpe3ZhciBuPWUscj1lLlIsaT1uLlU7aT9pLkw9PT1uP2kuTD1yOmkuUj1yOnQuXz1yLHIuVT1pLG4uVT1yLG4uUj1yLkwsbi5SJiYobi5SLlU9biksci5MPW59ZnVuY3Rpb24gVWsodCxlKXt2YXIgbj1lLHI9ZS5MLGk9bi5VO2k/aS5MPT09bj9pLkw9cjppLlI9cjp0Ll89cixyLlU9aSxuLlU9cixuLkw9ci5SLG4uTCYmKG4uTC5VPW4pLHIuUj1ufWZ1bmN0aW9uICRrKHQpe2Zvcig7dC5MOyl0PXQuTDtyZXR1cm4gdH1qay5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmprLGluc2VydDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtuPXR9ZWxzZSB0aGlzLl8/KHQ9JGsodGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUsbj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLG49bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9bixlLkM9ITAsdD1lO24mJm4uQzspbj09PShyPW4uVSkuTD8oaT1yLlIpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLlImJih6ayh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCxVayh0aGlzLHIpKTooaT1yLkwpJiZpLkM/KG4uQz1pLkM9ITEsci5DPSEwLHQ9cik6KHQ9PT1uLkwmJihVayh0aGlzLG4pLG49KHQ9bikuVSksbi5DPSExLHIuQz0hMCx6ayh0aGlzLHIpKSxuPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUsbixyLGk9dC5VLGE9dC5MLG89dC5SO2lmKG49YT9vPyRrKG8pOmE6byxpP2kuTD09PXQ/aS5MPW46aS5SPW46dGhpcy5fPW4sYSYmbz8ocj1uLkMsbi5DPXQuQyxuLkw9YSxhLlU9bixuIT09bz8oaT1uLlUsbi5VPXQuVSx0PW4uUixpLkw9dCxuLlI9byxvLlU9bik6KG4uVT1pLGk9bix0PW4uUikpOihyPXQuQyx0PW4pLHQmJih0LlU9aSksIXIpaWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKGU9aS5SKS5DJiYoZS5DPSExLGkuQz0hMCx6ayh0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLFVrKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLHprKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9aS5MKS5DJiYoZS5DPSExLGkuQz0hMCxVayh0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLHprKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLFVrKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fTt2YXIgcWs9ams7ZnVuY3Rpb24gV2sodCxlLG4scil7dmFyIGk9W251bGwsbnVsbF0sYT15dy5wdXNoKGkpLTE7cmV0dXJuIGkubGVmdD10LGkucmlnaHQ9ZSxuJiZWayhpLHQsZSxuKSxyJiZWayhpLGUsdCxyKSxkd1t0LmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxkd1tlLmluZGV4XS5oYWxmZWRnZXMucHVzaChhKSxpfWZ1bmN0aW9uIEhrKHQsZSxuKXt2YXIgcj1bZSxuXTtyZXR1cm4gci5sZWZ0PXQscn1mdW5jdGlvbiBWayh0LGUsbixyKXt0WzBdfHx0WzFdP3QubGVmdD09PW4/dFsxXT1yOnRbMF09cjoodFswXT1yLHQubGVmdD1lLHQucmlnaHQ9bil9ZnVuY3Rpb24gR2sodCxlLG4scixpKXt2YXIgYSxvPXRbMF0scz10WzFdLGM9b1swXSx1PW9bMV0sbD0wLGg9MSxmPXNbMF0tYyxkPXNbMV0tdTtpZihhPWUtYyxmfHwhKGE+MCkpe2lmKGEvPWYsZjwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihmPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPXItYyxmfHwhKGE8MCkpe2lmKGEvPWYsZjwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihmPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1pZihhPW4tdSxkfHwhKGE+MCkpe2lmKGEvPWQsZDwwKXtpZihhPGwpcmV0dXJuO2E8aCYmKGg9YSl9ZWxzZSBpZihkPjApe2lmKGE+aClyZXR1cm47YT5sJiYobD1hKX1pZihhPWktdSxkfHwhKGE8MCkpe2lmKGEvPWQsZDwwKXtpZihhPmgpcmV0dXJuO2E+bCYmKGw9YSl9ZWxzZSBpZihkPjApe2lmKGE8bClyZXR1cm47YTxoJiYoaD1hKX1yZXR1cm4hKGw+MHx8aDwxKXx8KGw+MCYmKHRbMF09W2MrbCpmLHUrbCpkXSksaDwxJiYodFsxXT1bYytoKmYsdStoKmRdKSwhMCl9fX19fWZ1bmN0aW9uIFhrKHQsZSxuLHIsaSl7dmFyIGE9dFsxXTtpZihhKXJldHVybiEwO3ZhciBvLHMsYz10WzBdLHU9dC5sZWZ0LGw9dC5yaWdodCxoPXVbMF0sZj11WzFdLGQ9bFswXSxwPWxbMV0seT0oaCtkKS8yLGc9KGYrcCkvMjtpZihwPT09Zil7aWYoeTxlfHx5Pj1yKXJldHVybjtpZihoPmQpe2lmKGMpe2lmKGNbMV0+PWkpcmV0dXJufWVsc2UgYz1beSxuXTthPVt5LGldfWVsc2V7aWYoYyl7aWYoY1sxXTxuKXJldHVybn1lbHNlIGM9W3ksaV07YT1beSxuXX19ZWxzZSBpZihzPWctKG89KGgtZCkvKHAtZikpKnksbzwtMXx8bz4xKWlmKGg+ZCl7aWYoYyl7aWYoY1sxXT49aSlyZXR1cm59ZWxzZSBjPVsobi1zKS9vLG5dO2E9WyhpLXMpL28saV19ZWxzZXtpZihjKXtpZihjWzFdPG4pcmV0dXJufWVsc2UgYz1bKGktcykvbyxpXTthPVsobi1zKS9vLG5dfWVsc2UgaWYoZjxwKXtpZihjKXtpZihjWzBdPj1yKXJldHVybn1lbHNlIGM9W2UsbyplK3NdO2E9W3IsbypyK3NdfWVsc2V7aWYoYyl7aWYoY1swXTxlKXJldHVybn1lbHNlIGM9W3IsbypyK3NdO2E9W2UsbyplK3NdfXJldHVybiB0WzBdPWMsdFsxXT1hLCEwfWZ1bmN0aW9uIFprKHQsZSl7dmFyIG49dC5zaXRlLHI9ZS5sZWZ0LGk9ZS5yaWdodDtyZXR1cm4gbj09PWkmJihpPXIscj1uKSxpP01hdGguYXRhbjIoaVsxXS1yWzFdLGlbMF0tclswXSk6KG49PT1yPyhyPWVbMV0saT1lWzBdKToocj1lWzBdLGk9ZVsxXSksTWF0aC5hdGFuMihyWzBdLWlbMF0saVsxXS1yWzFdKSl9ZnVuY3Rpb24gS2sodCxlKXtyZXR1cm4gZVsrKGUubGVmdCE9PXQuc2l0ZSldfWZ1bmN0aW9uIFFrKHQsZSl7cmV0dXJuIGVbKyhlLmxlZnQ9PT10LnNpdGUpXX12YXIgSmssdHc9W107ZnVuY3Rpb24gZXcoKXtZayh0aGlzKSx0aGlzLng9dGhpcy55PXRoaXMuYXJjPXRoaXMuc2l0ZT10aGlzLmN5PW51bGx9ZnVuY3Rpb24gbncodCl7dmFyIGU9dC5QLG49dC5OO2lmKGUmJm4pe3ZhciByPWUuc2l0ZSxpPXQuc2l0ZSxhPW4uc2l0ZTtpZihyIT09YSl7dmFyIG89aVswXSxzPWlbMV0sYz1yWzBdLW8sdT1yWzFdLXMsbD1hWzBdLW8saD1hWzFdLXMsZj0yKihjKmgtdSpsKTtpZighKGY+PS1tdykpe3ZhciBkPWMqYyt1KnUscD1sKmwraCpoLHk9KGgqZC11KnApL2YsZz0oYypwLWwqZCkvZixtPXR3LnBvcCgpfHxuZXcgZXc7bS5hcmM9dCxtLnNpdGU9aSxtLng9eStvLG0ueT0obS5jeT1nK3MpK01hdGguc3FydCh5KnkrZypnKSx0LmNpcmNsZT1tO2Zvcih2YXIgdj1udWxsLGI9cHcuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KXtpZighYi5MKXt2PWIuUDticmVha31iPWIuTH1lbHNle2lmKCFiLlIpe3Y9YjticmVha31iPWIuUn1wdy5pbnNlcnQodixtKSx2fHwoSms9bSl9fX19ZnVuY3Rpb24gcncodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KEprPWUuTikscHcucmVtb3ZlKGUpLHR3LnB1c2goZSksWWsoZSksdC5jaXJjbGU9bnVsbCl9dmFyIGl3PVtdO2Z1bmN0aW9uIGF3KCl7WWsodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIG93KHQpe3ZhciBlPWl3LnBvcCgpfHxuZXcgYXc7cmV0dXJuIGUuc2l0ZT10LGV9ZnVuY3Rpb24gc3codCl7cncodCksZncucmVtb3ZlKHQpLGl3LnB1c2godCksWWsodCl9ZnVuY3Rpb24gY3codCl7dmFyIGU9dC5jaXJjbGUsbj1lLngscj1lLmN5LGk9W24scl0sYT10LlAsbz10Lk4scz1bdF07c3codCk7Zm9yKHZhciBjPWE7Yy5jaXJjbGUmJk1hdGguYWJzKG4tYy5jaXJjbGUueCk8Z3cmJk1hdGguYWJzKHItYy5jaXJjbGUuY3kpPGd3OylhPWMuUCxzLnVuc2hpZnQoYyksc3coYyksYz1hO3MudW5zaGlmdChjKSxydyhjKTtmb3IodmFyIHU9bzt1LmNpcmNsZSYmTWF0aC5hYnMobi11LmNpcmNsZS54KTxndyYmTWF0aC5hYnMoci11LmNpcmNsZS5jeSk8Z3c7KW89dS5OLHMucHVzaCh1KSxzdyh1KSx1PW87cy5wdXNoKHUpLHJ3KHUpO3ZhciBsLGg9cy5sZW5ndGg7Zm9yKGw9MTtsPGg7KytsKXU9c1tsXSxjPXNbbC0xXSxWayh1LmVkZ2UsYy5zaXRlLHUuc2l0ZSxpKTtjPXNbMF0sKHU9c1toLTFdKS5lZGdlPVdrKGMuc2l0ZSx1LnNpdGUsbnVsbCxpKSxudyhjKSxudyh1KX1mdW5jdGlvbiB1dyh0KXtmb3IodmFyIGUsbixyLGksYT10WzBdLG89dFsxXSxzPWZ3Ll87czspaWYoKHI9bHcocyxvKS1hKT5ndylzPXMuTDtlbHNle2lmKCEoKGk9YS1odyhzLG8pKT5ndykpe3I+LWd3PyhlPXMuUCxuPXMpOmk+LWd3PyhlPXMsbj1zLk4pOmU9bj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn0hZnVuY3Rpb24odCl7ZHdbdC5pbmRleF09e3NpdGU6dCxoYWxmZWRnZXM6W119fSh0KTt2YXIgYz1vdyh0KTtpZihmdy5pbnNlcnQoZSxjKSxlfHxuKXtpZihlPT09bilyZXR1cm4gcncoZSksbj1vdyhlLnNpdGUpLGZ3Lmluc2VydChjLG4pLGMuZWRnZT1uLmVkZ2U9V2soZS5zaXRlLGMuc2l0ZSksbncoZSksdm9pZCBudyhuKTtpZihuKXtydyhlKSxydyhuKTt2YXIgdT1lLnNpdGUsbD11WzBdLGg9dVsxXSxmPXRbMF0tbCxkPXRbMV0taCxwPW4uc2l0ZSx5PXBbMF0tbCxnPXBbMV0taCxtPTIqKGYqZy1kKnkpLHY9ZipmK2QqZCxiPXkqeStnKmcseD1bKGcqdi1kKmIpL20rbCwoZipiLXkqdikvbStoXTtWayhuLmVkZ2UsdSxwLHgpLGMuZWRnZT1Xayh1LHQsbnVsbCx4KSxuLmVkZ2U9V2sodCxwLG51bGwseCksbncoZSksbncobil9ZWxzZSBjLmVkZ2U9V2soZS5zaXRlLGMuc2l0ZSl9fWZ1bmN0aW9uIGx3KHQsZSl7dmFyIG49dC5zaXRlLHI9blswXSxpPW5bMV0sYT1pLWU7aWYoIWEpcmV0dXJuIHI7dmFyIG89dC5QO2lmKCFvKXJldHVybi0xLzA7dmFyIHM9KG49by5zaXRlKVswXSxjPW5bMV0sdT1jLWU7aWYoIXUpcmV0dXJuIHM7dmFyIGw9cy1yLGg9MS9hLTEvdSxmPWwvdTtyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKGwqbC8oLTIqdSktYyt1LzIraS1hLzIpKSkvaCtyOihyK3MpLzJ9ZnVuY3Rpb24gaHcodCxlKXt2YXIgbj10Lk47aWYobilyZXR1cm4gbHcobixlKTt2YXIgcj10LnNpdGU7cmV0dXJuIHJbMV09PT1lP3JbMF06MS8wfXZhciBmdyxkdyxwdyx5dyxndz0xZS02LG13PTFlLTEyO2Z1bmN0aW9uIHZ3KHQsZSl7cmV0dXJuIGVbMV0tdFsxXXx8ZVswXS10WzBdfWZ1bmN0aW9uIGJ3KHQsZSl7dmFyIG4scixpLGE9dC5zb3J0KHZ3KS5wb3AoKTtmb3IoeXc9W10sZHc9bmV3IEFycmF5KHQubGVuZ3RoKSxmdz1uZXcgcWsscHc9bmV3IHFrOzspaWYoaT1KayxhJiYoIWl8fGFbMV08aS55fHxhWzFdPT09aS55JiZhWzBdPGkueCkpYVswXT09PW4mJmFbMV09PT1yfHwodXcoYSksbj1hWzBdLHI9YVsxXSksYT10LnBvcCgpO2Vsc2V7aWYoIWkpYnJlYWs7Y3coaS5hcmMpfWlmKGZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUsbixyLGk9MCxhPWR3Lmxlbmd0aDtpPGE7KytpKWlmKCh0PWR3W2ldKSYmKHI9KGU9dC5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShyKSxzPW5ldyBBcnJheShyKTtmb3Iobj0wO248cjsrK24pb1tuXT1uLHNbbl09WmsodCx5d1tlW25dXSk7Zm9yKG8uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gc1tlXS1zW3RdfSkpLG49MDtuPHI7KytuKXNbbl09ZVtvW25dXTtmb3Iobj0wO248cjsrK24pZVtuXT1zW25dfX0oKSxlKXt2YXIgbz0rZVswXVswXSxzPStlWzBdWzFdLGM9K2VbMV1bMF0sdT0rZVsxXVsxXTshZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpLGE9eXcubGVuZ3RoO2EtLTspWGsoaT15d1thXSx0LGUsbixyKSYmR2soaSx0LGUsbixyKSYmKE1hdGguYWJzKGlbMF1bMF0taVsxXVswXSk+Z3d8fE1hdGguYWJzKGlbMF1bMV0taVsxXVsxXSk+Z3cpfHxkZWxldGUgeXdbYV19KG8scyxjLHUpLGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpLGEsbyxzLGMsdSxsLGgsZixkLHAseSxnPWR3Lmxlbmd0aCxtPSEwO2ZvcihpPTA7aTxnOysraSlpZihhPWR3W2ldKXtmb3Iobz1hLnNpdGUscz0oYz1hLmhhbGZlZGdlcykubGVuZ3RoO3MtLTspeXdbY1tzXV18fGMuc3BsaWNlKHMsMSk7Zm9yKHM9MCx1PWMubGVuZ3RoO3M8dTspcD0oZD1RayhhLHl3W2Nbc11dKSlbMF0seT1kWzFdLGg9KGw9S2soYSx5d1tjWysrcyV1XV0pKVswXSxmPWxbMV0sKE1hdGguYWJzKHAtaCk+Z3d8fE1hdGguYWJzKHktZik+Z3cpJiYoYy5zcGxpY2UocywwLHl3LnB1c2goSGsobyxkLE1hdGguYWJzKHAtdCk8Z3cmJnIteT5ndz9bdCxNYXRoLmFicyhoLXQpPGd3P2Y6cl06TWF0aC5hYnMoeS1yKTxndyYmbi1wPmd3P1tNYXRoLmFicyhmLXIpPGd3P2g6bixyXTpNYXRoLmFicyhwLW4pPGd3JiZ5LWU+Z3c/W24sTWF0aC5hYnMoaC1uKTxndz9mOmVdOk1hdGguYWJzKHktZSk8Z3cmJnAtdD5ndz9bTWF0aC5hYnMoZi1lKTxndz9oOnQsZV06bnVsbCkpLTEpLCsrdSk7dSYmKG09ITEpfWlmKG0pe3ZhciB2LGIseCxfPTEvMDtmb3IoaT0wLG09bnVsbDtpPGc7KytpKShhPWR3W2ldKSYmKHg9KHY9KG89YS5zaXRlKVswXS10KSp2KyhiPW9bMV0tZSkqYik8XyYmKF89eCxtPWEpO2lmKG0pe3ZhciBrPVt0LGVdLHc9W3Qscl0sVD1bbixyXSxFPVtuLGVdO20uaGFsZmVkZ2VzLnB1c2goeXcucHVzaChIayhvPW0uc2l0ZSxrLHcpKS0xLHl3LnB1c2goSGsobyx3LFQpKS0xLHl3LnB1c2goSGsobyxULEUpKS0xLHl3LnB1c2goSGsobyxFLGspKS0xKX19Zm9yKGk9MDtpPGc7KytpKShhPWR3W2ldKSYmKGEuaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIGR3W2ldKX0obyxzLGMsdSl9dGhpcy5lZGdlcz15dyx0aGlzLmNlbGxzPWR3LGZ3PXB3PXl3PWR3PW51bGx9YncucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjpidyxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKChmdW5jdGlvbihlKXt2YXIgbj1lLmhhbGZlZGdlcy5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBLayhlLHRbbl0pfSkpO3JldHVybiBuLmRhdGE9ZS5zaXRlLmRhdGEsbn0pKX0sdHJpYW5nbGVzOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLmZvckVhY2goKGZ1bmN0aW9uKG4scil7aWYoYT0oaT1uLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgaSxhLG8scyxjLHUsbD1uLnNpdGUsaD0tMSxmPWVbaVthLTFdXSxkPWYubGVmdD09PWw/Zi5yaWdodDpmLmxlZnQ7KytoPGE7KW89ZCxkPShmPWVbaVtoXV0pLmxlZnQ9PT1sP2YucmlnaHQ6Zi5sZWZ0LG8mJmQmJnI8by5pbmRleCYmcjxkLmluZGV4JiYoYz1vLHU9ZCwoKHM9bClbMF0tdVswXSkqKGNbMV0tc1sxXSktKHNbMF0tY1swXSkqKHVbMV0tc1sxXSk8MCkmJnQucHVzaChbbC5kYXRhLG8uZGF0YSxkLmRhdGFdKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQucmlnaHR9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOnQubGVmdC5kYXRhLHRhcmdldDp0LnJpZ2h0LmRhdGF9fSkpfSxmaW5kOmZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHIsaSxhPXRoaXMsbz1hLl9mb3VuZHx8MCxzPWEuY2VsbHMubGVuZ3RoOyEoaT1hLmNlbGxzW29dKTspaWYoKytvPj1zKXJldHVybiBudWxsO3ZhciBjPXQtaS5zaXRlWzBdLHU9ZS1pLnNpdGVbMV0sbD1jKmMrdSp1O2Rve2k9YS5jZWxsc1tyPW9dLG89bnVsbCxpLmhhbGZlZGdlcy5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj1hLmVkZ2VzW25dLHM9ci5sZWZ0O2lmKHMhPT1pLnNpdGUmJnN8fChzPXIucmlnaHQpKXt2YXIgYz10LXNbMF0sdT1lLXNbMV0saD1jKmMrdSp1O2g8bCYmKGw9aCxvPXMuaW5kZXgpfX0pKX13aGlsZShudWxsIT09byk7cmV0dXJuIGEuX2ZvdW5kPXIsbnVsbD09bnx8bDw9bipuP2kuc2l0ZTpudWxsfX07dmFyIHh3PWZ1bmN0aW9uKCl7dmFyIHQ9RmssZT1QayxuPW51bGw7ZnVuY3Rpb24gcihyKXtyZXR1cm4gbmV3IGJ3KHIubWFwKChmdW5jdGlvbihuLGkpe3ZhciBhPVtNYXRoLnJvdW5kKHQobixpLHIpL2d3KSpndyxNYXRoLnJvdW5kKGUobixpLHIpL2d3KSpnd107cmV0dXJuIGEuaW5kZXg9aSxhLmRhdGE9bixhfSkpLG4pfXJldHVybiByLnBvbHlnb25zPWZ1bmN0aW9uKHQpe3JldHVybiByKHQpLnBvbHlnb25zKCl9LHIubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkubGlua3MoKX0sci50cmlhbmdsZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCkudHJpYW5nbGVzKCl9LHIueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOlJrKCtlKSxyKTp0fSxyLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpSaygrdCkscik6ZX0sci5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOltbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dLHIpOm4mJltbblswXVswXSxuWzBdWzFdXSxbblsxXVswXSxuWzFdWzFdXV19LHIuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10P251bGw6W1swLDBdLFsrdFswXSwrdFsxXV1dLHIpOm4mJltuWzFdWzBdLW5bMF1bMF0sblsxXVsxXS1uWzBdWzFdXX0scn0sX3c9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fTtmdW5jdGlvbiBrdyh0LGUsbil7dGhpcy50YXJnZXQ9dCx0aGlzLnR5cGU9ZSx0aGlzLnRyYW5zZm9ybT1ufWZ1bmN0aW9uIHd3KHQsZSxuKXt0aGlzLms9dCx0aGlzLng9ZSx0aGlzLnk9bn13dy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnd3LHNjYWxlOmZ1bmN0aW9uKHQpe3JldHVybiAxPT09dD90aGlzOm5ldyB3dyh0aGlzLmsqdCx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA9PT10JjA9PT1lP3RoaXM6bmV3IHd3KHRoaXMuayx0aGlzLngrdGhpcy5rKnQsdGhpcy55K3RoaXMuayplKX0sYXBwbHk6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMF0qdGhpcy5rK3RoaXMueCx0WzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKHQpe3JldHVybiB0KnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbih0KXtyZXR1cm5bKHRbMF0tdGhpcy54KS90aGlzLmssKHRbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKHQpe3JldHVybih0LXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbih0KXtyZXR1cm4gdC5jb3B5KCkuZG9tYWluKHQucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcCh0LmludmVydCx0KSl9LHJlc2NhbGVZOmZ1bmN0aW9uKHQpe3JldHVybiB0LmNvcHkoKS5kb21haW4odC5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKHQuaW52ZXJ0LHQpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIFR3PW5ldyB3dygxLDAsMCk7ZnVuY3Rpb24gRXcodCl7Zm9yKDshdC5fX3pvb207KWlmKCEodD10LnBhcmVudE5vZGUpKXJldHVybiBUdztyZXR1cm4gdC5fX3pvb219ZnVuY3Rpb24gQ3coKXt1ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1Fdy5wcm90b3R5cGU9d3cucHJvdG90eXBlO3ZhciBTdz1mdW5jdGlvbigpe3VlLnByZXZlbnREZWZhdWx0KCksdWUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9O2Z1bmN0aW9uIEF3KCl7cmV0dXJuIXVlLmN0cmxLZXkmJiF1ZS5idXR0b259ZnVuY3Rpb24gTXcoKXt2YXIgdD10aGlzO3JldHVybiB0IGluc3RhbmNlb2YgU1ZHRWxlbWVudD8odD10Lm93bmVyU1ZHRWxlbWVudHx8dCkuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1sodD10LnZpZXdCb3guYmFzZVZhbCkueCx0LnldLFt0LngrdC53aWR0aCx0LnkrdC5oZWlnaHRdXTpbWzAsMF0sW3Qud2lkdGguYmFzZVZhbC52YWx1ZSx0LmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFt0LmNsaWVudFdpZHRoLHQuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gT3coKXtyZXR1cm4gdGhpcy5fX3pvb218fFR3fWZ1bmN0aW9uIE53KCl7cmV0dXJuLXVlLmRlbHRhWSooMT09PXVlLmRlbHRhTW9kZT8uMDU6dWUuZGVsdGFNb2RlPzE6LjAwMil9ZnVuY3Rpb24gQncoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gRHcodCxlLG4pe3ZhciByPXQuaW52ZXJ0WChlWzBdWzBdKS1uWzBdWzBdLGk9dC5pbnZlcnRYKGVbMV1bMF0pLW5bMV1bMF0sYT10LmludmVydFkoZVswXVsxXSktblswXVsxXSxvPXQuaW52ZXJ0WShlWzFdWzFdKS1uWzFdWzFdO3JldHVybiB0LnRyYW5zbGF0ZShpPnI/KHIraSkvMjpNYXRoLm1pbigwLHIpfHxNYXRoLm1heCgwLGkpLG8+YT8oYStvKS8yOk1hdGgubWluKDAsYSl8fE1hdGgubWF4KDAsbykpfXZhciBMdz1mdW5jdGlvbigpe3ZhciB0LGUsbj1BdyxyPU13LGk9RHcsYT1OdyxvPUJ3LHM9WzAsMS8wXSxjPVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHU9MjUwLGw9ZHAsaD1odCgic3RhcnQiLCJ6b29tIiwiZW5kIiksZj0wO2Z1bmN0aW9uIGQodCl7dC5wcm9wZXJ0eSgiX196b29tIixPdykub24oIndoZWVsLnpvb20iLHgpLm9uKCJtb3VzZWRvd24uem9vbSIsXykub24oImRibGNsaWNrLnpvb20iLGspLmZpbHRlcihvKS5vbigidG91Y2hzdGFydC56b29tIix3KS5vbigidG91Y2htb3ZlLnpvb20iLFQpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLEUpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuKGU9TWF0aC5tYXgoc1swXSxNYXRoLm1pbihzWzFdLGUpKSk9PT10Lms/dDpuZXcgd3coZSx0LngsdC55KX1mdW5jdGlvbiB5KHQsZSxuKXt2YXIgcj1lWzBdLW5bMF0qdC5rLGk9ZVsxXS1uWzFdKnQuaztyZXR1cm4gcj09PXQueCYmaT09PXQueT90Om5ldyB3dyh0LmsscixpKX1mdW5jdGlvbiBnKHQpe3JldHVyblsoK3RbMF1bMF0rICt0WzFdWzBdKS8yLCgrdFswXVsxXSsgK3RbMV1bMV0pLzJdfWZ1bmN0aW9uIG0odCxlLG4pe3Qub24oInN0YXJ0Lnpvb20iLChmdW5jdGlvbigpe3YodGhpcyxhcmd1bWVudHMpLnN0YXJ0KCl9KSkub24oImludGVycnVwdC56b29tIGVuZC56b29tIiwoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pKS50d2Vlbigiem9vbSIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxpPWFyZ3VtZW50cyxhPXYodCxpKSxvPXIuYXBwbHkodCxpKSxzPW51bGw9PW4/ZyhvKToiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHQsaSk6bixjPU1hdGgubWF4KG9bMV1bMF0tb1swXVswXSxvWzFdWzFdLW9bMF1bMV0pLHU9dC5fX3pvb20saD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHQsaSk6ZSxmPWwodS5pbnZlcnQocykuY29uY2F0KGMvdS5rKSxoLmludmVydChzKS5jb25jYXQoYy9oLmspKTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMT09PXQpdD1oO2Vsc2V7dmFyIGU9Zih0KSxuPWMvZVsyXTt0PW5ldyB3dyhuLHNbMF0tZVswXSpuLHNbMV0tZVsxXSpuKX1hLnpvb20obnVsbCx0KX19KSl9ZnVuY3Rpb24gdih0LGUsbil7cmV0dXJuIW4mJnQuX196b29taW5nfHxuZXcgYih0LGUpfWZ1bmN0aW9uIGIodCxlKXt0aGlzLnRoYXQ9dCx0aGlzLmFyZ3M9ZSx0aGlzLmFjdGl2ZT0wLHRoaXMuZXh0ZW50PXIuYXBwbHkodCxlKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiB4KCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXYodGhpcyxhcmd1bWVudHMpLGU9dGhpcy5fX3pvb20scj1NYXRoLm1heChzWzBdLE1hdGgubWluKHNbMV0sZS5rKk1hdGgucG93KDIsYS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksbz1Ebih0aGlzKTtpZih0LndoZWVsKXQubW91c2VbMF1bMF09PT1vWzBdJiZ0Lm1vdXNlWzBdWzFdPT09b1sxXXx8KHQubW91c2VbMV09ZS5pbnZlcnQodC5tb3VzZVswXT1vKSksY2xlYXJUaW1lb3V0KHQud2hlZWwpO2Vsc2V7aWYoZS5rPT09cilyZXR1cm47dC5tb3VzZT1bbyxlLmludmVydChvKV0sc3IodGhpcyksdC5zdGFydCgpfVN3KCksdC53aGVlbD1zZXRUaW1lb3V0KHUsMTUwKSx0Lnpvb20oIm1vdXNlIixpKHkocChlLHIpLHQubW91c2VbMF0sdC5tb3VzZVsxXSksdC5leHRlbnQsYykpfWZ1bmN0aW9uIHUoKXt0LndoZWVsPW51bGwsdC5lbmQoKX19ZnVuY3Rpb24gXygpe2lmKCFlJiZuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHQ9dih0aGlzLGFyZ3VtZW50cywhMCkscj13ZSh1ZS52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLHUsITApLm9uKCJtb3VzZXVwLnpvb20iLGwsITApLGE9RG4odGhpcyksbz11ZS5jbGllbnRYLHM9dWUuY2xpZW50WTtDZSh1ZS52aWV3KSxDdygpLHQubW91c2U9W2EsdGhpcy5fX3pvb20uaW52ZXJ0KGEpXSxzcih0aGlzKSx0LnN0YXJ0KCl9ZnVuY3Rpb24gdSgpe2lmKFN3KCksIXQubW92ZWQpe3ZhciBlPXVlLmNsaWVudFgtbyxuPXVlLmNsaWVudFktczt0Lm1vdmVkPWUqZStuKm4+Zn10Lnpvb20oIm1vdXNlIixpKHkodC50aGF0Ll9fem9vbSx0Lm1vdXNlWzBdPURuKHQudGhhdCksdC5tb3VzZVsxXSksdC5leHRlbnQsYykpfWZ1bmN0aW9uIGwoKXtyLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLFNlKHVlLnZpZXcsdC5tb3ZlZCksU3coKSx0LmVuZCgpfX1mdW5jdGlvbiBrKCl7aWYobi5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB0PXRoaXMuX196b29tLGU9RG4odGhpcyksYT10LmludmVydChlKSxvPXQuayoodWUuc2hpZnRLZXk/LjU6Mikscz1pKHkocCh0LG8pLGUsYSksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyk7U3coKSx1PjA/d2UodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKHUpLmNhbGwobSxzLGUpOndlKHRoaXMpLmNhbGwoZC50cmFuc2Zvcm0scyl9fWZ1bmN0aW9uIHcoKXtpZihuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGUscixpLGEsbz11ZS50b3VjaGVzLHM9by5sZW5ndGgsYz12KHRoaXMsYXJndW1lbnRzLHVlLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PXMpO2ZvcihDdygpLHI9MDtyPHM7KytyKWk9b1tyXSxhPVthPUJuKHRoaXMsbyxpLmlkZW50aWZpZXIpLHRoaXMuX196b29tLmludmVydChhKSxpLmlkZW50aWZpZXJdLGMudG91Y2gwP2MudG91Y2gxfHxjLnRvdWNoMFsyXT09PWFbMl18fChjLnRvdWNoMT1hLGMudGFwcz0wKTooYy50b3VjaDA9YSxlPSEwLGMudGFwcz0xKyEhdCk7dCYmKHQ9Y2xlYXJUaW1lb3V0KHQpKSxlJiYoYy50YXBzPDImJih0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dD1udWxsfSksNTAwKSksc3IodGhpcyksYy5zdGFydCgpKX19ZnVuY3Rpb24gVCgpe2lmKHRoaXMuX196b29taW5nKXt2YXIgZSxuLHIsYSxvPXYodGhpcyxhcmd1bWVudHMpLHM9dWUuY2hhbmdlZFRvdWNoZXMsdT1zLmxlbmd0aDtmb3IoU3coKSx0JiYodD1jbGVhclRpbWVvdXQodCkpLG8udGFwcz0wLGU9MDtlPHU7KytlKW49c1tlXSxyPUJuKHRoaXMscyxuLmlkZW50aWZpZXIpLG8udG91Y2gwJiZvLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9vLnRvdWNoMFswXT1yOm8udG91Y2gxJiZvLnRvdWNoMVsyXT09PW4uaWRlbnRpZmllciYmKG8udG91Y2gxWzBdPXIpO2lmKG49by50aGF0Ll9fem9vbSxvLnRvdWNoMSl7dmFyIGw9by50b3VjaDBbMF0saD1vLnRvdWNoMFsxXSxmPW8udG91Y2gxWzBdLGQ9by50b3VjaDFbMV0sZz0oZz1mWzBdLWxbMF0pKmcrKGc9ZlsxXS1sWzFdKSpnLG09KG09ZFswXS1oWzBdKSptKyhtPWRbMV0taFsxXSkqbTtuPXAobixNYXRoLnNxcnQoZy9tKSkscj1bKGxbMF0rZlswXSkvMiwobFsxXStmWzFdKS8yXSxhPVsoaFswXStkWzBdKS8yLChoWzFdK2RbMV0pLzJdfWVsc2V7aWYoIW8udG91Y2gwKXJldHVybjtyPW8udG91Y2gwWzBdLGE9by50b3VjaDBbMV19by56b29tKCJ0b3VjaCIsaSh5KG4scixhKSxvLmV4dGVudCxjKSl9fWZ1bmN0aW9uIEUoKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHQsbixyPXYodGhpcyxhcmd1bWVudHMpLGk9dWUuY2hhbmdlZFRvdWNoZXMsYT1pLmxlbmd0aDtmb3IoQ3coKSxlJiZjbGVhclRpbWVvdXQoZSksZT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2U9bnVsbH0pLDUwMCksdD0wO3Q8YTsrK3Qpbj1pW3RdLHIudG91Y2gwJiZyLnRvdWNoMFsyXT09PW4uaWRlbnRpZmllcj9kZWxldGUgci50b3VjaDA6ci50b3VjaDEmJnIudG91Y2gxWzJdPT09bi5pZGVudGlmaWVyJiZkZWxldGUgci50b3VjaDE7aWYoci50b3VjaDEmJiFyLnRvdWNoMCYmKHIudG91Y2gwPXIudG91Y2gxLGRlbGV0ZSByLnRvdWNoMSksci50b3VjaDApci50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KHIudG91Y2gwWzBdKTtlbHNlIGlmKHIuZW5kKCksMj09PXIudGFwcyl7dmFyIG89d2UodGhpcykub24oImRibGNsaWNrLnpvb20iKTtvJiZvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBkLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5zZWxlY3Rpb24/dC5zZWxlY3Rpb24oKTp0O3IucHJvcGVydHkoIl9fem9vbSIsT3cpLHQhPT1yP20odCxlLG4pOnIuaW50ZXJydXB0KCkuZWFjaCgoZnVuY3Rpb24oKXt2KHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCwiZnVuY3Rpb24iPT10eXBlb2YgZT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTplKS5lbmQoKX0pKX0sZC5zY2FsZUJ5PWZ1bmN0aW9uKHQsZSxuKXtkLnNjYWxlVG8odCwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fem9vbS5rLG49ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZTtyZXR1cm4gdCpufSksbil9LGQuc2NhbGVUbz1mdW5jdGlvbih0LGUsbil7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhPXRoaXMuX196b29tLG89bnVsbD09bj9nKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOm4scz1hLmludmVydChvKSx1PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmU7cmV0dXJuIGkoeShwKGEsdSksbyxzKSx0LGMpfSksbil9LGQudHJhbnNsYXRlQnk9ZnVuY3Rpb24odCxlLG4pe2QudHJhbnNmb3JtKHQsKGZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOmUsImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6biksci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYyl9KSl9LGQudHJhbnNsYXRlVG89ZnVuY3Rpb24odCxlLG4sYSl7ZC50cmFuc2Zvcm0odCwoZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXRoaXMuX196b29tLHM9bnVsbD09YT9nKHQpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE7cmV0dXJuIGkoVHcudHJhbnNsYXRlKHNbMF0sc1sxXSkuc2NhbGUoby5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGU/LWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1lLCJmdW5jdGlvbiI9PXR5cGVvZiBuPy1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotbiksdCxjKX0pLGEpfSxiLnByb3RvdHlwZT17c3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PXQmJih0aGlzLm1vdXNlWzFdPWUuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PXQmJih0aGlzLnRvdWNoMFsxXT1lLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09dCYmKHRoaXMudG91Y2gxWzFdPWUuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1lLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbih0KXt5ZShuZXcga3coZCx0LHRoaXMudGhhdC5fX3pvb20pLGguYXBwbHksaCxbdCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxkLndoZWVsRGVsdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfdygrdCksZCk6YX0sZC5maWx0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpfdyghIXQpLGQpOm59LGQudG91Y2hhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6X3coISF0KSxkKTpvfSxkLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Ol93KFtbK3RbMF1bMF0sK3RbMF1bMV1dLFsrdFsxXVswXSwrdFsxXVsxXV1dKSxkKTpyfSxkLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzWzBdPSt0WzBdLHNbMV09K3RbMV0sZCk6W3NbMF0sc1sxXV19LGQudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjWzBdWzBdPSt0WzBdWzBdLGNbMV1bMF09K3RbMV1bMF0sY1swXVsxXT0rdFswXVsxXSxjWzFdWzFdPSt0WzFdWzFdLGQpOltbY1swXVswXSxjWzBdWzFdXSxbY1sxXVswXSxjWzFdWzFdXV19LGQuY29uc3RyYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZCk6aX0sZC5kdXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rdCxkKTp1fSxkLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsZCk6bH0sZC5vbj1mdW5jdGlvbigpe3ZhciB0PWgub24uYXBwbHkoaCxhcmd1bWVudHMpO3JldHVybiB0PT09aD9kOnR9LGQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0odD0rdCkqdCxkKTpNYXRoLnNxcnQoZil9LGR9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCllLmhhc093blByb3BlcnR5KG4pfHwoZVtuXT10W25dKX0obigxNzEpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwyXSxuPVsxLDNdLHI9WzEsNV0saT1bMSw3XSxhPVsyLDVdLG89WzEsMTVdLHM9WzEsMTddLGM9WzEsMThdLHU9WzEsMjBdLGw9WzEsMjFdLGg9WzEsMjJdLGY9WzEsMjRdLGQ9WzEsMjVdLHA9WzEsMjZdLHk9WzEsMjddLGc9WzEsMjhdLG09WzEsMjldLHY9WzEsMzJdLGI9WzEsMzNdLHg9WzEsMzZdLF89WzEsNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM2LDM3LDQ4LDU4XSxrPVsxLDQ0XSx3PVs0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjgsMjksMzAsMzEsMzMsMzcsNDgsNThdLFQ9WzQsNSwxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNiwzNyw0OCw1OF0sRT1bNCw1LDE2LDIxLDIyLDIzLDI1LDI3LDI4LDI5LDMwLDMxLDMzLDM1LDM3LDQ4LDU4XSxDPVs0Niw0Nyw0OF0sUz1bMSw0LDUsNywxNiwyMSwyMiwyMywyNSwyNywyOCwyOSwzMCwzMSwzMywzNSwzNiwzNyw0OCw1OF0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxORVdMSU5FOjUsZGlyZWN0aXZlOjYsU0Q6Nyxkb2N1bWVudDo4LGxpbmU6OSxzdGF0ZW1lbnQ6MTAsb3BlbkRpcmVjdGl2ZToxMSx0eXBlRGlyZWN0aXZlOjEyLGNsb3NlRGlyZWN0aXZlOjEzLCI6IjoxNCxhcmdEaXJlY3RpdmU6MTUscGFydGljaXBhbnQ6MTYsYWN0b3I6MTcsQVM6MTgscmVzdE9mTGluZToxOSxzaWduYWw6MjAsYXV0b251bWJlcjoyMSxhY3RpdmF0ZToyMixkZWFjdGl2YXRlOjIzLG5vdGVfc3RhdGVtZW50OjI0LHRpdGxlOjI1LHRleHQyOjI2LGxvb3A6MjcsZW5kOjI4LHJlY3Q6Mjksb3B0OjMwLGFsdDozMSxlbHNlX3NlY3Rpb25zOjMyLHBhcjozMyxwYXJfc2VjdGlvbnM6MzQsYW5kOjM1LGVsc2U6MzYsbm90ZTozNyxwbGFjZW1lbnQ6Mzgsb3ZlcjozOSxhY3Rvcl9wYWlyOjQwLHNwYWNlTGlzdDo0MSwiLCI6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxzaWduYWx0eXBlOjQ1LCIrIjo0NiwiLSI6NDcsQUNUT1I6NDgsU09MSURfT1BFTl9BUlJPVzo0OSxET1RURURfT1BFTl9BUlJPVzo1MCxTT0xJRF9BUlJPVzo1MSxET1RURURfQVJST1c6NTIsU09MSURfQ1JPU1M6NTMsRE9UVEVEX0NST1NTOjU0LFNPTElEX1BPSU5UOjU1LERPVFRFRF9QT0lOVDo1NixUWFQ6NTcsb3Blbl9kaXJlY3RpdmU6NTgsdHlwZV9kaXJlY3RpdmU6NTksYXJnX2RpcmVjdGl2ZTo2MCxjbG9zZV9kaXJlY3RpdmU6NjEsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDQ6IlNQQUNFIiw1OiJORVdMSU5FIiw3OiJTRCIsMTQ6IjoiLDE2OiJwYXJ0aWNpcGFudCIsMTg6IkFTIiwxOToicmVzdE9mTGluZSIsMjE6ImF1dG9udW1iZXIiLDIyOiJhY3RpdmF0ZSIsMjM6ImRlYWN0aXZhdGUiLDI1OiJ0aXRsZSIsMjc6Imxvb3AiLDI4OiJlbmQiLDI5OiJyZWN0IiwzMDoib3B0IiwzMToiYWx0IiwzMzoicGFyIiwzNToiYW5kIiwzNjoiZWxzZSIsMzc6Im5vdGUiLDM5OiJvdmVyIiw0MjoiLCIsNDM6ImxlZnRfb2YiLDQ0OiJyaWdodF9vZiIsNDY6IisiLDQ3OiItIiw0ODoiQUNUT1IiLDQ5OiJTT0xJRF9PUEVOX0FSUk9XIiw1MDoiRE9UVEVEX09QRU5fQVJST1ciLDUxOiJTT0xJRF9BUlJPVyIsNTI6IkRPVFRFRF9BUlJPVyIsNTM6IlNPTElEX0NST1NTIiw1NDoiRE9UVEVEX0NST1NTIiw1NToiU09MSURfUE9JTlQiLDU2OiJET1RURURfUE9JTlQiLDU3OiJUWFQiLDU4OiJvcGVuX2RpcmVjdGl2ZSIsNTk6InR5cGVfZGlyZWN0aXZlIiw2MDoiYXJnX2RpcmVjdGl2ZSIsNjE6ImNsb3NlX2RpcmVjdGl2ZSJ9LHByb2R1Y3Rpb25zXzpbMCxbMywyXSxbMywyXSxbMywyXSxbMywyXSxbOCwwXSxbOCwyXSxbOSwyXSxbOSwxXSxbOSwxXSxbNiw0XSxbNiw2XSxbMTAsNV0sWzEwLDNdLFsxMCwyXSxbMTAsMV0sWzEwLDNdLFsxMCwzXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsNF0sWzEwLDRdLFsxMCw0XSxbMTAsNF0sWzEwLDFdLFszNCwxXSxbMzQsNF0sWzMyLDFdLFszMiw0XSxbMjQsNF0sWzI0LDRdLFs0MSwyXSxbNDEsMV0sWzQwLDNdLFs0MCwxXSxbMzgsMV0sWzM4LDFdLFsyMCw1XSxbMjAsNV0sWzIwLDRdLFsxNywxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFs0NSwxXSxbNDUsMV0sWzQ1LDFdLFsyNiwxXSxbMTEsMV0sWzEyLDFdLFsxNSwxXSxbMTMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLmFwcGx5KGFbc10pLGFbc107Y2FzZSA1OnRoaXMuJD1bXTticmVhaztjYXNlIDY6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDc6Y2FzZSA4OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgOTp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjphW3MtM10uZGVzY3JpcHRpb249ci5wYXJzZU1lc3NhZ2UoYVtzLTFdKSx0aGlzLiQ9YVtzLTNdO2JyZWFrO2Nhc2UgMTM6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDE1OnIuZW5hYmxlU2VxdWVuY2VOdW1iZXJzKCk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9e3R5cGU6ImFjdGl2ZVN0YXJ0IixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX1NUQVJULGFjdG9yOmFbcy0xXX07YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9e3R5cGU6ImFjdGl2ZUVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9FTkQsYWN0b3I6YVtzLTFdfTticmVhaztjYXNlIDE5OnRoaXMuJD1be3R5cGU6InNldFRpdGxlIix0ZXh0OmFbcy0xXX1dO2JyZWFrO2Nhc2UgMjA6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Imxvb3BTdGFydCIsbG9vcFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuTE9PUF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJsb29wRW5kIixsb29wVGV4dDphW3MtMl0sc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkxPT1BfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDIxOmFbcy0xXS51bnNoaWZ0KHt0eXBlOiJyZWN0U3RhcnQiLGNvbG9yOnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlJFQ1RfU1RBUlR9KSxhW3MtMV0ucHVzaCh7dHlwZToicmVjdEVuZCIsY29sb3I6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuUkVDVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjI6YVtzLTFdLnVuc2hpZnQoe3R5cGU6Im9wdFN0YXJ0IixvcHRUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLk9QVF9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJvcHRFbmQiLG9wdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuT1BUX0VORH0pLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSAyMzphW3MtMV0udW5zaGlmdCh7dHlwZToiYWx0U3RhcnQiLGFsdFRleHQ6ci5wYXJzZU1lc3NhZ2UoYVtzLTJdKSxzaWduYWxUeXBlOnIuTElORVRZUEUuQUxUX1NUQVJUfSksYVtzLTFdLnB1c2goe3R5cGU6ImFsdEVuZCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFMVF9FTkR9KSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMjQ6YVtzLTFdLnVuc2hpZnQoe3R5cGU6InBhclN0YXJ0IixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0yXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9TVEFSVH0pLGFbcy0xXS5wdXNoKHt0eXBlOiJwYXJFbmQiLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5QQVJfRU5EfSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDI3OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiYW5kIixwYXJUZXh0OnIucGFyc2VNZXNzYWdlKGFbcy0xXSksc2lnbmFsVHlwZTpyLkxJTkVUWVBFLlBBUl9BTkR9LGFbc11dKTticmVhaztjYXNlIDI5OnRoaXMuJD1hW3MtM10uY29uY2F0KFt7dHlwZToiZWxzZSIsYWx0VGV4dDpyLnBhcnNlTWVzc2FnZShhW3MtMV0pLHNpZ25hbFR5cGU6ci5MSU5FVFlQRS5BTFRfRUxTRX0sYVtzXV0pO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPVthW3MtMV0se3R5cGU6ImFkZE5vdGUiLHBsYWNlbWVudDphW3MtMl0sYWN0b3I6YVtzLTFdLmFjdG9yLHRleHQ6YVtzXX1dO2JyZWFrO2Nhc2UgMzE6YVtzLTJdPVtdLmNvbmNhdChhW3MtMV0sYVtzLTFdKS5zbGljZSgwLDIpLGFbcy0yXVswXT1hW3MtMl1bMF0uYWN0b3IsYVtzLTJdWzFdPWFbcy0yXVsxXS5hY3Rvcix0aGlzLiQ9W2Fbcy0xXSx7dHlwZToiYWRkTm90ZSIscGxhY2VtZW50OnIuUExBQ0VNRU5ULk9WRVIsYWN0b3I6YVtzLTJdLnNsaWNlKDAsMiksdGV4dDphW3NdfV07YnJlYWs7Y2FzZSAzNDp0aGlzLiQ9W2Fbcy0yXSxhW3NdXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMzY6dGhpcy4kPXIuUExBQ0VNRU5ULkxFRlRPRjticmVhaztjYXNlIDM3OnRoaXMuJD1yLlBMQUNFTUVOVC5SSUdIVE9GO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3MtNF0sYVtzLTFdLHt0eXBlOiJhZGRNZXNzYWdlIixmcm9tOmFbcy00XS5hY3Rvcix0bzphW3MtMV0uYWN0b3Isc2lnbmFsVHlwZTphW3MtM10sbXNnOmFbc119LHt0eXBlOiJhY3RpdmVTdGFydCIsc2lnbmFsVHlwZTpyLkxJTkVUWVBFLkFDVElWRV9TVEFSVCxhY3RvcjphW3MtMV19XTticmVhaztjYXNlIDM5OnRoaXMuJD1bYVtzLTRdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtNF0uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTNdLG1zZzphW3NdfSx7dHlwZToiYWN0aXZlRW5kIixzaWduYWxUeXBlOnIuTElORVRZUEUuQUNUSVZFX0VORCxhY3RvcjphW3MtNF19XTticmVhaztjYXNlIDQwOnRoaXMuJD1bYVtzLTNdLGFbcy0xXSx7dHlwZToiYWRkTWVzc2FnZSIsZnJvbTphW3MtM10uYWN0b3IsdG86YVtzLTFdLmFjdG9yLHNpZ25hbFR5cGU6YVtzLTJdLG1zZzphW3NdfV07YnJlYWs7Y2FzZSA0MTp0aGlzLiQ9e3R5cGU6ImFkZEFjdG9yIixhY3RvcjphW3NdfTticmVhaztjYXNlIDQyOnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEX09QRU47YnJlYWs7Y2FzZSA0Mzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfT1BFTjticmVhaztjYXNlIDQ0OnRoaXMuJD1yLkxJTkVUWVBFLlNPTElEO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuTElORVRZUEUuRE9UVEVEO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuTElORVRZUEUuU09MSURfQ1JPU1M7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5MSU5FVFlQRS5ET1RURURfQ1JPU1M7YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9ci5MSU5FVFlQRS5TT0xJRF9QT0lOVDticmVhaztjYXNlIDQ5OnRoaXMuJD1yLkxJTkVUWVBFLkRPVFRFRF9QT0lOVDticmVhaztjYXNlIDUwOnRoaXMuJD1yLnBhcnNlTWVzc2FnZShhW3NdLnRyaW0oKS5zdWJzdHJpbmcoMSkpO2JyZWFrO2Nhc2UgNTE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDUzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA1NDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJzZXF1ZW5jZSIpfX0sdGFibGU6W3szOjEsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezE6WzNdfSx7Mzo4LDQ6ZSw1Om4sNjo0LDc6ciwxMTo2LDU4Oml9LHszOjksNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sezM6MTAsNDplLDU6biw2OjQsNzpyLDExOjYsNTg6aX0sdChbMSw0LDUsMTYsMjEsMjIsMjMsMjUsMjcsMjksMzAsMzEsMzMsMzcsNDgsNThdLGEsezg6MTF9KSx7MTI6MTIsNTk6WzEsMTNdfSx7NTk6WzIsNTFdfSx7MTpbMiwxXX0sezE6WzIsMl19LHsxOlsyLDNdfSx7MTpbMiw0XSw0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzc6diw0ODpiLDU4Oml9LHsxMzozNCwxNDpbMSwzNV0sNjE6eH0sdChbMTQsNjFdLFsyLDUyXSksdChfLFsyLDZdKSx7NjozMCwxMDozNywxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzc6diw0ODpiLDU4Oml9LHQoXyxbMiw4XSksdChfLFsyLDldKSx7MTc6MzgsNDg6Yn0sezU6WzEsMzldfSx0KF8sWzIsMTVdKSx7MTc6NDAsNDg6Yn0sezE3OjQxLDQ4OmJ9LHs1OlsxLDQyXX0sezI2OjQzLDU3Omt9LHsxOTpbMSw0NV19LHsxOTpbMSw0Nl19LHsxOTpbMSw0N119LHsxOTpbMSw0OF19LHsxOTpbMSw0OV19LHQoXyxbMiwyNV0pLHs0NTo1MCw0OTpbMSw1MV0sNTA6WzEsNTJdLDUxOlsxLDUzXSw1MjpbMSw1NF0sNTM6WzEsNTVdLDU0OlsxLDU2XSw1NTpbMSw1N10sNTY6WzEsNThdfSx7Mzg6NTksMzk6WzEsNjBdLDQzOlsxLDYxXSw0NDpbMSw2Ml19LHQoWzUsMTgsNDIsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTddLFsyLDQxXSksezU6WzEsNjNdfSx7MTU6NjQsNjA6WzEsNjVdfSx7NTpbMiw1NF19LHQoXyxbMiw3XSksezU6WzEsNjddLDE4OlsxLDY2XX0sdChfLFsyLDE0XSksezU6WzEsNjhdfSx7NTpbMSw2OV19LHQoXyxbMiwxOF0pLHs1OlsxLDcwXX0sezU6WzIsNTBdfSx0KHcsYSx7ODo3MX0pLHQodyxhLHs4OjcyfSksdCh3LGEsezg6NzN9KSx0KFQsYSx7MzI6NzQsODo3NX0pLHQoRSxhLHszNDo3Niw4Ojc3fSksezE3OjgwLDQ2OlsxLDc4XSw0NzpbMSw3OV0sNDg6Yn0sdChDLFsyLDQyXSksdChDLFsyLDQzXSksdChDLFsyLDQ0XSksdChDLFsyLDQ1XSksdChDLFsyLDQ2XSksdChDLFsyLDQ3XSksdChDLFsyLDQ4XSksdChDLFsyLDQ5XSksezE3OjgxLDQ4OmJ9LHsxNzo4Myw0MDo4Miw0ODpifSx7NDg6WzIsMzZdfSx7NDg6WzIsMzddfSx0KFMsWzIsMTBdKSx7MTM6ODQsNjE6eH0sezYxOlsyLDUzXX0sezE5OlsxLDg1XX0sdChfLFsyLDEzXSksdChfLFsyLDE2XSksdChfLFsyLDE3XSksdChfLFsyLDE5XSksezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzEsODZdLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzc6diw0ODpiLDU4Oml9LHs0Om8sNTpzLDY6MzAsOToxNCwxMDoxNiwxMTo2LDE2OmMsMTc6MzEsMjA6MTksMjE6dSwyMjpsLDIzOmgsMjQ6MjMsMjU6ZiwyNzpkLDI4OlsxLDg3XSwyOTpwLDMwOnksMzE6ZywzMzptLDM3OnYsNDg6Yiw1ODppfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMSw4OF0sMjk6cCwzMDp5LDMxOmcsMzM6bSwzNzp2LDQ4OmIsNTg6aX0sezI4OlsxLDg5XX0sezQ6byw1OnMsNjozMCw5OjE0LDEwOjE2LDExOjYsMTY6YywxNzozMSwyMDoxOSwyMTp1LDIyOmwsMjM6aCwyNDoyMywyNTpmLDI3OmQsMjg6WzIsMjhdLDI5OnAsMzA6eSwzMTpnLDMzOm0sMzY6WzEsOTBdLDM3OnYsNDg6Yiw1ODppfSx7Mjg6WzEsOTFdfSx7NDpvLDU6cyw2OjMwLDk6MTQsMTA6MTYsMTE6NiwxNjpjLDE3OjMxLDIwOjE5LDIxOnUsMjI6bCwyMzpoLDI0OjIzLDI1OmYsMjc6ZCwyODpbMiwyNl0sMjk6cCwzMDp5LDMxOmcsMzM6bSwzNTpbMSw5Ml0sMzc6diw0ODpiLDU4Oml9LHsxNzo5Myw0ODpifSx7MTc6OTQsNDg6Yn0sezI2Ojk1LDU3Omt9LHsyNjo5Niw1NzprfSx7MjY6OTcsNTc6a30sezQyOlsxLDk4XSw1NzpbMiwzNV19LHs1OlsxLDk5XX0sezU6WzEsMTAwXX0sdChfLFsyLDIwXSksdChfLFsyLDIxXSksdChfLFsyLDIyXSksdChfLFsyLDIzXSksezE5OlsxLDEwMV19LHQoXyxbMiwyNF0pLHsxOTpbMSwxMDJdfSx7MjY6MTAzLDU3Omt9LHsyNjoxMDQsNTc6a30sezU6WzIsNDBdfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezE3OjEwNSw0ODpifSx0KFMsWzIsMTFdKSx0KF8sWzIsMTJdKSx0KFQsYSx7ODo3NSwzMjoxMDZ9KSx0KEUsYSx7ODo3NywzNDoxMDd9KSx7NTpbMiwzOF19LHs1OlsyLDM5XX0sezU3OlsyLDM0XX0sezI4OlsyLDI5XX0sezI4OlsyLDI3XX1dLGRlZmF1bHRBY3Rpb25zOns3OlsyLDUxXSw4OlsyLDFdLDk6WzIsMl0sMTA6WzIsM10sMzY6WzIsNTRdLDQ0OlsyLDUwXSw2MTpbMiwzNl0sNjI6WzIsMzddLDY1OlsyLDUzXSw5NTpbMiw0MF0sOTY6WzIsMzBdLDk3OlsyLDMxXSwxMDM6WzIsMzhdLDEwNDpbMiwzOV0sMTA1OlsyLDM0XSwxMDY6WzIsMjldLDEwNzpbMiwyN119LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxNPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNTg7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDU5O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxNDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNjE7Y2FzZSA0OnJldHVybiA2MDtjYXNlIDU6cmV0dXJuIDU7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdGhpcy5iZWdpbigiSUQiKSwxNjtjYXNlIDEyOnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksdGhpcy5iZWdpbigiQUxJQVMiKSw0ODtjYXNlIDEzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oIkxJTkUiKSwxODtjYXNlIDE0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDU7Y2FzZSAxNTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDI3O2Nhc2UgMTY6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwyOTtjYXNlIDE3OnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzA7Y2FzZSAxODpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDMxO2Nhc2UgMTk6cmV0dXJuIHRoaXMuYmVnaW4oIkxJTkUiKSwzNjtjYXNlIDIwOnJldHVybiB0aGlzLmJlZ2luKCJMSU5FIiksMzM7Y2FzZSAyMTpyZXR1cm4gdGhpcy5iZWdpbigiTElORSIpLDM1O2Nhc2UgMjI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwxOTtjYXNlIDIzOnJldHVybiAyODtjYXNlIDI0OnJldHVybiA0MztjYXNlIDI1OnJldHVybiA0NDtjYXNlIDI2OnJldHVybiAzOTtjYXNlIDI3OnJldHVybiAzNztjYXNlIDI4OnJldHVybiB0aGlzLmJlZ2luKCJJRCIpLDIyO2Nhc2UgMjk6cmV0dXJuIHRoaXMuYmVnaW4oIklEIiksMjM7Y2FzZSAzMDpyZXR1cm4gMjU7Y2FzZSAzMTpyZXR1cm4gNztjYXNlIDMyOnJldHVybiAyMTtjYXNlIDMzOnJldHVybiA0MjtjYXNlIDM0OnJldHVybiA1O2Nhc2UgMzU6cmV0dXJuIGUueXl0ZXh0PWUueXl0ZXh0LnRyaW0oKSw0ODtjYXNlIDM2OnJldHVybiA1MTtjYXNlIDM3OnJldHVybiA1MjtjYXNlIDM4OnJldHVybiA0OTtjYXNlIDM5OnJldHVybiA1MDtjYXNlIDQwOnJldHVybiA1MztjYXNlIDQxOnJldHVybiA1NDtjYXNlIDQyOnJldHVybiA1NTtjYXNlIDQzOnJldHVybiA1NjtjYXNlIDQ0OnJldHVybiA1NztjYXNlIDQ1OnJldHVybiA0NjtjYXNlIDQ2OnJldHVybiA0NztjYXNlIDQ3OnJldHVybiA1O2Nhc2UgNDg6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzooKD8hXG4pXHMpKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolKD8hXHspW15cbl0qKS9pLC9eKD86W15cfV0lJVteXG5dKikvaSwvXig/OnBhcnRpY2lwYW50XGIpL2ksL14oPzpbXlwtPjpcbiw7XSs/KD89KCg/IVxuKVxzKSthcyg/IVxuKVxzfFsjXG47XXwkKSkvaSwvXig/OmFzXGIpL2ksL14oPzooPzopKS9pLC9eKD86bG9vcFxiKS9pLC9eKD86cmVjdFxiKS9pLC9eKD86b3B0XGIpL2ksL14oPzphbHRcYikvaSwvXig/OmVsc2VcYikvaSwvXig/OnBhclxiKS9pLC9eKD86YW5kXGIpL2ksL14oPzooPzpbOl0/KD86bm8pP3dyYXApP1teI1xuO10qKS9pLC9eKD86ZW5kXGIpL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86b3ZlclxiKS9pLC9eKD86bm90ZVxiKS9pLC9eKD86YWN0aXZhdGVcYikvaSwvXig/OmRlYWN0aXZhdGVcYikvaSwvXig/OnRpdGxlXGIpL2ksL14oPzpzZXF1ZW5jZURpYWdyYW1cYikvaSwvXig/OmF1dG9udW1iZXJcYikvaSwvXig/OiwpL2ksL14oPzo7KS9pLC9eKD86W15cK1wtPjpcbiw7XSsoKD8hKC14fC0teHwtXCl8LS1cKSkpW1wtXSpbXlwrXC0+OlxuLDtdKykqKS9pLC9eKD86LT4+KS9pLC9eKD86LS0+PikvaSwvXig/Oi0+KS9pLC9eKD86LS0+KS9pLC9eKD86LVt4XSkvaSwvXig/Oi0tW3hdKS9pLC9eKD86LVtcKV0pL2ksL14oPzotLVtcKV0pL2ksL14oPzo6KD86KD86bm8pP3dyYXApP1teI1xuO10rKS9pLC9eKD86XCspL2ksL14oPzotKS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMSw4XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzLDhdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNCw4XSxpbmNsdXNpdmU6ITF9LElEOntydWxlczpbNyw4LDEyXSxpbmNsdXNpdmU6ITF9LEFMSUFTOntydWxlczpbNyw4LDEzLDE0XSxpbmNsdXNpdmU6ITF9LExJTkU6e3J1bGVzOls3LDgsMjJdLGluY2x1c2l2ZTohMX0sSU5JVElBTDp7cnVsZXM6WzAsNSw2LDgsOSwxMCwxMSwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIE8oKXt0aGlzLnl5PXt9fXJldHVybiBBLmxleGVyPU0sTy5wcm90b3R5cGU9QSxBLlBhcnNlcj1PLG5ldyBPfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIwMyk7dC5leHBvcnRzPXtHcmFwaDpyLkdyYXBoLGpzb246bigzMDYpLGFsZzpuKDMwNyksdmVyc2lvbjpyLnZlcnNpb259fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9e2Nsb25lRGVlcDpuKDMxOCksY29uc3RhbnQ6big4OCksZGVmYXVsdHM6bigxNTQpLGVhY2g6big4OSksZmlsdGVyOm4oMTI4KSxmaW5kOm4oMzE5KSxmbGF0dGVuOm4oMTU2KSxmb3JFYWNoOm4oMTI2KSxmb3JJbjpuKDMyNiksaGFzOm4oOTQpLGlzVW5kZWZpbmVkOm4oMTM5KSxsYXN0Om4oMzI3KSxtYXA6bigxNDApLG1hcFZhbHVlczpuKDMyOCksbWF4Om4oMzI5KSxtZXJnZTpuKDMzMSksbWluOm4oMzM2KSxtaW5CeTpuKDMzNyksbm93Om4oMzM4KSxwaWNrOm4oMTYxKSxyYW5nZTpuKDE2MikscmVkdWNlOm4oMTQyKSxzb3J0Qnk6bigzNDUpLHVuaXF1ZUlkOm4oMTYzKSx2YWx1ZXM6bigxNDcpLHppcE9iamVjdDpuKDM1MCl9fWNhdGNoKHQpe31yfHwocj13aW5kb3cuXyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49QXJyYXkuaXNBcnJheTt0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5OSksaT1uKDE3OCksYT1uKDE3OSksbz1uKDE4MCkscz17Zm9ybWF0OntrZXl3b3JkOmkuZGVmYXVsdCxoZXg6ci5kZWZhdWx0LHJnYjphLmRlZmF1bHQscmdiYTphLmRlZmF1bHQsaHNsOm8uZGVmYXVsdCxoc2xhOm8uZGVmYXVsdH0scGFyc2U6ZnVuY3Rpb24odCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVybiB0O3ZhciBlPXIuZGVmYXVsdC5wYXJzZSh0KXx8YS5kZWZhdWx0LnBhcnNlKHQpfHxvLmRlZmF1bHQucGFyc2UodCl8fGkuZGVmYXVsdC5wYXJzZSh0KTtpZihlKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiJyt0KyciJyl9LHN0cmluZ2lmeTpmdW5jdGlvbih0KXtyZXR1cm4hdC5jaGFuZ2VkJiZ0LmNvbG9yP3QuY29sb3I6dC50eXBlLmlzKDIpfHx2b2lkIDA9PT10LmRhdGEucj9vLmRlZmF1bHQuc3RyaW5naWZ5KHQpOnQuYTwxfHwhTnVtYmVyLmlzSW50ZWdlcih0LnIpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmcpfHwhTnVtYmVyLmlzSW50ZWdlcih0LmIpP2EuZGVmYXVsdC5zdHJpbmdpZnkodCk6ci5kZWZhdWx0LnN0cmluZ2lmeSh0KX19O2UuZGVmYXVsdD1zfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC53ZWJwYWNrUG9seWZpbGx8fCh0LmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sdC5wYXRocz1bXSx0LmNoaWxkcmVufHwodC5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lml9fSksdC53ZWJwYWNrUG9seWZpbGw9MSksdH19LGZ1bmN0aW9uKHQsZSxuKXsKLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIENocmlzIFBldHRpdHQKICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQogKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAogKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCiAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogKiBUSEUgU09GVFdBUkUuCiAqLwp0LmV4cG9ydHM9e2dyYXBobGliOm4oMzE2KSxkYWdyZTpuKDE1MyksaW50ZXJzZWN0Om4oMzc1KSxyZW5kZXI6bigzNzcpLHV0aWw6bigxNSksdmVyc2lvbjpuKDM4OSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDIwKS5HcmFwaDtmdW5jdGlvbiBhKHQsZSxuLGkpe3ZhciBhO2Rve2E9ci51bmlxdWVJZChpKX13aGlsZSh0Lmhhc05vZGUoYSkpO3JldHVybiBuLmR1bW15PWUsdC5zZXROb2RlKGEsbiksYX1mdW5jdGlvbiBvKHQpe3JldHVybiByLm1heChyLm1hcCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKS5yYW5rO2lmKCFyLmlzVW5kZWZpbmVkKG4pKXJldHVybiBufSkpKX10LmV4cG9ydHM9e2FkZER1bW15Tm9kZTphLHNpbXBsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPShuZXcgaSkuc2V0R3JhcGgodC5ncmFwaCgpKTtyZXR1cm4gci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj1lLmVkZ2Uobi52LG4udyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT10LmVkZ2Uobik7ZS5zZXRFZGdlKG4udixuLncse3dlaWdodDpyLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgoci5taW5sZW4saS5taW5sZW4pfSl9KSksZX0sYXNOb25Db21wb3VuZEdyYXBoOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBpKHttdWx0aWdyYXBoOnQuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaCh0LmdyYXBoKCkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt0LmNoaWxkcmVuKG4pLmxlbmd0aHx8ZS5zZXROb2RlKG4sdC5ub2RlKG4pKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXtlLnNldEVkZ2Uobix0LmVkZ2UobikpfSkpLGV9LHN1Y2Nlc3NvcldlaWdodHM6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS53XT0obltlLnddfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0scHJlZGVjZXNzb3JXZWlnaHRzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49e307cmV0dXJuIHIuZm9yRWFjaCh0LmluRWRnZXMoZSksKGZ1bmN0aW9uKGUpe25bZS52XT0obltlLnZdfHwwKSt0LmVkZ2UoZSkud2VpZ2h0fSkpLG59KSk7cmV0dXJuIHIuemlwT2JqZWN0KHQubm9kZXMoKSxlKX0saW50ZXJzZWN0UmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtpZighbyYmIXMpdGhyb3cgbmV3IEVycm9yKCJOb3QgcG9zc2libGUgdG8gZmluZCBpbnRlcnNlY3Rpb24gaW5zaWRlIG9mIHRoZSByZWN0YW5nbGUiKTtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9YypzL28pO3JldHVybnt4Omkrbix5OmErcn19LGJ1aWxkTGF5ZXJNYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9ci5tYXAoci5yYW5nZShvKHQpKzEpLChmdW5jdGlvbigpe3JldHVybltdfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT10Lm5vZGUobiksYT1pLnJhbms7ci5pc1VuZGVmaW5lZChhKXx8KGVbYV1baS5vcmRlcl09bil9KSksZX0sbm9ybWFsaXplUmFua3M6ZnVuY3Rpb24odCl7dmFyIGU9ci5taW4oci5tYXAodC5ub2RlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLnJhbmt9KSkpO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQubm9kZShuKTtyLmhhcyhpLCJyYW5rIikmJihpLnJhbmstPWUpfSkpfSxyZW1vdmVFbXB0eVJhbmtzOmZ1bmN0aW9uKHQpe3ZhciBlPXIubWluKHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpKSxuPVtdO3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKS5yYW5rLWU7bltpXXx8KG5baV09W10pLG5baV0ucHVzaChyKX0pKTt2YXIgaT0wLGE9dC5ncmFwaCgpLm5vZGVSYW5rRmFjdG9yO3IuZm9yRWFjaChuLChmdW5jdGlvbihlLG4pe3IuaXNVbmRlZmluZWQoZSkmJm4lYSE9MD8tLWk6aSYmci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3Qubm9kZShlKS5yYW5rKz1pfSkpfSkpfSxhZGRCb3JkZXJOb2RlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXt3aWR0aDowLGhlaWdodDowfTthcmd1bWVudHMubGVuZ3RoPj00JiYoaS5yYW5rPW4saS5vcmRlcj1yKTtyZXR1cm4gYSh0LCJib3JkZXIiLGksZSl9LG1heFJhbms6byxwYXJ0aXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj17bGhzOltdLHJoczpbXX07cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0KXtlKHQpP24ubGhzLnB1c2godCk6bi5yaHMucHVzaCh0KX0pKSxufSx0aW1lOmZ1bmN0aW9uKHQsZSl7dmFyIG49ci5ub3coKTt0cnl7cmV0dXJuIGUoKX1maW5hbGx5e2NvbnNvbGUubG9nKHQrIiB0aW1lOiAiKyhyLm5vdygpLW4pKyJtcyIpfX0sbm90aW1lOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUoKX19fSxmdW5jdGlvbih0LGUsbil7dC5leHBvcnRzPXtncmFwaGxpYjpuKDIwKSxsYXlvdXQ6bigzMTcpLGRlYnVnOm4oMzczKSx1dGlsOnt0aW1lOm4oOSkudGltZSxub3RpbWU6big5KS5ub3RpbWV9LHZlcnNpb246bigzNzQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxNzIpLGk9bigxNzMpLGE9bigxNzQpLG89e2NoYW5uZWw6ci5kZWZhdWx0LGxhbmc6aS5kZWZhdWx0LHVuaXQ6YS5kZWZhdWx0fTtlLmRlZmF1bHQ9b30sZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9dC5leHBvcnRzPXt9O2Z1bmN0aW9uIGEoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKHQpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKG49PT1hfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBuKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBuLmNhbGwodGhpcyx0LDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDphfWNhdGNoKHQpe249YX10cnl7cj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpvfWNhdGNoKHQpe3I9b319KCk7dmFyIGMsdT1bXSxsPSExLGg9LTE7ZnVuY3Rpb24gZigpe2wmJmMmJihsPSExLGMubGVuZ3RoP3U9Yy5jb25jYXQodSk6aD0tMSx1Lmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIWwpe3ZhciB0PXMoZik7bD0hMDtmb3IodmFyIGU9dS5sZW5ndGg7ZTspe2ZvcihjPXUsdT1bXTsrK2g8ZTspYyYmY1toXS5ydW4oKTtoPS0xLGU9dS5sZW5ndGh9Yz1udWxsLGw9ITEsZnVuY3Rpb24odCl7aWYocj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChyPT09b3x8IXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIHI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cih0KX1jYXRjaChlKXt0cnl7cmV0dXJuIHIuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiByLmNhbGwodGhpcyx0KX19fSh0KX19ZnVuY3Rpb24gcCh0LGUpe3RoaXMuZnVuPXQsdGhpcy5hcnJheT1lfWZ1bmN0aW9uIHkoKXt9aS5uZXh0VGljaz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllW24tMV09YXJndW1lbnRzW25dO3UucHVzaChuZXcgcCh0LGUpKSwxIT09dS5sZW5ndGh8fGx8fHMoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGkudGl0bGU9ImJyb3dzZXIiLGkuYnJvd3Nlcj0hMCxpLmVudj17fSxpLmFyZ3Y9W10saS52ZXJzaW9uPSIiLGkudmVyc2lvbnM9e30saS5vbj15LGkuYWRkTGlzdGVuZXI9eSxpLm9uY2U9eSxpLm9mZj15LGkucmVtb3ZlTGlzdGVuZXI9eSxpLnJlbW92ZUFsbExpc3RlbmVycz15LGkuZW1pdD15LGkucHJlcGVuZExpc3RlbmVyPXksaS5wcmVwZW5kT25jZUxpc3RlbmVyPXksaS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGkuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGkuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxpLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGkudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjt0cnl7cj17Y2xvbmU6bigyMDQpLGNvbnN0YW50Om4oODgpLGVhY2g6big4OSksZmlsdGVyOm4oMTI4KSxoYXM6big5NCksaXNBcnJheTpuKDUpLGlzRW1wdHk6bigyODEpLGlzRnVuY3Rpb246bigzOSksaXNVbmRlZmluZWQ6bigxMzkpLGtleXM6bigzMCksbWFwOm4oMTQwKSxyZWR1Y2U6bigxNDIpLHNpemU6bigyODQpLHRyYW5zZm9ybTpuKDI5MCksdW5pb246bigyOTEpLHZhbHVlczpuKDE0Nyl9fWNhdGNoKHQpe31yfHwocj13aW5kb3cuXyksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PWV8fCJmdW5jdGlvbiI9PWUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDQpO3QuZXhwb3J0cz17aXNTdWJncmFwaDpmdW5jdGlvbih0LGUpe3JldHVybiEhdC5jaGlsZHJlbihlKS5sZW5ndGh9LGVkZ2VUb0lkOmZ1bmN0aW9uKHQpe3JldHVybiBhKHQudikrIjoiK2EodC53KSsiOiIrYSh0Lm5hbWUpfSxhcHBseVN0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmdC5hdHRyKCJzdHlsZSIsZSl9LGFwcGx5Q2xhc3M6ZnVuY3Rpb24odCxlLG4pe2UmJnQuYXR0cigiY2xhc3MiLGUpLmF0dHIoImNsYXNzIixuKyIgIit0LmF0dHIoImNsYXNzIikpfSxhcHBseVRyYW5zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdyYXBoKCk7aWYoci5pc1BsYWluT2JqZWN0KG4pKXt2YXIgaT1uLnRyYW5zaXRpb247aWYoci5pc0Z1bmN0aW9uKGkpKXJldHVybiBpKHQpfXJldHVybiB0fX07dmFyIGk9LzovZztmdW5jdGlvbiBhKHQpe3JldHVybiB0P1N0cmluZyh0KS5yZXBsYWNlKGksIlxcOiIpOiIifX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw2XSxuPVsxLDddLHI9WzEsOF0saT1bMSw5XSxhPVsxLDEyXSxvPVsxLDExXSxzPVsxLDE1LDI0XSxjPVsxLDE5XSx1PVsxLDMxXSxsPVsxLDM0XSxoPVsxLDMyXSxmPVsxLDMzXSxkPVsxLDM1XSxwPVsxLDM2XSx5PVsxLDM3XSxnPVsxLDM4XSxtPVsxLDQxXSx2PVsxLDQyXSxiPVsxLDQzXSx4PVsxLDQ0XSxfPVsxNSwyNF0saz1bMSw1Nl0sdz1bMSw1N10sVD1bMSw1OF0sRT1bMSw1OV0sQz1bMSw2MF0sUz1bMSw2MV0sQT1bMTUsMjQsMzEsMzgsMzksNDcsNTAsNTEsNTIsNTMsNTQsNTUsNjAsNjJdLE09WzE1LDI0LDI5LDMxLDM4LDM5LDQzLDQ3LDUwLDUxLDUyLDUzLDU0LDU1LDYwLDYyLDc3LDc4LDc5LDgwXSxPPVs3LDgsOSwxMCwxNSwxOCwyMiwyNF0sTj1bNDcsNzcsNzgsNzksODBdLEI9WzQ3LDU0LDU1LDc3LDc4LDc5LDgwXSxEPVs0Nyw1MCw1MSw1Miw1Myw3Nyw3OCw3OSw4MF0sTD1bMTUsMjQsMzFdLEk9WzEsOTNdLFI9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3Rpb246NSxkaXJlY3RpdmU6NixkaXJlY3Rpb25fdGI6NyxkaXJlY3Rpb25fYnQ6OCxkaXJlY3Rpb25fcmw6OSxkaXJlY3Rpb25fbHI6MTAsZ3JhcGhDb25maWc6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LE5FV0xJTkU6MTUsIjoiOjE2LGFyZ0RpcmVjdGl2ZToxNyxvcGVuX2RpcmVjdGl2ZToxOCx0eXBlX2RpcmVjdGl2ZToxOSxhcmdfZGlyZWN0aXZlOjIwLGNsb3NlX2RpcmVjdGl2ZToyMSxDTEFTU19ESUFHUkFNOjIyLHN0YXRlbWVudHM6MjMsRU9GOjI0LHN0YXRlbWVudDoyNSxjbGFzc05hbWU6MjYsYWxwaGFOdW1Ub2tlbjoyNyxjbGFzc0xpdGVyYWxOYW1lOjI4LEdFTkVSSUNUWVBFOjI5LHJlbGF0aW9uU3RhdGVtZW50OjMwLExBQkVMOjMxLGNsYXNzU3RhdGVtZW50OjMyLG1ldGhvZFN0YXRlbWVudDozMyxhbm5vdGF0aW9uU3RhdGVtZW50OjM0LGNsaWNrU3RhdGVtZW50OjM1LGNzc0NsYXNzU3RhdGVtZW50OjM2LENMQVNTOjM3LFNUWUxFX1NFUEFSQVRPUjozOCxTVFJVQ1RfU1RBUlQ6MzksbWVtYmVyczo0MCxTVFJVQ1RfU1RPUDo0MSxBTk5PVEFUSU9OX1NUQVJUOjQyLEFOTk9UQVRJT05fRU5EOjQzLE1FTUJFUjo0NCxTRVBBUkFUT1I6NDUscmVsYXRpb246NDYsU1RSOjQ3LHJlbGF0aW9uVHlwZTo0OCxsaW5lVHlwZTo0OSxBR0dSRUdBVElPTjo1MCxFWFRFTlNJT046NTEsQ09NUE9TSVRJT046NTIsREVQRU5ERU5DWTo1MyxMSU5FOjU0LERPVFRFRF9MSU5FOjU1LENBTExCQUNLOjU2LExJTks6NTcsTElOS19UQVJHRVQ6NTgsQ0xJQ0s6NTksQ0FMTEJBQ0tfTkFNRTo2MCxDQUxMQkFDS19BUkdTOjYxLEhSRUY6NjIsQ1NTQ0xBU1M6NjMsY29tbWVudFRva2VuOjY0LHRleHRUb2tlbjo2NSxncmFwaENvZGVUb2tlbnM6NjYsdGV4dE5vVGFnc1Rva2VuOjY3LFRBR1NUQVJUOjY4LFRBR0VORDo2OSwiPT0iOjcwLCItLSI6NzEsUENUOjcyLERFRkFVTFQ6NzMsU1BBQ0U6NzQsTUlOVVM6NzUsa2V5d29yZHM6NzYsVU5JQ09ERV9URVhUOjc3LE5VTTo3OCxBTFBIQTo3OSxCUVVPVEVfU1RSOjgwLCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw3OiJkaXJlY3Rpb25fdGIiLDg6ImRpcmVjdGlvbl9idCIsOToiZGlyZWN0aW9uX3JsIiwxMDoiZGlyZWN0aW9uX2xyIiwxNToiTkVXTElORSIsMTY6IjoiLDE4OiJvcGVuX2RpcmVjdGl2ZSIsMTk6InR5cGVfZGlyZWN0aXZlIiwyMDoiYXJnX2RpcmVjdGl2ZSIsMjE6ImNsb3NlX2RpcmVjdGl2ZSIsMjI6IkNMQVNTX0RJQUdSQU0iLDI0OiJFT0YiLDI5OiJHRU5FUklDVFlQRSIsMzE6IkxBQkVMIiwzNzoiQ0xBU1MiLDM4OiJTVFlMRV9TRVBBUkFUT1IiLDM5OiJTVFJVQ1RfU1RBUlQiLDQxOiJTVFJVQ1RfU1RPUCIsNDI6IkFOTk9UQVRJT05fU1RBUlQiLDQzOiJBTk5PVEFUSU9OX0VORCIsNDQ6Ik1FTUJFUiIsNDU6IlNFUEFSQVRPUiIsNDc6IlNUUiIsNTA6IkFHR1JFR0FUSU9OIiw1MToiRVhURU5TSU9OIiw1MjoiQ09NUE9TSVRJT04iLDUzOiJERVBFTkRFTkNZIiw1NDoiTElORSIsNTU6IkRPVFRFRF9MSU5FIiw1NjoiQ0FMTEJBQ0siLDU3OiJMSU5LIiw1ODoiTElOS19UQVJHRVQiLDU5OiJDTElDSyIsNjA6IkNBTExCQUNLX05BTUUiLDYxOiJDQUxMQkFDS19BUkdTIiw2MjoiSFJFRiIsNjM6IkNTU0NMQVNTIiw2NjoiZ3JhcGhDb2RlVG9rZW5zIiw2ODoiVEFHU1RBUlQiLDY5OiJUQUdFTkQiLDcwOiI9PSIsNzE6Ii0tIiw3MjoiUENUIiw3MzoiREVGQVVMVCIsNzQ6IlNQQUNFIiw3NToiTUlOVVMiLDc2OiJrZXl3b3JkcyIsNzc6IlVOSUNPREVfVEVYVCIsNzg6Ik5VTSIsNzk6IkFMUEhBIiw4MDoiQlFVT1RFX1NUUiJ9LHByb2R1Y3Rpb25zXzpbMCxbMywxXSxbMywxXSxbMywyXSxbNSwxXSxbNSwxXSxbNSwxXSxbNSwxXSxbNCwxXSxbNiw0XSxbNiw2XSxbMTIsMV0sWzEzLDFdLFsxNywxXSxbMTQsMV0sWzExLDRdLFsyMywxXSxbMjMsMl0sWzIzLDNdLFsyNiwxXSxbMjYsMV0sWzI2LDJdLFsyNiwyXSxbMjYsMl0sWzI1LDFdLFsyNSwyXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzI1LDFdLFsyNSwxXSxbMjUsMV0sWzMyLDJdLFszMiw0XSxbMzIsNV0sWzMyLDddLFszNCw0XSxbNDAsMV0sWzQwLDJdLFszMywxXSxbMzMsMl0sWzMzLDFdLFszMywxXSxbMzAsM10sWzMwLDRdLFszMCw0XSxbMzAsNV0sWzQ2LDNdLFs0NiwyXSxbNDYsMl0sWzQ2LDFdLFs0OCwxXSxbNDgsMV0sWzQ4LDFdLFs0OCwxXSxbNDksMV0sWzQ5LDFdLFszNSwzXSxbMzUsNF0sWzM1LDNdLFszNSw0XSxbMzUsNF0sWzM1LDVdLFszNSwzXSxbMzUsNF0sWzM1LDRdLFszNSw1XSxbMzUsM10sWzM1LDRdLFszNSw0XSxbMzUsNV0sWzM2LDNdLFs2NCwxXSxbNjQsMV0sWzY1LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NSwxXSxbNjUsMV0sWzY1LDFdLFs2NywxXSxbNjcsMV0sWzY3LDFdLFs2NywxXSxbMjcsMV0sWzI3LDFdLFsyNywxXSxbMjgsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnIuc2V0RGlyZWN0aW9uKCJUQiIpO2JyZWFrO2Nhc2UgNTpyLnNldERpcmVjdGlvbigiQlQiKTticmVhaztjYXNlIDY6ci5zZXREaXJlY3Rpb24oIlJMIik7YnJlYWs7Y2FzZSA3OnIuc2V0RGlyZWN0aW9uKCJMUiIpO2JyZWFrO2Nhc2UgMTE6ci5wYXJzZURpcmVjdGl2ZSgiJSV7Iiwib3Blbl9kaXJlY3RpdmUiKTticmVhaztjYXNlIDEyOnIucGFyc2VEaXJlY3RpdmUoYVtzXSwidHlwZV9kaXJlY3RpdmUiKTticmVhaztjYXNlIDEzOmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxNDpyLnBhcnNlRGlyZWN0aXZlKCJ9JSUiLCJjbG9zZV9kaXJlY3RpdmUiLCJjbGFzcyIpO2JyZWFrO2Nhc2UgMTk6Y2FzZSAyMDp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDIxOnRoaXMuJD1hW3MtMV0rYVtzXTticmVhaztjYXNlIDIyOmNhc2UgMjM6dGhpcy4kPWFbcy0xXSsifiIrYVtzXTticmVhaztjYXNlIDI0OnIuYWRkUmVsYXRpb24oYVtzXSk7YnJlYWs7Y2FzZSAyNTphW3MtMV0udGl0bGU9ci5jbGVhbnVwTGFiZWwoYVtzXSksci5hZGRSZWxhdGlvbihhW3MtMV0pO2JyZWFrO2Nhc2UgMzM6ci5hZGRDbGFzcyhhW3NdKTticmVhaztjYXNlIDM0OnIuYWRkQ2xhc3MoYVtzLTJdKSxyLnNldENzc0NsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDM1OnIuYWRkQ2xhc3MoYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzNjpyLmFkZENsYXNzKGFbcy01XSksci5zZXRDc3NDbGFzcyhhW3MtNV0sYVtzLTNdKSxyLmFkZE1lbWJlcnMoYVtzLTVdLGFbcy0xXSk7YnJlYWs7Y2FzZSAzNzpyLmFkZEFubm90YXRpb24oYVtzXSxhW3MtMl0pO2JyZWFrO2Nhc2UgMzg6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDM5OmFbc10ucHVzaChhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNDA6YnJlYWs7Y2FzZSA0MTpyLmFkZE1lbWJlcihhW3MtMV0sci5jbGVhbnVwTGFiZWwoYVtzXSkpO2JyZWFrO2Nhc2UgNDI6Y2FzZSA0MzpicmVhaztjYXNlIDQ0OnRoaXMuJD17aWQxOmFbcy0yXSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMV0scmVsYXRpb25UaXRsZTE6Im5vbmUiLHJlbGF0aW9uVGl0bGUyOiJub25lIn07YnJlYWs7Y2FzZSA0NTp0aGlzLiQ9e2lkMTphW3MtM10saWQyOmFbc10scmVsYXRpb246YVtzLTFdLHJlbGF0aW9uVGl0bGUxOmFbcy0yXSxyZWxhdGlvblRpdGxlMjoibm9uZSJ9O2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXtpZDE6YVtzLTNdLGlkMjphW3NdLHJlbGF0aW9uOmFbcy0yXSxyZWxhdGlvblRpdGxlMToibm9uZSIscmVsYXRpb25UaXRsZTI6YVtzLTFdfTticmVhaztjYXNlIDQ3OnRoaXMuJD17aWQxOmFbcy00XSxpZDI6YVtzXSxyZWxhdGlvbjphW3MtMl0scmVsYXRpb25UaXRsZTE6YVtzLTNdLHJlbGF0aW9uVGl0bGUyOmFbcy0xXX07YnJlYWs7Y2FzZSA0ODp0aGlzLiQ9e3R5cGUxOmFbcy0yXSx0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA0OTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjphW3NdLGxpbmVUeXBlOmFbcy0xXX07YnJlYWs7Y2FzZSA1MDp0aGlzLiQ9e3R5cGUxOmFbcy0xXSx0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA1MTp0aGlzLiQ9e3R5cGUxOiJub25lIix0eXBlMjoibm9uZSIsbGluZVR5cGU6YVtzXX07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuQUdHUkVHQVRJT047YnJlYWs7Y2FzZSA1Mzp0aGlzLiQ9ci5yZWxhdGlvblR5cGUuRVhURU5TSU9OO2JyZWFrO2Nhc2UgNTQ6dGhpcy4kPXIucmVsYXRpb25UeXBlLkNPTVBPU0lUSU9OO2JyZWFrO2Nhc2UgNTU6dGhpcy4kPXIucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k7YnJlYWs7Y2FzZSA1Njp0aGlzLiQ9ci5saW5lVHlwZS5MSU5FO2JyZWFrO2Nhc2UgNTc6dGhpcy4kPXIubGluZVR5cGUuRE9UVEVEX0xJTkU7YnJlYWs7Y2FzZSA1ODpjYXNlIDY0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDU5OmNhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDYwOmNhc2UgNjg6dGhpcy4kPWFbcy0yXSxyLnNldExpbmsoYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjE6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDYyOmNhc2UgNzA6dGhpcy4kPWFbcy0zXSxyLnNldExpbmsoYVtzLTJdLGFbcy0xXSksci5zZXRUb29sdGlwKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDYzOmNhc2UgNzE6dGhpcy4kPWFbcy00XSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbcy0xXSk7YnJlYWs7Y2FzZSA2Njp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy00XSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0yXSxhW3MtMV0pLHIuc2V0VG9vbHRpcChhW3MtM10sYVtzXSk7YnJlYWs7Y2FzZSA2OTp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtMl0sYVtzLTFdLGFbc10pO2JyZWFrO2Nhc2UgNzI6ci5zZXRDc3NDbGFzcyhhW3MtMV0sYVtzXSl9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6NCw3OmUsODpuLDk6ciwxMDppLDExOjUsMTI6MTAsMTg6YSwyMjpvfSx7MTpbM119LHsxOlsyLDFdfSx7MTpbMiwyXX0sezM6MTMsNDoyLDU6Myw2OjQsNzplLDg6biw5OnIsMTA6aSwxMTo1LDEyOjEwLDE4OmEsMjI6b30sezE6WzIsOF19LHQocyxbMiw0XSksdChzLFsyLDVdKSx0KHMsWzIsNl0pLHQocyxbMiw3XSksezEzOjE0LDE5OlsxLDE1XX0sezE1OlsxLDE2XX0sezE5OlsyLDExXX0sezE6WzIsM119LHsxNDoxNywxNjpbMSwxOF0sMjE6Y30sdChbMTYsMjFdLFsyLDEyXSksezU6MjksNjoyOCw3OmUsODpuLDk6ciwxMDppLDEyOjEwLDE4OmEsMjM6MjAsMjU6MjEsMjY6MzAsMjc6MzksMjg6NDAsMzA6MjIsMzI6MjMsMzM6MjQsMzQ6MjUsMzU6MjYsMzY6MjcsMzc6dSw0MjpsLDQ0OmgsNDU6Ziw1NjpkLDU3OnAsNTk6eSw2MzpnLDc3Om0sNzg6diw3OTpiLDgwOnh9LHsxNTpbMSw0NV19LHsxNzo0NiwyMDpbMSw0N119LHsxNTpbMiwxNF19LHsyNDpbMSw0OF19LHsxNTpbMSw0OV0sMjQ6WzIsMTZdfSx0KF8sWzIsMjRdLHszMTpbMSw1MF19KSx0KF8sWzIsMjZdKSx0KF8sWzIsMjddKSx0KF8sWzIsMjhdKSx0KF8sWzIsMjldKSx0KF8sWzIsMzBdKSx0KF8sWzIsMzFdKSx0KF8sWzIsMzJdKSx0KF8sWzIsNDBdLHs0Njo1MSw0ODo1NCw0OTo1NSwzMTpbMSw1M10sNDc6WzEsNTJdLDUwOmssNTE6dyw1MjpULDUzOkUsNTQ6Qyw1NTpTfSksezI2OjYyLDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOnh9LHQoXyxbMiw0Ml0pLHQoXyxbMiw0M10pLHsyNzo2Myw3NzptLDc4OnYsNzk6Yn0sezI2OjY0LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOnh9LHsyNjo2NSwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDp4fSx7MjY6NjYsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6eH0sezQ3OlsxLDY3XX0sdChBLFsyLDE5XSx7Mjc6MzksMjg6NDAsMjY6NjgsMjk6WzEsNjldLDc3Om0sNzg6diw3OTpiLDgwOnh9KSx0KEEsWzIsMjBdLHsyOTpbMSw3MF19KSx0KE0sWzIsODZdKSx0KE0sWzIsODddKSx0KE0sWzIsODhdKSx0KFsxNSwyNCwyOSwzMSwzOCwzOSw0Nyw1MCw1MSw1Miw1Myw1NCw1NSw2MCw2Ml0sWzIsODldKSx0KE8sWzIsOV0pLHsxNDo3MSwyMTpjfSx7MjE6WzIsMTNdfSx7MTpbMiwxNV19LHs1OjI5LDY6MjgsNzplLDg6biw5OnIsMTA6aSwxMjoxMCwxODphLDIzOjcyLDI0OlsyLDE3XSwyNToyMSwyNjozMCwyNzozOSwyODo0MCwzMDoyMiwzMjoyMywzMzoyNCwzNDoyNSwzNToyNiwzNjoyNywzNzp1LDQyOmwsNDQ6aCw0NTpmLDU2OmQsNTc6cCw1OTp5LDYzOmcsNzc6bSw3ODp2LDc5OmIsODA6eH0sdChfLFsyLDI1XSksezI2OjczLDI3OjM5LDI4OjQwLDQ3OlsxLDc0XSw3NzptLDc4OnYsNzk6Yiw4MDp4fSx7NDY6NzUsNDg6NTQsNDk6NTUsNTA6ayw1MTp3LDUyOlQsNTM6RSw1NDpDLDU1OlN9LHQoXyxbMiw0MV0pLHs0OTo3Niw1NDpDLDU1OlN9LHQoTixbMiw1MV0sezQ4Ojc3LDUwOmssNTE6dyw1MjpULDUzOkV9KSx0KEIsWzIsNTJdKSx0KEIsWzIsNTNdKSx0KEIsWzIsNTRdKSx0KEIsWzIsNTVdKSx0KEQsWzIsNTZdKSx0KEQsWzIsNTddKSx0KF8sWzIsMzNdLHszODpbMSw3OF0sMzk6WzEsNzldfSksezQzOlsxLDgwXX0sezQ3OlsxLDgxXX0sezQ3OlsxLDgyXX0sezYwOlsxLDgzXSw2MjpbMSw4NF19LHsyNzo4NSw3NzptLDc4OnYsNzk6Yn0sdChBLFsyLDIxXSksdChBLFsyLDIyXSksdChBLFsyLDIzXSksezE1OlsxLDg2XX0sezI0OlsyLDE4XX0sdChMLFsyLDQ0XSksezI2Ojg3LDI3OjM5LDI4OjQwLDc3Om0sNzg6diw3OTpiLDgwOnh9LHsyNjo4OCwyNzozOSwyODo0MCw0NzpbMSw4OV0sNzc6bSw3ODp2LDc5OmIsODA6eH0sdChOLFsyLDUwXSx7NDg6OTAsNTA6ayw1MTp3LDUyOlQsNTM6RX0pLHQoTixbMiw0OV0pLHsyNzo5MSw3NzptLDc4OnYsNzk6Yn0sezQwOjkyLDQ0Okl9LHsyNjo5NCwyNzozOSwyODo0MCw3NzptLDc4OnYsNzk6Yiw4MDp4fSx0KF8sWzIsNThdLHs0NzpbMSw5NV19KSx0KF8sWzIsNjBdLHs0NzpbMSw5N10sNTg6WzEsOTZdfSksdChfLFsyLDY0XSx7NDc6WzEsOThdLDYxOlsxLDk5XX0pLHQoXyxbMiw2OF0sezQ3OlsxLDEwMV0sNTg6WzEsMTAwXX0pLHQoXyxbMiw3Ml0pLHQoTyxbMiwxMF0pLHQoTCxbMiw0Nl0pLHQoTCxbMiw0NV0pLHsyNjoxMDIsMjc6MzksMjg6NDAsNzc6bSw3ODp2LDc5OmIsODA6eH0sdChOLFsyLDQ4XSksdChfLFsyLDM0XSx7Mzk6WzEsMTAzXX0pLHs0MTpbMSwxMDRdfSx7NDA6MTA1LDQxOlsyLDM4XSw0NDpJfSx0KF8sWzIsMzddKSx0KF8sWzIsNTldKSx0KF8sWzIsNjFdKSx0KF8sWzIsNjJdLHs1ODpbMSwxMDZdfSksdChfLFsyLDY1XSksdChfLFsyLDY2XSx7NDc6WzEsMTA3XX0pLHQoXyxbMiw2OV0pLHQoXyxbMiw3MF0sezU4OlsxLDEwOF19KSx0KEwsWzIsNDddKSx7NDA6MTA5LDQ0Okl9LHQoXyxbMiwzNV0pLHs0MTpbMiwzOV19LHQoXyxbMiw2M10pLHQoXyxbMiw2N10pLHQoXyxbMiw3MV0pLHs0MTpbMSwxMTBdfSx0KF8sWzIsMzZdKV0sZGVmYXVsdEFjdGlvbnM6ezI6WzIsMV0sMzpbMiwyXSw1OlsyLDhdLDEyOlsyLDExXSwxMzpbMiwzXSwxOTpbMiwxNF0sNDc6WzIsMTNdLDQ4OlsyLDE1XSw3MjpbMiwxOF0sMTA1OlsyLDM5XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LEY9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnt9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwxODtjYXNlIDE6cmV0dXJuIDc7Y2FzZSAyOnJldHVybiA4O2Nhc2UgMzpyZXR1cm4gOTtjYXNlIDQ6cmV0dXJuIDEwO2Nhc2UgNTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxOTtjYXNlIDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTY7Y2FzZSA3OnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDIxO2Nhc2UgODpyZXR1cm4gMjA7Y2FzZSA5OmNhc2UgMTA6YnJlYWs7Y2FzZSAxMTpyZXR1cm4gMTU7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmNhc2UgMTQ6cmV0dXJuIDIyO2Nhc2UgMTU6cmV0dXJuIHRoaXMuYmVnaW4oInN0cnVjdCIpLDM5O2Nhc2UgMTY6cmV0dXJuIkVPRl9JTl9TVFJVQ1QiO2Nhc2UgMTc6cmV0dXJuIk9QRU5fSU5fU1RSVUNUIjtjYXNlIDE4OnJldHVybiB0aGlzLnBvcFN0YXRlKCksNDE7Y2FzZSAxOTpicmVhaztjYXNlIDIwOnJldHVybiJNRU1CRVIiO2Nhc2UgMjE6cmV0dXJuIDM3O2Nhc2UgMjI6cmV0dXJuIDYzO2Nhc2UgMjM6cmV0dXJuIDU2O2Nhc2UgMjQ6cmV0dXJuIDU3O2Nhc2UgMjU6cmV0dXJuIDU5O2Nhc2UgMjY6cmV0dXJuIDQyO2Nhc2UgMjc6cmV0dXJuIDQzO2Nhc2UgMjg6dGhpcy5iZWdpbigiZ2VuZXJpYyIpO2JyZWFrO2Nhc2UgMjk6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzA6cmV0dXJuIkdFTkVSSUNUWVBFIjtjYXNlIDMxOnRoaXMuYmVnaW4oInN0cmluZyIpO2JyZWFrO2Nhc2UgMzI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzM6cmV0dXJuIlNUUiI7Y2FzZSAzNDp0aGlzLmJlZ2luKCJicXN0cmluZyIpO2JyZWFrO2Nhc2UgMzU6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzY6cmV0dXJuIkJRVU9URV9TVFIiO2Nhc2UgMzc6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMzg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzk6cmV0dXJuIDYyO2Nhc2UgNDA6dGhpcy5iZWdpbigiY2FsbGJhY2tfbmFtZSIpO2JyZWFrO2Nhc2UgNDE6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgNDI6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrX2FyZ3MiKTticmVhaztjYXNlIDQzOnJldHVybiA2MDtjYXNlIDQ0OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDQ1OnJldHVybiA2MTtjYXNlIDQ2OmNhc2UgNDc6Y2FzZSA0ODpjYXNlIDQ5OnJldHVybiA1ODtjYXNlIDUwOmNhc2UgNTE6cmV0dXJuIDUxO2Nhc2UgNTI6Y2FzZSA1MzpyZXR1cm4gNTM7Y2FzZSA1NDpyZXR1cm4gNTI7Y2FzZSA1NTpyZXR1cm4gNTA7Y2FzZSA1NjpyZXR1cm4gNTQ7Y2FzZSA1NzpyZXR1cm4gNTU7Y2FzZSA1ODpyZXR1cm4gMzE7Y2FzZSA1OTpyZXR1cm4gMzg7Y2FzZSA2MDpyZXR1cm4gNzU7Y2FzZSA2MTpyZXR1cm4iRE9UIjtjYXNlIDYyOnJldHVybiJQTFVTIjtjYXNlIDYzOnJldHVybiA3MjtjYXNlIDY0OmNhc2UgNjU6cmV0dXJuIkVRVUFMUyI7Y2FzZSA2NjpyZXR1cm4gNzk7Y2FzZSA2NzpyZXR1cm4iUFVOQ1RVQVRJT04iO2Nhc2UgNjg6cmV0dXJuIDc4O2Nhc2UgNjk6cmV0dXJuIDc3O2Nhc2UgNzA6cmV0dXJuIDc0O2Nhc2UgNzE6cmV0dXJuIDI0fX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspKlteXG5dKihccj9cbj8pKykvLC9eKD86JSVbXlxuXSooXHI/XG4pKikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKykvLC9eKD86Y2xhc3NEaWFncmFtLXYyXGIpLywvXig/OmNsYXNzRGlhZ3JhbVxiKS8sL14oPzpbe10pLywvXig/OiQpLywvXig/Olt7XSkvLC9eKD86W31dKS8sL14oPzpbXG5dKS8sL14oPzpbXnt9XG5dKikvLC9eKD86Y2xhc3NcYikvLC9eKD86Y3NzQ2xhc3NcYikvLC9eKD86Y2FsbGJhY2tcYikvLC9eKD86bGlua1xiKS8sL14oPzpjbGlja1xiKS8sL14oPzo8PCkvLC9eKD86Pj4pLywvXig/Olt+XSkvLC9eKD86W35dKS8sL14oPzpbXn5dKikvLC9eKD86WyJdKS8sL14oPzpbIl0pLywvXig/OlteIl0qKS8sL14oPzpbYF0pLywvXig/OltgXSkvLC9eKD86W15gXSspLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpfc2VsZlxiKS8sL14oPzpfYmxhbmtcYikvLC9eKD86X3BhcmVudFxiKS8sL14oPzpfdG9wXGIpLywvXig/OlxzKjxcfCkvLC9eKD86XHMqXHw+KS8sL14oPzpccyo+KS8sL14oPzpccyo8KS8sL14oPzpccypcKikvLC9eKD86XHMqb1xiKS8sL14oPzotLSkvLC9eKD86XC5cLikvLC9eKD86OnsxfVteOlxuO10rKS8sL14oPzo6ezN9KS8sL14oPzotKS8sL14oPzpcLikvLC9eKD86XCspLywvXig/OiUpLywvXig/Oj0pLywvXig/Oj0pLywvXig/Olx3KykvLC9eKD86WyEiIyQlJicqKywtLmA/XFwvXSkvLC9eKD86WzAtOV0rKS8sL14oPzpbXHUwMEFBXHUwMEI1XHUwMEJBXHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZdfFtcdTAwRjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XXxbXHUwMzdBLVx1MDM3RFx1MDM4Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNV18W1x1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTI3XHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MS1cdTA1ODdcdTA1RDAtXHUwNUVBXXxbXHUwNUYwLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NkVcdTA2NkZcdTA2NzEtXHUwNkQzXHUwNkQ1XHUwNkU1XHUwNkU2XHUwNkVFXXxbXHUwNkVGXHUwNkZBLVx1MDZGQ1x1MDZGRlx1MDcxMFx1MDcxMi1cdTA3MkZcdTA3NEQtXHUwN0E1XHUwN0IxXHUwN0NBLVx1MDdFQV18W1x1MDdGNFx1MDdGNVx1MDdGQVx1MDgwMC1cdTA4MTVcdTA4MUFcdTA4MjRcdTA4MjhcdTA4NDAtXHUwODU4XHUwOEEwXXxbXHUwOEEyLVx1MDhBQ1x1MDkwNC1cdTA5MzlcdTA5M0RcdTA5NTBcdTA5NTgtXHUwOTYxXHUwOTcxLVx1MDk3N118W1x1MDk3OS1cdTA5N0ZcdTA5ODUtXHUwOThDXHUwOThGXHUwOTkwXHUwOTkzLVx1MDlBOFx1MDlBQS1cdTA5QjBcdTA5QjJdfFtcdTA5QjYtXHUwOUI5XHUwOUJEXHUwOUNFXHUwOURDXHUwOUREXHUwOURGLVx1MDlFMVx1MDlGMFx1MDlGMVx1MEEwNS1cdTBBMEFdfFtcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOV18W1x1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNzItXHUwQTc0XHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4XXxbXHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkRcdTBBRDBcdTBBRTBcdTBBRTFcdTBCMDUtXHUwQjBDXXxbXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBCMzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNEXHUwQjVDXXxbXHUwQjVEXHUwQjVGLVx1MEI2MVx1MEI3MVx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5NVx1MEI5OV18W1x1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFcdTBCQUUtXHUwQkI5XHUwQkQwXXxbXHUwQzA1LVx1MEMwQ1x1MEMwRS1cdTBDMTBcdTBDMTItXHUwQzI4XHUwQzJBLVx1MEMzM1x1MEMzNS1cdTBDMzlcdTBDM0RdfFtcdTBDNThcdTBDNTlcdTBDNjBcdTBDNjFcdTBDODUtXHUwQzhDXHUwQzhFLVx1MEM5MFx1MEM5Mi1cdTBDQThcdTBDQUEtXHUwQ0IzXXxbXHUwQ0I1LVx1MENCOVx1MENCRFx1MENERVx1MENFMFx1MENFMVx1MENGMVx1MENGMlx1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXXxbXHUwRDEyLVx1MEQzQVx1MEQzRFx1MEQ0RVx1MEQ2MFx1MEQ2MVx1MEQ3QS1cdTBEN0ZcdTBEODUtXHUwRDk2XHUwRDlBLVx1MERCMV18W1x1MERCMy1cdTBEQkJcdTBEQkRcdTBEQzAtXHUwREM2XHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFODFdfFtcdTBFODJcdTBFODRcdTBFODdcdTBFODhcdTBFOEFcdTBFOERcdTBFOTQtXHUwRTk3XHUwRTk5LVx1MEU5Rlx1MEVBMS1cdTBFQTNdfFtcdTBFQTVcdTBFQTdcdTBFQUFcdTBFQUJcdTBFQUQtXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJEXHUwRUMwLVx1MEVDNFx1MEVDNl18W1x1MEVEQy1cdTBFREZcdTBGMDBcdTBGNDAtXHUwRjQ3XHUwRjQ5LVx1MEY2Q1x1MEY4OC1cdTBGOENcdTEwMDAtXHUxMDJBXXxbXHUxMDNGXHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEwNjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MV18W1x1MTA4RVx1MTBBMC1cdTEwQzVcdTEwQzdcdTEwQ0RcdTEwRDAtXHUxMEZBXHUxMEZDLVx1MTI0OFx1MTI0QS1cdTEyNERdfFtcdTEyNTAtXHUxMjU2XHUxMjU4XHUxMjVBLVx1MTI1RFx1MTI2MC1cdTEyODhcdTEyOEEtXHUxMjhEXHUxMjkwLVx1MTJCMF18W1x1MTJCMi1cdTEyQjVcdTEyQjgtXHUxMkJFXHUxMkMwXHUxMkMyLVx1MTJDNVx1MTJDOC1cdTEyRDZcdTEyRDgtXHUxMzEwXXxbXHUxMzEyLVx1MTMxNVx1MTMxOC1cdTEzNUFcdTEzODAtXHUxMzhGXHUxM0EwLVx1MTNGNFx1MTQwMS1cdTE2NkNdfFtcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE3MDAtXHUxNzBDXHUxNzBFLVx1MTcxMV18W1x1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XXxbXHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThcdTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ118W1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XXxbXHUxQTIwLVx1MUE1NFx1MUFBN1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRl18W1x1MUJCQS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUxQ0VDXXxbXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUxRjE4LVx1MUYxRF18W1x1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RdfFtcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM118W1x1MUZENi1cdTFGREJcdTFGRTAtXHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZdfFtcdTIwOTAtXHUyMDlDXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhdfFtcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTgzXHUyMTg0XXxbXHUyQzAwLVx1MkMyRVx1MkMzMC1cdTJDNUVcdTJDNjAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM118W1x1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZdfFtcdTJEQTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRV18W1x1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1XHUzMDA2XHUzMDMxLVx1MzAzNVx1MzAzQlx1MzAzQ118W1x1MzA0MS1cdTMwOTZcdTMwOUQtXHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJEXXxbXHUzMTMxLVx1MzE4RVx1MzFBMC1cdTMxQkFcdTMxRjAtXHUzMUZGXHUzNDAwLVx1NERCNVx1NEUwMC1cdTlGQ0NdfFtcdUEwMDAtXHVBNDhDXHVBNEQwLVx1QTRGRFx1QTUwMC1cdUE2MENcdUE2MTAtXHVBNjFGXHVBNjJBXHVBNjJCXXxbXHVBNjQwLVx1QTY2RVx1QTY3Ri1cdUE2OTdcdUE2QTAtXHVBNkU1XHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhdfFtcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1QTdBMC1cdUE3QUFcdUE3RjgtXHVBODAxXHVBODAzLVx1QTgwNV18W1x1QTgwNy1cdUE4MEFcdUE4MEMtXHVBODIyXHVBODQwLVx1QTg3M1x1QTg4Mi1cdUE4QjNcdUE4RjItXHVBOEY3XHVBOEZCXXxbXHVBOTBBLVx1QTkyNVx1QTkzMC1cdUE5NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRlx1QUEwMC1cdUFBMjhdfFtcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE2MC1cdUFBNzZcdUFBN0FcdUFBODAtXHVBQUFGXHVBQUIxXHVBQUI1XXxbXHVBQUI2XHVBQUI5LVx1QUFCRFx1QUFDMFx1QUFDMlx1QUFEQi1cdUFBRERcdUFBRTAtXHVBQUVBXHVBQUYyLVx1QUFGNF18W1x1QUIwMS1cdUFCMDZcdUFCMDktXHVBQjBFXHVBQjExLVx1QUIxNlx1QUIyMC1cdUFCMjZcdUFCMjgtXHVBQjJFXXxbXHVBQkMwLVx1QUJFMlx1QUMwMC1cdUQ3QTNcdUQ3QjAtXHVEN0M2XHVEN0NCLVx1RDdGQlx1RjkwMC1cdUZBNkRdfFtcdUZBNzAtXHVGQUQ5XHVGQjAwLVx1RkIwNlx1RkIxMy1cdUZCMTdcdUZCMURcdUZCMUYtXHVGQjI4XHVGQjJBLVx1RkIzNl18W1x1RkIzOC1cdUZCM0NcdUZCM0VcdUZCNDBcdUZCNDFcdUZCNDNcdUZCNDRcdUZCNDYtXHVGQkIxXHVGQkQzLVx1RkQzRF18W1x1RkQ1MC1cdUZEOEZcdUZEOTItXHVGREM3XHVGREYwLVx1RkRGQlx1RkU3MC1cdUZFNzRcdUZFNzYtXHVGRUZDXXxbXHVGRjIxLVx1RkYzQVx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1RkZDQS1cdUZGQ0ZdfFtcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10pLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2FyZ19kaXJlY3RpdmU6e3J1bGVzOls3LDhdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOls2LDddLGluY2x1c2l2ZTohMX0sb3Blbl9kaXJlY3RpdmU6e3J1bGVzOls1XSxpbmNsdXNpdmU6ITF9LGNhbGxiYWNrX2FyZ3M6e3J1bGVzOls0NCw0NV0saW5jbHVzaXZlOiExfSxjYWxsYmFja19uYW1lOntydWxlczpbNDEsNDIsNDNdLGluY2x1c2l2ZTohMX0saHJlZjp7cnVsZXM6WzM4LDM5XSxpbmNsdXNpdmU6ITF9LHN0cnVjdDp7cnVsZXM6WzE2LDE3LDE4LDE5LDIwXSxpbmNsdXNpdmU6ITF9LGdlbmVyaWM6e3J1bGVzOlsyOSwzMF0saW5jbHVzaXZlOiExfSxicXN0cmluZzp7cnVsZXM6WzM1LDM2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzMyLDMzXSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsOSwxMCwxMSwxMiwxMywxNCwxNSwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwzMSwzNCwzNyw0MCw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIFAoKXt0aGlzLnl5PXt9fXJldHVybiBSLmxleGVyPUYsUC5wcm90b3R5cGU9UixSLlBhcnNlcj1QLG5ldyBQfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCxlKXtmb3IodmFyIG49MCxyPXQubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPXRbcl07Ii4iPT09aT90LnNwbGljZShyLDEpOiIuLiI9PT1pPyh0LnNwbGljZShyLDEpLG4rKyk6biYmKHQuc3BsaWNlKHIsMSksbi0tKX1pZihlKWZvcig7bi0tO24pdC51bnNoaWZ0KCIuLiIpO3JldHVybiB0fWZ1bmN0aW9uIHIodCxlKXtpZih0LmZpbHRlcilyZXR1cm4gdC5maWx0ZXIoZSk7Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKyllKHRbcl0scix0KSYmbi5wdXNoKHRbcl0pO3JldHVybiBufWUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0iIixpPSExLGE9YXJndW1lbnRzLmxlbmd0aC0xO2E+PS0xJiYhaTthLS0pe3ZhciBvPWE+PTA/YXJndW1lbnRzW2FdOnQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBvKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7byYmKGU9bysiLyIrZSxpPSIvIj09PW8uY2hhckF0KDApKX1yZXR1cm4oaT8iLyI6IiIpKyhlPW4ocihlLnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhaSkuam9pbigiLyIpKXx8Ii4ifSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXt2YXIgYT1lLmlzQWJzb2x1dGUodCksbz0iLyI9PT1pKHQsLTEpO3JldHVybih0PW4ocih0LnNwbGl0KCIvIiksKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSwhYSkuam9pbigiLyIpKXx8YXx8KHQ9Ii4iKSx0JiZvJiYodCs9Ii8iKSwoYT8iLyI6IiIpK3R9LGUuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKX0sZS5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBlLm5vcm1hbGl6ZShyKHQsKGZ1bmN0aW9uKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7cmV0dXJuIHR9KSkuam9pbigiLyIpKX0sZS5yZWxhdGl2ZT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aCYmIiI9PT10W2VdO2UrKyk7Zm9yKHZhciBuPXQubGVuZ3RoLTE7bj49MCYmIiI9PT10W25dO24tLSk7cmV0dXJuIGU+bj9bXTp0LnNsaWNlKGUsbi1lKzEpfXQ9ZS5yZXNvbHZlKHQpLnN1YnN0cigxKSxuPWUucmVzb2x2ZShuKS5zdWJzdHIoMSk7Zm9yKHZhciBpPXIodC5zcGxpdCgiLyIpKSxhPXIobi5zcGxpdCgiLyIpKSxvPU1hdGgubWluKGkubGVuZ3RoLGEubGVuZ3RoKSxzPW8sYz0wO2M8bztjKyspaWYoaVtjXSE9PWFbY10pe3M9YzticmVha312YXIgdT1bXTtmb3IoYz1zO2M8aS5sZW5ndGg7YysrKXUucHVzaCgiLi4iKTtyZXR1cm4odT11LmNvbmNhdChhLnNsaWNlKHMpKSkuam9pbigiLyIpfSxlLnNlcD0iLyIsZS5kZWxpbWl0ZXI9IjoiLGUuZGlybmFtZT1mdW5jdGlvbih0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQmJih0Kz0iIiksMD09PXQubGVuZ3RoKXJldHVybiIuIjtmb3IodmFyIGU9dC5jaGFyQ29kZUF0KDApLG49NDc9PT1lLHI9LTEsaT0hMCxhPXQubGVuZ3RoLTE7YT49MTstLWEpaWYoNDc9PT0oZT10LmNoYXJDb2RlQXQoYSkpKXtpZighaSl7cj1hO2JyZWFrfX1lbHNlIGk9ITE7cmV0dXJuLTE9PT1yP24/Ii8iOiIuIjpuJiYxPT09cj8iLyI6dC5zbGljZSgwLHIpfSxlLmJhc2VuYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO3ZhciBlLG49MCxyPS0xLGk9ITA7Zm9yKGU9dC5sZW5ndGgtMTtlPj0wOy0tZSlpZig0Nz09PXQuY2hhckNvZGVBdChlKSl7aWYoIWkpe249ZSsxO2JyZWFrfX1lbHNlLTE9PT1yJiYoaT0hMSxyPWUrMSk7cmV0dXJuLTE9PT1yPyIiOnQuc2xpY2UobixyKX0odCk7cmV0dXJuIGUmJm4uc3Vic3RyKC0xKmUubGVuZ3RoKT09PWUmJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtZS5sZW5ndGgpKSxufSxlLmV4dG5hbWU9ZnVuY3Rpb24odCl7InN0cmluZyIhPXR5cGVvZiB0JiYodCs9IiIpO2Zvcih2YXIgZT0tMSxuPTAscj0tMSxpPSEwLGE9MCxvPXQubGVuZ3RoLTE7bz49MDstLW8pe3ZhciBzPXQuY2hhckNvZGVBdChvKTtpZig0NyE9PXMpLTE9PT1yJiYoaT0hMSxyPW8rMSksNDY9PT1zPy0xPT09ZT9lPW86MSE9PWEmJihhPTEpOi0xIT09ZSYmKGE9LTEpO2Vsc2UgaWYoIWkpe249bysxO2JyZWFrfX1yZXR1cm4tMT09PWV8fC0xPT09cnx8MD09PWF8fDE9PT1hJiZlPT09ci0xJiZlPT09bisxPyIiOnQuc2xpY2UoZSxyKX07dmFyIGk9ImIiPT09ImFiIi5zdWJzdHIoLTEpP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC5zdWJzdHIoZSxuKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPDAmJihlPXQubGVuZ3RoK2UpLHQuc3Vic3RyKGUsbil9fSkuY2FsbCh0aGlzLG4oMTIpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTA5KSxpPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsYT1yfHxpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUsbil7dmFyIHI7dHJ5e3I9bigzKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmdyYXBobGliKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJiJvYmplY3QiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSwzXSxyPVsxLDVdLGk9WzEsN10sYT1bMiw1XSxvPVsxLDE1XSxzPVsxLDE3XSxjPVsxLDE5XSx1PVsxLDIwXSxsPVsxLDIxXSxoPVsxLDIyXSxmPVsxLDMwXSxkPVsxLDIzXSxwPVsxLDI0XSx5PVsxLDI1XSxnPVsxLDI2XSxtPVsxLDI3XSx2PVsxLDMyXSxiPVsxLDMzXSx4PVsxLDM0XSxfPVsxLDM1XSxrPVsxLDMxXSx3PVsxLDM4XSxUPVsxLDQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sRT1bMSw0LDUsMTIsMTMsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLEM9WzEsNCw1LDcsMTQsMTUsMTcsMTksMjAsMjIsMjMsMjQsMjUsMjYsMjcsMzYsMzcsMzgsMzksNDIsNDVdLFM9WzQsNSwxNCwxNSwxNywxOSwyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sQT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsU1BBQ0U6NCxOTDo1LGRpcmVjdGl2ZTo2LFNEOjcsZG9jdW1lbnQ6OCxsaW5lOjksc3RhdGVtZW50OjEwLGlkU3RhdGVtZW50OjExLERFU0NSOjEyLCItLVx4M2UiOjEzLEhJREVfRU1QVFk6MTQsc2NhbGU6MTUsV0lEVEg6MTYsQ09NUE9TSVRfU1RBVEU6MTcsU1RSVUNUX1NUQVJUOjE4LFNUUlVDVF9TVE9QOjE5LFNUQVRFX0RFU0NSOjIwLEFTOjIxLElEOjIyLEZPUks6MjMsSk9JTjoyNCxDSE9JQ0U6MjUsQ09OQ1VSUkVOVDoyNixub3RlOjI3LG5vdGVQb3NpdGlvbjoyOCxOT1RFX1RFWFQ6MjksZGlyZWN0aW9uOjMwLG9wZW5EaXJlY3RpdmU6MzEsdHlwZURpcmVjdGl2ZTozMixjbG9zZURpcmVjdGl2ZTozMywiOiI6MzQsYXJnRGlyZWN0aXZlOjM1LGRpcmVjdGlvbl90YjozNixkaXJlY3Rpb25fYnQ6MzcsZGlyZWN0aW9uX3JsOjM4LGRpcmVjdGlvbl9scjozOSxlb2w6NDAsIjsiOjQxLEVER0VfU1RBVEU6NDIsbGVmdF9vZjo0MyxyaWdodF9vZjo0NCxvcGVuX2RpcmVjdGl2ZTo0NSx0eXBlX2RpcmVjdGl2ZTo0NixhcmdfZGlyZWN0aXZlOjQ3LGNsb3NlX2RpcmVjdGl2ZTo0OCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiU1BBQ0UiLDU6Ik5MIiw3OiJTRCIsMTI6IkRFU0NSIiwxMzoiLS1ceDNlIiwxNDoiSElERV9FTVBUWSIsMTU6InNjYWxlIiwxNjoiV0lEVEgiLDE3OiJDT01QT1NJVF9TVEFURSIsMTg6IlNUUlVDVF9TVEFSVCIsMTk6IlNUUlVDVF9TVE9QIiwyMDoiU1RBVEVfREVTQ1IiLDIxOiJBUyIsMjI6IklEIiwyMzoiRk9SSyIsMjQ6IkpPSU4iLDI1OiJDSE9JQ0UiLDI2OiJDT05DVVJSRU5UIiwyNzoibm90ZSIsMjk6Ik5PVEVfVEVYVCIsMzQ6IjoiLDM2OiJkaXJlY3Rpb25fdGIiLDM3OiJkaXJlY3Rpb25fYnQiLDM4OiJkaXJlY3Rpb25fcmwiLDM5OiJkaXJlY3Rpb25fbHIiLDQxOiI7Iiw0MjoiRURHRV9TVEFURSIsNDM6ImxlZnRfb2YiLDQ0OiJyaWdodF9vZiIsNDU6Im9wZW5fZGlyZWN0aXZlIiw0NjoidHlwZV9kaXJlY3RpdmUiLDQ3OiJhcmdfZGlyZWN0aXZlIiw0ODoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDJdLFszLDJdLFszLDJdLFs4LDBdLFs4LDJdLFs5LDJdLFs5LDFdLFs5LDFdLFsxMCwxXSxbMTAsMl0sWzEwLDNdLFsxMCw0XSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTAsNF0sWzEwLDNdLFsxMCw2XSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDRdLFsxMCw0XSxbMTAsMV0sWzEwLDFdLFs2LDNdLFs2LDVdLFszMCwxXSxbMzAsMV0sWzMwLDFdLFszMCwxXSxbNDAsMV0sWzQwLDFdLFsxMSwxXSxbMTEsMV0sWzI4LDFdLFsyOCwxXSxbMzEsMV0sWzMyLDFdLFszNSwxXSxbMzMsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSA0OnJldHVybiByLnNldFJvb3REb2MoYVtzXSksYVtzXTtjYXNlIDU6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNjoibmwiIT1hW3NdJiYoYVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXSk7YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDk6dGhpcy4kPSJubCI7YnJlYWs7Y2FzZSAxMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifTticmVhaztjYXNlIDExOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0xXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjpyLnRyaW1Db2xvbihhW3NdKX07YnJlYWs7Y2FzZSAxMjp0aGlzLiQ9e3N0bXQ6InJlbGF0aW9uIixzdGF0ZTE6e3N0bXQ6InN0YXRlIixpZDphW3MtMl0sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9LHN0YXRlMjp7c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiZGVmYXVsdCIsZGVzY3JpcHRpb246IiJ9fTticmVhaztjYXNlIDEzOnRoaXMuJD17c3RtdDoicmVsYXRpb24iLHN0YXRlMTp7c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjoiIn0sc3RhdGUyOntzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIifSxkZXNjcmlwdGlvbjphW3NdLnN1YnN0cigxKS50cmltKCl9O2JyZWFrO2Nhc2UgMTc6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTNdLHR5cGU6ImRlZmF1bHQiLGRlc2NyaXB0aW9uOiIiLGRvYzphW3MtMV19O2JyZWFrO2Nhc2UgMTg6dmFyIGM9YVtzXSx1PWFbcy0yXS50cmltKCk7aWYoYVtzXS5tYXRjaCgiOiIpKXt2YXIgbD1hW3NdLnNwbGl0KCI6Iik7Yz1sWzBdLHU9W3UsbFsxXV19dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6Yyx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjp1fTticmVhaztjYXNlIDE5OnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbcy0zXSx0eXBlOiJkZWZhdWx0IixkZXNjcmlwdGlvbjphW3MtNV0sZG9jOmFbcy0xXX07YnJlYWs7Y2FzZSAyMDp0aGlzLiQ9e3N0bXQ6InN0YXRlIixpZDphW3NdLHR5cGU6ImZvcmsifTticmVhaztjYXNlIDIxOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOmFbc10sdHlwZToiam9pbiJ9O2JyZWFrO2Nhc2UgMjI6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzXSx0eXBlOiJjaG9pY2UifTticmVhaztjYXNlIDIzOnRoaXMuJD17c3RtdDoic3RhdGUiLGlkOnIuZ2V0RGl2aWRlcklkKCksdHlwZToiZGl2aWRlciJ9O2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXtzdG10OiJzdGF0ZSIsaWQ6YVtzLTFdLnRyaW0oKSxub3RlOntwb3NpdGlvbjphW3MtMl0udHJpbSgpLHRleHQ6YVtzXS50cmltKCl9fTticmVhaztjYXNlIDMwOnIuc2V0RGlyZWN0aW9uKCJUQiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiVEIifTticmVhaztjYXNlIDMxOnIuc2V0RGlyZWN0aW9uKCJCVCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDMyOnIuc2V0RGlyZWN0aW9uKCJSTCIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiUkwifTticmVhaztjYXNlIDMzOnIuc2V0RGlyZWN0aW9uKCJMUiIpLHRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiTFIifTticmVhaztjYXNlIDM2OmNhc2UgMzc6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA0MDpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDE6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNDI6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDQzOnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInN0YXRlIil9fSx0YWJsZTpbezM6MSw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx7MTpbM119LHszOjgsNDplLDU6biw2OjQsNzpyLDMxOjYsNDU6aX0sezM6OSw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx7MzoxMCw0OmUsNTpuLDY6NCw3OnIsMzE6Niw0NTppfSx0KFsxLDQsNSwxNCwxNSwxNywyMCwyMiwyMywyNCwyNSwyNiwyNywzNiwzNywzOCwzOSw0Miw0NV0sYSx7ODoxMX0pLHszMjoxMiw0NjpbMSwxM119LHs0NjpbMiw0MF19LHsxOlsyLDFdfSx7MTpbMiwyXX0sezE6WzIsM119LHsxOlsyLDRdLDQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6eCwzOTpfLDQyOmssNDU6aX0sezMzOjM2LDM0OlsxLDM3XSw0ODp3fSx0KFszNCw0OF0sWzIsNDFdKSx0KFQsWzIsNl0pLHs2OjI4LDEwOjM5LDExOjE4LDE0OmMsMTU6dSwxNzpsLDIwOmgsMjI6ZiwyMzpkLDI0OnAsMjU6eSwyNjpnLDI3Om0sMzA6MjksMzE6NiwzNjp2LDM3OmIsMzg6eCwzOTpfLDQyOmssNDU6aX0sdChULFsyLDhdKSx0KFQsWzIsOV0pLHQoVCxbMiwxMF0sezEyOlsxLDQwXSwxMzpbMSw0MV19KSx0KFQsWzIsMTRdKSx7MTY6WzEsNDJdfSx0KFQsWzIsMTZdLHsxODpbMSw0M119KSx7MjE6WzEsNDRdfSx0KFQsWzIsMjBdKSx0KFQsWzIsMjFdKSx0KFQsWzIsMjJdKSx0KFQsWzIsMjNdKSx7Mjg6NDUsMjk6WzEsNDZdLDQzOlsxLDQ3XSw0NDpbMSw0OF19LHQoVCxbMiwyNl0pLHQoVCxbMiwyN10pLHQoRSxbMiwzNl0pLHQoRSxbMiwzN10pLHQoVCxbMiwzMF0pLHQoVCxbMiwzMV0pLHQoVCxbMiwzMl0pLHQoVCxbMiwzM10pLHQoQyxbMiwyOF0pLHszNTo0OSw0NzpbMSw1MF19LHQoQyxbMiw0M10pLHQoVCxbMiw3XSksdChULFsyLDExXSksezExOjUxLDIyOmYsNDI6a30sdChULFsyLDE1XSksdChTLGEsezg6NTJ9KSx7MjI6WzEsNTNdfSx7MjI6WzEsNTRdfSx7MjE6WzEsNTVdfSx7MjI6WzIsMzhdfSx7MjI6WzIsMzldfSx7MzM6NTYsNDg6d30sezQ4OlsyLDQyXX0sdChULFsyLDEyXSx7MTI6WzEsNTddfSksezQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDE5OlsxLDU4XSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzptLDMwOjI5LDMxOjYsMzY6diwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHQoVCxbMiwxOF0sezE4OlsxLDU5XX0pLHsyOTpbMSw2MF19LHsyMjpbMSw2MV19LHQoQyxbMiwyOV0pLHQoVCxbMiwxM10pLHQoVCxbMiwxN10pLHQoUyxhLHs4OjYyfSksdChULFsyLDI0XSksdChULFsyLDI1XSksezQ6byw1OnMsNjoyOCw5OjE0LDEwOjE2LDExOjE4LDE0OmMsMTU6dSwxNzpsLDE5OlsxLDYzXSwyMDpoLDIyOmYsMjM6ZCwyNDpwLDI1OnksMjY6ZywyNzptLDMwOjI5LDMxOjYsMzY6diwzNzpiLDM4OngsMzk6Xyw0MjprLDQ1Oml9LHQoVCxbMiwxOV0pXSxkZWZhdWx0QWN0aW9uczp7NzpbMiw0MF0sODpbMiwxXSw5OlsyLDJdLDEwOlsyLDNdLDQ3OlsyLDM4XSw0ODpbMiwzOV0sNTA6WzIsNDJdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sTT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiAzNjtjYXNlIDE6cmV0dXJuIDM3O2Nhc2UgMjpyZXR1cm4gMzg7Y2FzZSAzOnJldHVybiAzOTtjYXNlIDQ6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksNDU7Y2FzZSA1OnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDQ2O2Nhc2UgNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwzNDtjYXNlIDc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksNDg7Y2FzZSA4OnJldHVybiA0NztjYXNlIDk6Y2FzZSAxMDpicmVhaztjYXNlIDExOnJldHVybiA1O2Nhc2UgMTI6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wdXNoU3RhdGUoIlNDQUxFIiksMTU7Y2FzZSAxNzpyZXR1cm4gMTY7Y2FzZSAxODp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxOTp0aGlzLnB1c2hTdGF0ZSgiU1RBVEUiKTticmVhaztjYXNlIDIwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDIzO2Nhc2UgMjE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC04KS50cmltKCksMjQ7Y2FzZSAyMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTEwKS50cmltKCksMjU7Y2FzZSAyMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLGUueXl0ZXh0PWUueXl0ZXh0LnNsaWNlKDAsLTgpLnRyaW0oKSwyMztjYXNlIDI0OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI0O2Nhc2UgMjU6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSxlLnl5dGV4dD1lLnl5dGV4dC5zbGljZSgwLC0xMCkudHJpbSgpLDI1O2Nhc2UgMjY6cmV0dXJuIDM2O2Nhc2UgMjc6cmV0dXJuIDM3O2Nhc2UgMjg6cmV0dXJuIDM4O2Nhc2UgMjk6cmV0dXJuIDM5O2Nhc2UgMzA6dGhpcy5iZWdpbigiU1RBVEVfU1RSSU5HIik7YnJlYWs7Y2FzZSAzMTpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJTVEFURV9JRCIpLCJBUyI7Y2FzZSAzMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSAzMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAzNDpyZXR1cm4iU1RBVEVfREVTQ1IiO2Nhc2UgMzU6cmV0dXJuIDE3O2Nhc2UgMzY6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMzc6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgic3RydWN0IiksMTg7Y2FzZSAzODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDE5O2Nhc2UgMzk6YnJlYWs7Y2FzZSA0MDpyZXR1cm4gdGhpcy5iZWdpbigiTk9URSIpLDI3O2Nhc2UgNDE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDQzO2Nhc2UgNDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnB1c2hTdGF0ZSgiTk9URV9JRCIpLDQ0O2Nhc2UgNDM6dGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFIik7YnJlYWs7Y2FzZSA0NDpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJGTE9BVElOR19OT1RFX0lEIiksIkFTIjtjYXNlIDQ1OmJyZWFrO2Nhc2UgNDY6cmV0dXJuIk5PVEVfVEVYVCI7Y2FzZSA0NzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLCJJRCI7Y2FzZSA0ODpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucHVzaFN0YXRlKCJOT1RFX1RFWFQiKSwyMjtjYXNlIDQ5OnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc3Vic3RyKDIpLnRyaW0oKSwyOTtjYXNlIDUwOnJldHVybiB0aGlzLnBvcFN0YXRlKCksZS55eXRleHQ9ZS55eXRleHQuc2xpY2UoMCwtOCkudHJpbSgpLDI5O2Nhc2UgNTE6Y2FzZSA1MjpyZXR1cm4gNztjYXNlIDUzOnJldHVybiAxNDtjYXNlIDU0OnJldHVybiA0MjtjYXNlIDU1OnJldHVybiAyMjtjYXNlIDU2OnJldHVybiBlLnl5dGV4dD1lLnl5dGV4dC50cmltKCksMTI7Y2FzZSA1NzpyZXR1cm4gMTM7Y2FzZSA1ODpyZXR1cm4gMjY7Y2FzZSA1OTpyZXR1cm4gNTtjYXNlIDYwOnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzolJVx7KS9pLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpL2ksL14oPzo6KS9pLC9eKD86XH0lJSkvaSwvXig/OigoPzooPyFcfSUlKS58XG4pKikpL2ksL14oPzolJSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/Oltcc10rKS9pLC9eKD86KCg/IVxuKVxzKSspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OnNjYWxlXHMrKS9pLC9eKD86XGQrKS9pLC9eKD86XHMrd2lkdGhcYikvaSwvXig/OnN0YXRlXHMrKS9pLC9eKD86Lio8PGZvcms+PikvaSwvXig/Oi4qPDxqb2luPj4pL2ksL14oPzouKjw8Y2hvaWNlPj4pL2ksL14oPzouKlxbXFtmb3JrXF1cXSkvaSwvXig/Oi4qXFtcW2pvaW5cXVxdKS9pLC9eKD86LipcW1xbY2hvaWNlXF1cXSkvaSwvXig/Oi4qZGlyZWN0aW9uXHMrVEJbXlxuXSopL2ksL14oPzouKmRpcmVjdGlvblxzK0JUW15cbl0qKS9pLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvaSwvXig/Oi4qZGlyZWN0aW9uXHMrTFJbXlxuXSopL2ksL14oPzpbIl0pL2ksL14oPzpccyphc1xzKykvaSwvXig/OlteXG5ce10qKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXHNce10rKS9pLC9eKD86XG4pL2ksL14oPzpceykvaSwvXig/Olx9KS9pLC9eKD86W1xuXSkvaSwvXig/Om5vdGVccyspL2ksL14oPzpsZWZ0IG9mXGIpL2ksL14oPzpyaWdodCBvZlxiKS9pLC9eKD86IikvaSwvXig/OlxzKmFzXHMqKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXlxuXSopL2ksL14oPzpccypbXjpcblxzXC1dKykvaSwvXig/OlxzKjpbXjpcbjtdKykvaSwvXig/Oltcc1xTXSo/ZW5kIG5vdGVcYikvaSwvXig/OnN0YXRlRGlhZ3JhbVxzKykvaSwvXig/OnN0YXRlRGlhZ3JhbS12MlxzKykvaSwvXig/OmhpZGUgZW1wdHkgZGVzY3JpcHRpb25cYikvaSwvXig/OlxbXCpcXSkvaSwvXig/OlteOlxuXHNcLVx7XSspL2ksL14oPzpccyo6W146XG47XSspL2ksL14oPzotLT4pL2ksL14oPzotLSkvaSwvXig/OiQpL2ksL14oPzouKS9pXSxjb25kaXRpb25zOntMSU5FOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xvc2VfZGlyZWN0aXZlOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzcsOCwxMywxNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzYsNywxMywxNF0saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzUsMTMsMTRdLGluY2x1c2l2ZTohMX0sc3RydWN0OntydWxlczpbMTMsMTQsMTksMjYsMjcsMjgsMjksMzgsMzksNDAsNTQsNTUsNTYsNTcsNThdLGluY2x1c2l2ZTohMX0sRkxPQVRJTkdfTk9URV9JRDp7cnVsZXM6WzQ3XSxpbmNsdXNpdmU6ITF9LEZMT0FUSU5HX05PVEU6e3J1bGVzOls0NCw0NSw0Nl0saW5jbHVzaXZlOiExfSxOT1RFX1RFWFQ6e3J1bGVzOls0OSw1MF0saW5jbHVzaXZlOiExfSxOT1RFX0lEOntydWxlczpbNDhdLGluY2x1c2l2ZTohMX0sTk9URTp7cnVsZXM6WzQxLDQyLDQzXSxpbmNsdXNpdmU6ITF9LFNDQUxFOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sQUxJQVM6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sU1RBVEVfSUQ6e3J1bGVzOlszMl0saW5jbHVzaXZlOiExfSxTVEFURV9TVFJJTkc6e3J1bGVzOlszMywzNF0saW5jbHVzaXZlOiExfSxGT1JLX1NUQVRFOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LFNUQVRFOntydWxlczpbMTMsMTQsMjAsMjEsMjIsMjMsMjQsMjUsMzAsMzEsMzUsMzYsMzddLGluY2x1c2l2ZTohMX0sSUQ6e3J1bGVzOlsxMywxNF0saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCwxLDIsMyw0LDksMTAsMTEsMTIsMTQsMTUsMTYsMTksMzcsNDAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTksNjBdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiBPKCl7dGhpcy55eT17fX1yZXR1cm4gQS5sZXhlcj1NLE8ucHJvdG90eXBlPUEsQS5QYXJzZXI9TyxuZXcgT30oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTIpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3QuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgZSxyO2Z1bmN0aW9uIGkoKXtyZXR1cm4gZS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGwhPXQmJiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gbCh0LGUpe3ZhciBuLHI9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbilyLnB1c2goZSh0W25dLG4pKTtyZXR1cm4gcn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfWZ1bmN0aW9uIGYodCxlKXtmb3IodmFyIG4gaW4gZSloKGUsbikmJih0W25dPWVbbl0pO3JldHVybiBoKGUsInRvU3RyaW5nIikmJih0LnRvU3RyaW5nPWUudG9TdHJpbmcpLGgoZSwidmFsdWVPZiIpJiYodC52YWx1ZU9mPWUudmFsdWVPZiksdH1mdW5jdGlvbiBkKHQsZSxuLHIpe3JldHVybiBiZSh0LGUsbixyLCEwKS51dGMoKX1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT10Ll9wZiYmKHQuX3BmPXtlbXB0eTohMSx1bnVzZWRUb2tlbnM6W10sdW51c2VkSW5wdXQ6W10sb3ZlcmZsb3c6LTIsY2hhcnNMZWZ0T3ZlcjowLG51bGxJbnB1dDohMSxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSx0Ll9wZn1mdW5jdGlvbiB5KHQpe2lmKG51bGw9PXQuX2lzVmFsaWQpe3ZhciBlPXAodCksbj1yLmNhbGwoZS5wYXJzZWREYXRlUGFydHMsKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10fSkpLGk9IWlzTmFOKHQuX2QuZ2V0VGltZSgpKSYmZS5vdmVyZmxvdzwwJiYhZS5lbXB0eSYmIWUuaW52YWxpZE1vbnRoJiYhZS5pbnZhbGlkV2Vla2RheSYmIWUud2Vla2RheU1pc21hdGNoJiYhZS5udWxsSW5wdXQmJiFlLmludmFsaWRGb3JtYXQmJiFlLnVzZXJJbnZhbGlkYXRlZCYmKCFlLm1lcmlkaWVtfHxlLm1lcmlkaWVtJiZuKTtpZih0Ll9zdHJpY3QmJihpPWkmJjA9PT1lLmNoYXJzTGVmdE92ZXImJjA9PT1lLnVudXNlZFRva2Vucy5sZW5ndGgmJnZvaWQgMD09PWUuYmlnSG91ciksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4odCkpcmV0dXJuIGk7dC5faXNWYWxpZD1pfXJldHVybiB0Ll9pc1ZhbGlkfWZ1bmN0aW9uIGcodCl7dmFyIGU9ZChOYU4pO3JldHVybiBudWxsIT10P2YocChlKSx0KTpwKGUpLnVzZXJJbnZhbGlkYXRlZD0hMCxlfXI9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdCh0aGlzKSxuPWUubGVuZ3RoPj4+MCxyPTA7cjxuO3IrKylpZihyIGluIGUmJnQuY2FsbCh0aGlzLGVbcl0scixlKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIG09aS5tb21lbnRQcm9wZXJ0aWVzPVtdO2Z1bmN0aW9uIHYodCxlKXt2YXIgbixyLGk7aWYocyhlLl9pc0FNb21lbnRPYmplY3QpfHwodC5faXNBTW9tZW50T2JqZWN0PWUuX2lzQU1vbWVudE9iamVjdCkscyhlLl9pKXx8KHQuX2k9ZS5faSkscyhlLl9mKXx8KHQuX2Y9ZS5fZikscyhlLl9sKXx8KHQuX2w9ZS5fbCkscyhlLl9zdHJpY3QpfHwodC5fc3RyaWN0PWUuX3N0cmljdCkscyhlLl90em0pfHwodC5fdHptPWUuX3R6bSkscyhlLl9pc1VUQyl8fCh0Ll9pc1VUQz1lLl9pc1VUQykscyhlLl9vZmZzZXQpfHwodC5fb2Zmc2V0PWUuX29mZnNldCkscyhlLl9wZil8fCh0Ll9wZj1wKGUpKSxzKGUuX2xvY2FsZSl8fCh0Ll9sb2NhbGU9ZS5fbG9jYWxlKSwwPG0ubGVuZ3RoKWZvcihuPTA7bjxtLmxlbmd0aDtuKyspcyhpPWVbcj1tW25dXSl8fCh0W3JdPWkpO3JldHVybiB0fXZhciBiPSExO2Z1bmN0aW9uIHgodCl7dih0aGlzLHQpLHRoaXMuX2Q9bmV3IERhdGUobnVsbCE9dC5fZD90Ll9kLmdldFRpbWUoKTpOYU4pLHRoaXMuaXNWYWxpZCgpfHwodGhpcy5fZD1uZXcgRGF0ZShOYU4pKSwhMT09PWImJihiPSEwLGkudXBkYXRlT2Zmc2V0KHRoaXMpLGI9ITEpfWZ1bmN0aW9uIF8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB4fHxudWxsIT10JiZudWxsIT10Ll9pc0FNb21lbnRPYmplY3R9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdDwwP01hdGguY2VpbCh0KXx8MDpNYXRoLmZsb29yKHQpfWZ1bmN0aW9uIHcodCl7dmFyIGU9K3Qsbj0wO3JldHVybiAwIT09ZSYmaXNGaW5pdGUoZSkmJihuPWsoZSkpLG59ZnVuY3Rpb24gVCh0LGUsbil7dmFyIHIsaT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksYT1NYXRoLmFicyh0Lmxlbmd0aC1lLmxlbmd0aCksbz0wO2ZvcihyPTA7cjxpO3IrKykobiYmdFtyXSE9PWVbcl18fCFuJiZ3KHRbcl0pIT09dyhlW3JdKSkmJm8rKztyZXR1cm4gbythfWZ1bmN0aW9uIEUodCl7ITE9PT1pLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyYmInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIit0KX1mdW5jdGlvbiBDKHQsZSl7dmFyIG49ITA7cmV0dXJuIGYoKGZ1bmN0aW9uKCl7aWYobnVsbCE9aS5kZXByZWNhdGlvbkhhbmRsZXImJmkuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsdCksbil7Zm9yKHZhciByLGE9W10sbz0wO288YXJndW1lbnRzLmxlbmd0aDtvKyspe2lmKHI9IiIsIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbb10pe2Zvcih2YXIgcyBpbiByKz0iXG5bIitvKyJdICIsYXJndW1lbnRzWzBdKXIrPXMrIjogIithcmd1bWVudHNbMF1bc10rIiwgIjtyPXIuc2xpY2UoMCwtMil9ZWxzZSByPWFyZ3VtZW50c1tvXTthLnB1c2gocil9RSh0KyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhKS5qb2luKCIiKSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxuPSExfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGUpfXZhciBTLEE9e307ZnVuY3Rpb24gTSh0LGUpe251bGwhPWkuZGVwcmVjYXRpb25IYW5kbGVyJiZpLmRlcHJlY2F0aW9uSGFuZGxlcih0LGUpLEFbdF18fChFKGUpLEFbdF09ITApfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBOKHQsZSl7dmFyIG4scj1mKHt9LHQpO2ZvcihuIGluIGUpaChlLG4pJiYobyh0W25dKSYmbyhlW25dKT8ocltuXT17fSxmKHJbbl0sdFtuXSksZihyW25dLGVbbl0pKTpudWxsIT1lW25dP3Jbbl09ZVtuXTpkZWxldGUgcltuXSk7Zm9yKG4gaW4gdCloKHQsbikmJiFoKGUsbikmJm8odFtuXSkmJihyW25dPWYoe30scltuXSkpO3JldHVybiByfWZ1bmN0aW9uIEIodCl7bnVsbCE9dCYmdGhpcy5zZXQodCl9aS5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEsaS5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxTPU9iamVjdC5rZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKHQpe3ZhciBlLG49W107Zm9yKGUgaW4gdCloKHQsZSkmJm4ucHVzaChlKTtyZXR1cm4gbn07dmFyIEQ9e307ZnVuY3Rpb24gTCh0LGUpe3ZhciBuPXQudG9Mb3dlckNhc2UoKTtEW25dPURbbisicyJdPURbZV09dH1mdW5jdGlvbiBJKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdD9EW3RdfHxEW3QudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIFIodCl7dmFyIGUsbixyPXt9O2ZvcihuIGluIHQpaCh0LG4pJiYoZT1JKG4pKSYmKHJbZV09dFtuXSk7cmV0dXJuIHJ9dmFyIEY9e307ZnVuY3Rpb24gUCh0LGUpe0ZbdF09ZX1mdW5jdGlvbiBqKHQsZSxuKXt2YXIgcj0iIitNYXRoLmFicyh0KSxpPWUtci5sZW5ndGg7cmV0dXJuKDA8PXQ/bj8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLGkpKS50b1N0cmluZygpLnN1YnN0cigxKStyfXZhciBZPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fFlZWVlZWXxZWVlZWXxZWVlZfFlZfGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLHo9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csVT17fSwkPXt9O2Z1bmN0aW9uIHEodCxlLG4scil7dmFyIGk9cjsic3RyaW5nIj09dHlwZW9mIHImJihpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbcl0oKX0pLHQmJigkW3RdPWkpLGUmJigkW2VbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGooaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZVsxXSxlWzJdKX0pLG4mJigkW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoaS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdCl9KX1mdW5jdGlvbiBXKHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpPyhlPUgoZSx0LmxvY2FsZURhdGEoKSksVVtlXT1VW2VdfHxmdW5jdGlvbih0KXt2YXIgZSxuLHIsaT10Lm1hdGNoKFkpO2ZvcihlPTAsbj1pLmxlbmd0aDtlPG47ZSsrKSRbaVtlXV0/aVtlXT0kW2lbZV1dOmlbZV09KHI9aVtlXSkubWF0Y2goL1xbW1xzXFNdLyk/ci5yZXBsYWNlKC9eXFt8XF0kL2csIiIpOnIucmVwbGFjZSgvXFwvZywiIik7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByLGE9IiI7Zm9yKHI9MDtyPG47cisrKWErPU8oaVtyXSk/aVtyXS5jYWxsKGUsdCk6aVtyXTtyZXR1cm4gYX19KGUpLFVbZV0odCkpOnQubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gSCh0LGUpe3ZhciBuPTU7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZS5sb25nRGF0ZUZvcm1hdCh0KXx8dH1mb3Ioei5sYXN0SW5kZXg9MDswPD1uJiZ6LnRlc3QodCk7KXQ9dC5yZXBsYWNlKHosciksei5sYXN0SW5kZXg9MCxuLT0xO3JldHVybiB0fXZhciBWPS9cZC8sRz0vXGRcZC8sWD0vXGR7M30vLFo9L1xkezR9LyxLPS9bKy1dP1xkezZ9LyxRPS9cZFxkPy8sSj0vXGRcZFxkXGQ/Lyx0dD0vXGRcZFxkXGRcZFxkPy8sZXQ9L1xkezEsM30vLG50PS9cZHsxLDR9LyxydD0vWystXT9cZHsxLDZ9LyxpdD0vXGQrLyxhdD0vWystXT9cZCsvLG90PS9afFsrLV1cZFxkOj9cZFxkL2dpLHN0PS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vZ2ksY3Q9L1swLTldezAsMjU2fVsnYS16XHUwMEEwLVx1MDVGRlx1MDcwMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkYwN1x1RkYxMC1cdUZGRUZdezEsMjU2fXxbXHUwNjAwLVx1MDZGRlwvXXsxLDI1Nn0oXHMqP1tcdTA2MDAtXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSx1dD17fTtmdW5jdGlvbiBsdCh0LGUsbil7dXRbdF09TyhlKT9lOmZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJm4/bjplfX1mdW5jdGlvbiBodCh0LGUpe3JldHVybiBoKHV0LHQpP3V0W3RdKGUuX3N0cmljdCxlLl9sb2NhbGUpOm5ldyBSZWdFeHAoZnQodC5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZywoZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gZXx8bnx8cnx8aX0pKSkpfWZ1bmN0aW9uIGZ0KHQpe3JldHVybiB0LnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9dmFyIGR0PXt9O2Z1bmN0aW9uIHB0KHQsZSl7dmFyIG4scj1lO2Zvcigic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSksYyhlKSYmKHI9ZnVuY3Rpb24odCxuKXtuW2VdPXcodCl9KSxuPTA7bjx0Lmxlbmd0aDtuKyspZHRbdFtuXV09cn1mdW5jdGlvbiB5dCh0LGUpe3B0KHQsKGZ1bmN0aW9uKHQsbixyLGkpe3IuX3c9ci5fd3x8e30sZSh0LHIuX3cscixpKX0pKX1mdW5jdGlvbiBndCh0KXtyZXR1cm4gbXQodCk/MzY2OjM2NX1mdW5jdGlvbiBtdCh0KXtyZXR1cm4gdCU0PT0wJiZ0JTEwMCE9MHx8dCU0MDA9PTB9cSgiWSIsMCwwLChmdW5jdGlvbigpe3ZhciB0PXRoaXMueWVhcigpO3JldHVybiB0PD05OTk5PyIiK3Q6IisiK3R9KSkscSgwLFsiWVkiLDJdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pKSxxKDAsWyJZWVlZIiw0XSwwLCJ5ZWFyIikscSgwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxxKDAsWyJZWVlZWVkiLDYsITBdLDAsInllYXIiKSxMKCJ5ZWFyIiwieSIpLFAoInllYXIiLDEpLGx0KCJZIixhdCksbHQoIllZIixRLEcpLGx0KCJZWVlZIixudCxaKSxsdCgiWVlZWVkiLHJ0LEspLGx0KCJZWVlZWVkiLHJ0LEspLHB0KFsiWVlZWVkiLCJZWVlZWVkiXSwwKSxwdCgiWVlZWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT0yPT09dC5sZW5ndGg/aS5wYXJzZVR3b0RpZ2l0WWVhcih0KTp3KHQpfSkpLHB0KCJZWSIsKGZ1bmN0aW9uKHQsZSl7ZVswXT1pLnBhcnNlVHdvRGlnaXRZZWFyKHQpfSkpLHB0KCJZIiwoZnVuY3Rpb24odCxlKXtlWzBdPXBhcnNlSW50KHQsMTApfSkpLGkucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24odCl7cmV0dXJuIHcodCkrKDY4PHcodCk/MTkwMDoyZTMpfTt2YXIgdnQsYnQ9eHQoIkZ1bGxZZWFyIiwhMCk7ZnVuY3Rpb24geHQodCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4/KGt0KHRoaXMsdCxuKSxpLnVwZGF0ZU9mZnNldCh0aGlzLGUpLHRoaXMpOl90KHRoaXMsdCl9fWZ1bmN0aW9uIF90KHQsZSl7cmV0dXJuIHQuaXNWYWxpZCgpP3QuX2RbImdldCIrKHQuX2lzVVRDPyJVVEMiOiIiKStlXSgpOk5hTn1mdW5jdGlvbiBrdCh0LGUsbil7dC5pc1ZhbGlkKCkmJiFpc05hTihuKSYmKCJGdWxsWWVhciI9PT1lJiZtdCh0LnllYXIoKSkmJjE9PT10Lm1vbnRoKCkmJjI5PT09dC5kYXRlKCk/dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKG4sdC5tb250aCgpLHd0KG4sdC5tb250aCgpKSk6dC5fZFsic2V0IisodC5faXNVVEM/IlVUQyI6IiIpK2VdKG4pKX1mdW5jdGlvbiB3dCh0LGUpe2lmKGlzTmFOKHQpfHxpc05hTihlKSlyZXR1cm4gTmFOO3ZhciBuPShlJTEyKzEyKSUxMjtyZXR1cm4gdCs9KGUtbikvMTIsMT09PW4/bXQodCk/Mjk6Mjg6MzEtbiU3JTJ9dnQ9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/QXJyYXkucHJvdG90eXBlLmluZGV4T2Y6ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoOysrZSlpZih0aGlzW2VdPT09dClyZXR1cm4gZTtyZXR1cm4tMX0scSgiTSIsWyJNTSIsMl0sIk1vIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb250aCgpKzF9KSkscSgiTU1NIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLHQpfSkpLHEoIk1NTU0iLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLHQpfSkpLEwoIm1vbnRoIiwiTSIpLFAoIm1vbnRoIiw4KSxsdCgiTSIsUSksbHQoIk1NIixRLEcpLGx0KCJNTU0iLChmdW5jdGlvbih0LGUpe3JldHVybiBlLm1vbnRoc1Nob3J0UmVnZXgodCl9KSksbHQoIk1NTU0iLChmdW5jdGlvbih0LGUpe3JldHVybiBlLm1vbnRoc1JlZ2V4KHQpfSkpLHB0KFsiTSIsIk1NIl0sKGZ1bmN0aW9uKHQsZSl7ZVsxXT13KHQpLTF9KSkscHQoWyJNTU0iLCJNTU1NIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4uX2xvY2FsZS5tb250aHNQYXJzZSh0LHIsbi5fc3RyaWN0KTtudWxsIT1pP2VbMV09aTpwKG4pLmludmFsaWRNb250aD10fSkpO3ZhciBUdD0vRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT8vLEV0PSJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLEN0PSJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKTtmdW5jdGlvbiBTdCh0LGUpe3ZhciBuO2lmKCF0LmlzVmFsaWQoKSlyZXR1cm4gdDtpZigic3RyaW5nIj09dHlwZW9mIGUpaWYoL15cZCskLy50ZXN0KGUpKWU9dyhlKTtlbHNlIGlmKCFjKGU9dC5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UoZSkpKXJldHVybiB0O3JldHVybiBuPU1hdGgubWluKHQuZGF0ZSgpLHd0KHQueWVhcigpLGUpKSx0Ll9kWyJzZXQiKyh0Ll9pc1VUQz8iVVRDIjoiIikrIk1vbnRoIl0oZSxuKSx0fWZ1bmN0aW9uIEF0KHQpe3JldHVybiBudWxsIT10PyhTdCh0aGlzLHQpLGkudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMpOl90KHRoaXMsIk1vbnRoIil9dmFyIE10PWN0LE90PWN0O2Z1bmN0aW9uIE50KCl7ZnVuY3Rpb24gdCh0LGUpe3JldHVybiBlLmxlbmd0aC10Lmxlbmd0aH12YXIgZSxuLHI9W10saT1bXSxhPVtdO2ZvcihlPTA7ZTwxMjtlKyspbj1kKFsyZTMsZV0pLHIucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG4sIiIpKSxpLnB1c2godGhpcy5tb250aHMobiwiIikpLGEucHVzaCh0aGlzLm1vbnRocyhuLCIiKSksYS5wdXNoKHRoaXMubW9udGhzU2hvcnQobiwiIikpO2ZvcihyLnNvcnQodCksaS5zb3J0KHQpLGEuc29ydCh0KSxlPTA7ZTwxMjtlKyspcltlXT1mdChyW2VdKSxpW2VdPWZ0KGlbZV0pO2ZvcihlPTA7ZTwyNDtlKyspYVtlXT1mdChhW2VdKTt0aGlzLl9tb250aHNSZWdleD1uZXcgUmVnRXhwKCJeKCIrYS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIraS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrci5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gQnQodCl7dmFyIGU7aWYodDwxMDAmJjA8PXQpe3ZhciBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7blswXT10KzQwMCxlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsbikpLGlzRmluaXRlKGUuZ2V0VVRDRnVsbFllYXIoKSkmJmUuc2V0VVRDRnVsbFllYXIodCl9ZWxzZSBlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsYXJndW1lbnRzKSk7cmV0dXJuIGV9ZnVuY3Rpb24gRHQodCxlLG4pe3ZhciByPTcrZS1uO3JldHVybi0oNytCdCh0LDAscikuZ2V0VVRDRGF5KCktZSklNytyLTF9ZnVuY3Rpb24gTHQodCxlLG4scixpKXt2YXIgYSxvLHM9MSs3KihlLTEpKyg3K24tciklNytEdCh0LHIsaSk7cmV0dXJuIG89czw9MD9ndChhPXQtMSkrczpzPmd0KHQpPyhhPXQrMSxzLWd0KHQpKTooYT10LHMpLHt5ZWFyOmEsZGF5T2ZZZWFyOm99fWZ1bmN0aW9uIEl0KHQsZSxuKXt2YXIgcixpLGE9RHQodC55ZWFyKCksZSxuKSxvPU1hdGguZmxvb3IoKHQuZGF5T2ZZZWFyKCktYS0xKS83KSsxO3JldHVybiBvPDE/cj1vK1J0KGk9dC55ZWFyKCktMSxlLG4pOm8+UnQodC55ZWFyKCksZSxuKT8ocj1vLVJ0KHQueWVhcigpLGUsbiksaT10LnllYXIoKSsxKTooaT10LnllYXIoKSxyPW8pLHt3ZWVrOnIseWVhcjppfX1mdW5jdGlvbiBSdCh0LGUsbil7dmFyIHI9RHQodCxlLG4pLGk9RHQodCsxLGUsbik7cmV0dXJuKGd0KHQpLXIraSkvN31mdW5jdGlvbiBGdCh0LGUpe3JldHVybiB0LnNsaWNlKGUsNykuY29uY2F0KHQuc2xpY2UoMCxlKSl9cSgidyIsWyJ3dyIsMl0sIndvIiwid2VlayIpLHEoIlciLFsiV1ciLDJdLCJXbyIsImlzb1dlZWsiKSxMKCJ3ZWVrIiwidyIpLEwoImlzb1dlZWsiLCJXIiksUCgid2VlayIsNSksUCgiaXNvV2VlayIsNSksbHQoInciLFEpLGx0KCJ3dyIsUSxHKSxsdCgiVyIsUSksbHQoIldXIixRLEcpLHl0KFsidyIsInd3IiwiVyIsIldXIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbci5zdWJzdHIoMCwxKV09dyh0KX0pKSxxKCJkIiwwLCJkbyIsImRheSIpLHEoImRkIiwwLDAsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLHQpfSkpLHEoImRkZCIsMCwwLChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLHQpfSkpLHEoImRkZGQiLDAsMCwoZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsdCl9KSkscSgiZSIsMCwwLCJ3ZWVrZGF5IikscSgiRSIsMCwwLCJpc29XZWVrZGF5IiksTCgiZGF5IiwiZCIpLEwoIndlZWtkYXkiLCJlIiksTCgiaXNvV2Vla2RheSIsIkUiKSxQKCJkYXkiLDExKSxQKCJ3ZWVrZGF5IiwxMSksUCgiaXNvV2Vla2RheSIsMTEpLGx0KCJkIixRKSxsdCgiZSIsUSksbHQoIkUiLFEpLGx0KCJkZCIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2Vla2RheXNNaW5SZWdleCh0KX0pKSxsdCgiZGRkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWVrZGF5c1Nob3J0UmVnZXgodCl9KSksbHQoImRkZGQiLChmdW5jdGlvbih0LGUpe3JldHVybiBlLndlZWtkYXlzUmVnZXgodCl9KSkseXQoWyJkZCIsImRkZCIsImRkZGQiXSwoZnVuY3Rpb24odCxlLG4scil7dmFyIGk9bi5fbG9jYWxlLndlZWtkYXlzUGFyc2UodCxyLG4uX3N0cmljdCk7bnVsbCE9aT9lLmQ9aTpwKG4pLmludmFsaWRXZWVrZGF5PXR9KSkseXQoWyJkIiwiZSIsIkUiXSwoZnVuY3Rpb24odCxlLG4scil7ZVtyXT13KHQpfSkpO3ZhciBQdD0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksanQ9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSxZdD0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksenQ9Y3QsVXQ9Y3QsJHQ9Y3Q7ZnVuY3Rpb24gcXQoKXtmdW5jdGlvbiB0KHQsZSl7cmV0dXJuIGUubGVuZ3RoLXQubGVuZ3RofXZhciBlLG4scixpLGEsbz1bXSxzPVtdLGM9W10sdT1bXTtmb3IoZT0wO2U8NztlKyspbj1kKFsyZTMsMV0pLmRheShlKSxyPXRoaXMud2Vla2RheXNNaW4obiwiIiksaT10aGlzLndlZWtkYXlzU2hvcnQobiwiIiksYT10aGlzLndlZWtkYXlzKG4sIiIpLG8ucHVzaChyKSxzLnB1c2goaSksYy5wdXNoKGEpLHUucHVzaChyKSx1LnB1c2goaSksdS5wdXNoKGEpO2ZvcihvLnNvcnQodCkscy5zb3J0KHQpLGMuc29ydCh0KSx1LnNvcnQodCksZT0wO2U8NztlKyspc1tlXT1mdChzW2VdKSxjW2VdPWZ0KGNbZV0pLHVbZV09ZnQodVtlXSk7dGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrdS5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4LHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2Muam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcy5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrby5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gV3QoKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBIdCh0LGUpe3EodCwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKHRoaXMuaG91cnMoKSx0aGlzLm1pbnV0ZXMoKSxlKX0pKX1mdW5jdGlvbiBWdCh0LGUpe3JldHVybiBlLl9tZXJpZGllbVBhcnNlfXEoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxxKCJoIixbImhoIiwyXSwwLFd0KSxxKCJrIixbImtrIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fSkpLHEoImhtbSIsMCwwLChmdW5jdGlvbigpe3JldHVybiIiK1d0LmFwcGx5KHRoaXMpK2oodGhpcy5taW51dGVzKCksMil9KSkscSgiaG1tc3MiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIitXdC5hcHBseSh0aGlzKStqKHRoaXMubWludXRlcygpLDIpK2oodGhpcy5zZWNvbmRzKCksMil9KSkscSgiSG1tIiwwLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK2oodGhpcy5taW51dGVzKCksMil9KSkscSgiSG1tc3MiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkraih0aGlzLm1pbnV0ZXMoKSwyKStqKHRoaXMuc2Vjb25kcygpLDIpfSkpLEh0KCJhIiwhMCksSHQoIkEiLCExKSxMKCJob3VyIiwiaCIpLFAoImhvdXIiLDEzKSxsdCgiYSIsVnQpLGx0KCJBIixWdCksbHQoIkgiLFEpLGx0KCJoIixRKSxsdCgiayIsUSksbHQoIkhIIixRLEcpLGx0KCJoaCIsUSxHKSxsdCgia2siLFEsRyksbHQoImhtbSIsSiksbHQoImhtbXNzIix0dCksbHQoIkhtbSIsSiksbHQoIkhtbXNzIix0dCkscHQoWyJIIiwiSEgiXSwzKSxwdChbImsiLCJrayJdLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dyh0KTtlWzNdPTI0PT09cj8wOnJ9KSkscHQoWyJhIiwiQSJdLChmdW5jdGlvbih0LGUsbil7bi5faXNQbT1uLl9sb2NhbGUuaXNQTSh0KSxuLl9tZXJpZGllbT10fSkpLHB0KFsiaCIsImhoIl0sKGZ1bmN0aW9uKHQsZSxuKXtlWzNdPXcodCkscChuKS5iaWdIb3VyPSEwfSkpLHB0KCJobW0iLChmdW5jdGlvbih0LGUsbil7dmFyIHI9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIpKSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoImhtbXNzIiwoZnVuY3Rpb24odCxlLG4pe3ZhciByPXQubGVuZ3RoLTQsaT10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIociwyKSksZVs1XT13KHQuc3Vic3RyKGkpKSxwKG4pLmJpZ0hvdXI9ITB9KSkscHQoIkhtbSIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC0yO2VbM109dyh0LnN1YnN0cigwLHIpKSxlWzRdPXcodC5zdWJzdHIocikpfSkpLHB0KCJIbW1zcyIsKGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmxlbmd0aC00LGk9dC5sZW5ndGgtMjtlWzNdPXcodC5zdWJzdHIoMCxyKSksZVs0XT13KHQuc3Vic3RyKHIsMikpLGVbNV09dyh0LnN1YnN0cihpKSl9KSk7dmFyIEd0LFh0PXh0KCJIb3VycyIsITApLFp0PXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6IkludmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxtb250aHM6RXQsbW9udGhzU2hvcnQ6Q3Qsd2Vlazp7ZG93OjAsZG95OjZ9LHdlZWtkYXlzOlB0LHdlZWtkYXlzTWluOll0LHdlZWtkYXlzU2hvcnQ6anQsbWVyaWRpZW1QYXJzZTovW2FwXVwuP20/XC4/L2l9LEt0PXt9LFF0PXt9O2Z1bmN0aW9uIEp0KHQpe3JldHVybiB0P3QudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCJfIiwiLSIpOnR9ZnVuY3Rpb24gdGUoZSl7dmFyIHI9bnVsbDtpZighS3RbZV0mJnZvaWQgMCE9PXQmJnQmJnQuZXhwb3J0cyl0cnl7cj1HdC5fYWJicixuKDIwMikoIi4vIitlKSxlZShyKX1jYXRjaChlKXt9cmV0dXJuIEt0W2VdfWZ1bmN0aW9uIGVlKHQsZSl7dmFyIG47cmV0dXJuIHQmJigobj1zKGUpP3JlKHQpOm5lKHQsZSkpP0d0PW46InVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiTG9jYWxlICIrdCsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSksR3QuX2FiYnJ9ZnVuY3Rpb24gbmUodCxlKXtpZihudWxsPT09ZSlyZXR1cm4gZGVsZXRlIEt0W3RdLG51bGw7dmFyIG4scj1adDtpZihlLmFiYnI9dCxudWxsIT1LdFt0XSlNKCJkZWZpbmVMb2NhbGVPdmVycmlkZSIsInVzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlIGFuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLiIpLHI9S3RbdF0uX2NvbmZpZztlbHNlIGlmKG51bGwhPWUucGFyZW50TG9jYWxlKWlmKG51bGwhPUt0W2UucGFyZW50TG9jYWxlXSlyPUt0W2UucGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7aWYobnVsbD09KG49dGUoZS5wYXJlbnRMb2NhbGUpKSlyZXR1cm4gUXRbZS5wYXJlbnRMb2NhbGVdfHwoUXRbZS5wYXJlbnRMb2NhbGVdPVtdKSxRdFtlLnBhcmVudExvY2FsZV0ucHVzaCh7bmFtZTp0LGNvbmZpZzplfSksbnVsbDtyPW4uX2NvbmZpZ31yZXR1cm4gS3RbdF09bmV3IEIoTihyLGUpKSxRdFt0XSYmUXRbdF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7bmUodC5uYW1lLHQuY29uZmlnKX0pKSxlZSh0KSxLdFt0XX1mdW5jdGlvbiByZSh0KXt2YXIgZTtpZih0JiZ0Ll9sb2NhbGUmJnQuX2xvY2FsZS5fYWJiciYmKHQ9dC5fbG9jYWxlLl9hYmJyKSwhdClyZXR1cm4gR3Q7aWYoIWEodCkpe2lmKGU9dGUodCkpcmV0dXJuIGU7dD1bdF19cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuLHIsaSxhPTA7YTx0Lmxlbmd0aDspe2ZvcihlPShpPUp0KHRbYV0pLnNwbGl0KCItIikpLmxlbmd0aCxuPShuPUp0KHRbYSsxXSkpP24uc3BsaXQoIi0iKTpudWxsOzA8ZTspe2lmKHI9dGUoaS5zbGljZSgwLGUpLmpvaW4oIi0iKSkpcmV0dXJuIHI7aWYobiYmbi5sZW5ndGg+PWUmJlQoaSxuLCEwKT49ZS0xKWJyZWFrO2UtLX1hKyt9cmV0dXJuIEd0fSh0KX1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuPXQuX2E7cmV0dXJuIG4mJi0yPT09cCh0KS5vdmVyZmxvdyYmKGU9blsxXTwwfHwxMTxuWzFdPzE6blsyXTwxfHxuWzJdPnd0KG5bMF0sblsxXSk/MjpuWzNdPDB8fDI0PG5bM118fDI0PT09blszXSYmKDAhPT1uWzRdfHwwIT09bls1XXx8MCE9PW5bNl0pPzM6bls0XTwwfHw1OTxuWzRdPzQ6bls1XTwwfHw1OTxuWzVdPzU6bls2XTwwfHw5OTk8bls2XT82Oi0xLHAodCkuX292ZXJmbG93RGF5T2ZZZWFyJiYoZTwwfHwyPGUpJiYoZT0yKSxwKHQpLl9vdmVyZmxvd1dlZWtzJiYtMT09PWUmJihlPTcpLHAodCkuX292ZXJmbG93V2Vla2RheSYmLTE9PT1lJiYoZT04KSxwKHQpLm92ZXJmbG93PWUpLHR9ZnVuY3Rpb24gYWUodCxlLG4pe3JldHVybiBudWxsIT10P3Q6bnVsbCE9ZT9lOm59ZnVuY3Rpb24gb2UodCl7dmFyIGUsbixyLGEsbyxzPVtdO2lmKCF0Ll9kKXt2YXIgYyx1O2ZvcihjPXQsdT1uZXcgRGF0ZShpLm5vdygpKSxyPWMuX3VzZVVUQz9bdS5nZXRVVENGdWxsWWVhcigpLHUuZ2V0VVRDTW9udGgoKSx1LmdldFVUQ0RhdGUoKV06W3UuZ2V0RnVsbFllYXIoKSx1LmdldE1vbnRoKCksdS5nZXREYXRlKCldLHQuX3cmJm51bGw9PXQuX2FbMl0mJm51bGw9PXQuX2FbMV0mJmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLGEsbyxzLGM7aWYobnVsbCE9KGU9dC5fdykuR0d8fG51bGwhPWUuV3x8bnVsbCE9ZS5FKWE9MSxvPTQsbj1hZShlLkdHLHQuX2FbMF0sSXQoeGUoKSwxLDQpLnllYXIpLHI9YWUoZS5XLDEpLCgoaT1hZShlLkUsMSkpPDF8fDc8aSkmJihjPSEwKTtlbHNle2E9dC5fbG9jYWxlLl93ZWVrLmRvdyxvPXQuX2xvY2FsZS5fd2Vlay5kb3k7dmFyIHU9SXQoeGUoKSxhLG8pO249YWUoZS5nZyx0Ll9hWzBdLHUueWVhcikscj1hZShlLncsdS53ZWVrKSxudWxsIT1lLmQ/KChpPWUuZCk8MHx8NjxpKSYmKGM9ITApOm51bGwhPWUuZT8oaT1lLmUrYSwoZS5lPDB8fDY8ZS5lKSYmKGM9ITApKTppPWF9cjwxfHxyPlJ0KG4sYSxvKT9wKHQpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPWM/cCh0KS5fb3ZlcmZsb3dXZWVrZGF5PSEwOihzPUx0KG4scixpLGEsbyksdC5fYVswXT1zLnllYXIsdC5fZGF5T2ZZZWFyPXMuZGF5T2ZZZWFyKX0odCksbnVsbCE9dC5fZGF5T2ZZZWFyJiYobz1hZSh0Ll9hWzBdLHJbMF0pLCh0Ll9kYXlPZlllYXI+Z3Qobyl8fDA9PT10Ll9kYXlPZlllYXIpJiYocCh0KS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLG49QnQobywwLHQuX2RheU9mWWVhciksdC5fYVsxXT1uLmdldFVUQ01vbnRoKCksdC5fYVsyXT1uLmdldFVUQ0RhdGUoKSksZT0wO2U8MyYmbnVsbD09dC5fYVtlXTsrK2UpdC5fYVtlXT1zW2VdPXJbZV07Zm9yKDtlPDc7ZSsrKXQuX2FbZV09c1tlXT1udWxsPT10Ll9hW2VdPzI9PT1lPzE6MDp0Ll9hW2VdOzI0PT09dC5fYVszXSYmMD09PXQuX2FbNF0mJjA9PT10Ll9hWzVdJiYwPT09dC5fYVs2XSYmKHQuX25leHREYXk9ITAsdC5fYVszXT0wKSx0Ll9kPSh0Ll91c2VVVEM/QnQ6ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM7cmV0dXJuIHQ8MTAwJiYwPD10PyhzPW5ldyBEYXRlKHQrNDAwLGUsbixyLGksYSxvKSxpc0Zpbml0ZShzLmdldEZ1bGxZZWFyKCkpJiZzLnNldEZ1bGxZZWFyKHQpKTpzPW5ldyBEYXRlKHQsZSxuLHIsaSxhLG8pLHN9KS5hcHBseShudWxsLHMpLGE9dC5fdXNlVVRDP3QuX2QuZ2V0VVRDRGF5KCk6dC5fZC5nZXREYXkoKSxudWxsIT10Ll90em0mJnQuX2Quc2V0VVRDTWludXRlcyh0Ll9kLmdldFVUQ01pbnV0ZXMoKS10Ll90em0pLHQuX25leHREYXkmJih0Ll9hWzNdPTI0KSx0Ll93JiZ2b2lkIDAhPT10Ll93LmQmJnQuX3cuZCE9PWEmJihwKHQpLndlZWtkYXlNaXNtYXRjaD0hMCl9fXZhciBzZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pLSg/OlxkXGQtXGRcZHxXXGRcZC1cZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OjpcZFxkKD86OlxkXGQoPzpbLixdXGQrKT8pPyk/KShbXCtcLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxjZT0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pKD86XGRcZFxkXGR8V1xkXGRcZHxXXGRcZHxcZFxkXGR8XGRcZCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoW1wrXC1dXGRcZCg/Ojo/XGRcZCk/fFxzKlopPyk/JC8sdWU9L1p8WystXVxkXGQoPzo6P1xkXGQpPy8sbGU9W1siWVlZWVlZLU1NLUREIiwvWystXVxkezZ9LVxkXGQtXGRcZC9dLFsiWVlZWS1NTS1ERCIsL1xkezR9LVxkXGQtXGRcZC9dLFsiR0dHRy1bV11XVy1FIiwvXGR7NH0tV1xkXGQtXGQvXSxbIkdHR0ctW1ddV1ciLC9cZHs0fS1XXGRcZC8sITFdLFsiWVlZWS1EREQiLC9cZHs0fS1cZHszfS9dLFsiWVlZWS1NTSIsL1xkezR9LVxkXGQvLCExXSxbIllZWVlZWU1NREQiLC9bKy1dXGR7MTB9L10sWyJZWVlZTU1ERCIsL1xkezh9L10sWyJHR0dHW1ddV1dFIiwvXGR7NH1XXGR7M30vXSxbIkdHR0dbV11XVyIsL1xkezR9V1xkezJ9LywhMV0sWyJZWVlZREREIiwvXGR7N30vXV0saGU9W1siSEg6bW06c3MuU1NTUyIsL1xkXGQ6XGRcZDpcZFxkXC5cZCsvXSxbIkhIOm1tOnNzLFNTU1MiLC9cZFxkOlxkXGQ6XGRcZCxcZCsvXSxbIkhIOm1tOnNzIiwvXGRcZDpcZFxkOlxkXGQvXSxbIkhIOm1tIiwvXGRcZDpcZFxkL10sWyJISG1tc3MuU1NTUyIsL1xkXGRcZFxkXGRcZFwuXGQrL10sWyJISG1tc3MsU1NTUyIsL1xkXGRcZFxkXGRcZCxcZCsvXSxbIkhIbW1zcyIsL1xkXGRcZFxkXGRcZC9dLFsiSEhtbSIsL1xkXGRcZFxkL10sWyJISCIsL1xkXGQvXV0sZmU9L15cLz9EYXRlXCgoXC0/XGQrKS9pO2Z1bmN0aW9uIGRlKHQpe3ZhciBlLG4scixpLGEsbyxzPXQuX2ksYz1zZS5leGVjKHMpfHxjZS5leGVjKHMpO2lmKGMpe2ZvcihwKHQpLmlzbz0hMCxlPTAsbj1sZS5sZW5ndGg7ZTxuO2UrKylpZihsZVtlXVsxXS5leGVjKGNbMV0pKXtpPWxlW2VdWzBdLHI9ITEhPT1sZVtlXVsyXTticmVha31pZihudWxsPT1pKXJldHVybiB2b2lkKHQuX2lzVmFsaWQ9ITEpO2lmKGNbM10pe2ZvcihlPTAsbj1oZS5sZW5ndGg7ZTxuO2UrKylpZihoZVtlXVsxXS5leGVjKGNbM10pKXthPShjWzJdfHwiICIpK2hlW2VdWzBdO2JyZWFrfWlmKG51bGw9PWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSl9aWYoIXImJm51bGwhPWEpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7aWYoY1s0XSl7aWYoIXVlLmV4ZWMoY1s0XSkpcmV0dXJuIHZvaWQodC5faXNWYWxpZD0hMSk7bz0iWiJ9dC5fZj1pKyhhfHwiIikrKG98fCIiKSxtZSh0KX1lbHNlIHQuX2lzVmFsaWQ9ITF9dmFyIHBlPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLHllPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBnZSh0KXt2YXIgZSxuLHIsaT1wZS5leGVjKHQuX2kucmVwbGFjZSgvXChbXildKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIikpO2lmKGkpe3ZhciBhPWZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbz1bZnVuY3Rpb24odCl7dmFyIGU9cGFyc2VJbnQodCwxMCk7cmV0dXJuIGU8PTQ5PzJlMytlOmU8PTk5OT8xOTAwK2U6ZX0odCksQ3QuaW5kZXhPZihlKSxwYXJzZUludChuLDEwKSxwYXJzZUludChyLDEwKSxwYXJzZUludChpLDEwKV07cmV0dXJuIGEmJm8ucHVzaChwYXJzZUludChhLDEwKSksb30oaVs0XSxpWzNdLGlbMl0saVs1XSxpWzZdLGlbN10pO2lmKG49YSxyPXQsKGU9aVsxXSkmJmp0LmluZGV4T2YoZSkhPT1uZXcgRGF0ZShuWzBdLG5bMV0sblsyXSkuZ2V0RGF5KCkmJihwKHIpLndlZWtkYXlNaXNtYXRjaD0hMCwhKHIuX2lzVmFsaWQ9ITEpKSlyZXR1cm47dC5fYT1hLHQuX3R6bT1mdW5jdGlvbih0LGUsbil7aWYodClyZXR1cm4geWVbdF07aWYoZSlyZXR1cm4gMDt2YXIgcj1wYXJzZUludChuLDEwKSxpPXIlMTAwO3JldHVybihyLWkpLzEwMCo2MCtpfShpWzhdLGlbOV0saVsxMF0pLHQuX2Q9QnQuYXBwbHkobnVsbCx0Ll9hKSx0Ll9kLnNldFVUQ01pbnV0ZXModC5fZC5nZXRVVENNaW51dGVzKCktdC5fdHptKSxwKHQpLnJmYzI4MjI9ITB9ZWxzZSB0Ll9pc1ZhbGlkPSExfWZ1bmN0aW9uIG1lKHQpe2lmKHQuX2YhPT1pLklTT184NjAxKWlmKHQuX2YhPT1pLlJGQ18yODIyKXt0Ll9hPVtdLHAodCkuZW1wdHk9ITA7dmFyIGUsbixyLGEsbyxzLGMsdSxsPSIiK3QuX2ksZj1sLmxlbmd0aCxkPTA7Zm9yKHI9SCh0Ll9mLHQuX2xvY2FsZSkubWF0Y2goWSl8fFtdLGU9MDtlPHIubGVuZ3RoO2UrKylhPXJbZV0sKG49KGwubWF0Y2goaHQoYSx0KSl8fFtdKVswXSkmJigwPChvPWwuc3Vic3RyKDAsbC5pbmRleE9mKG4pKSkubGVuZ3RoJiZwKHQpLnVudXNlZElucHV0LnB1c2gobyksbD1sLnNsaWNlKGwuaW5kZXhPZihuKStuLmxlbmd0aCksZCs9bi5sZW5ndGgpLCRbYV0/KG4/cCh0KS5lbXB0eT0hMTpwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpLHM9YSx1PXQsbnVsbCE9KGM9bikmJmgoZHQscykmJmR0W3NdKGMsdS5fYSx1LHMpKTp0Ll9zdHJpY3QmJiFuJiZwKHQpLnVudXNlZFRva2Vucy5wdXNoKGEpO3AodCkuY2hhcnNMZWZ0T3Zlcj1mLWQsMDxsLmxlbmd0aCYmcCh0KS51bnVzZWRJbnB1dC5wdXNoKGwpLHQuX2FbM108PTEyJiYhMD09PXAodCkuYmlnSG91ciYmMDx0Ll9hWzNdJiYocCh0KS5iaWdIb3VyPXZvaWQgMCkscCh0KS5wYXJzZWREYXRlUGFydHM9dC5fYS5zbGljZSgwKSxwKHQpLm1lcmlkaWVtPXQuX21lcmlkaWVtLHQuX2FbM109ZnVuY3Rpb24odCxlLG4pe3ZhciByO3JldHVybiBudWxsPT1uP2U6bnVsbCE9dC5tZXJpZGllbUhvdXI/dC5tZXJpZGllbUhvdXIoZSxuKToobnVsbCE9dC5pc1BNJiYoKHI9dC5pc1BNKG4pKSYmZTwxMiYmKGUrPTEyKSxyfHwxMiE9PWV8fChlPTApKSxlKX0odC5fbG9jYWxlLHQuX2FbM10sdC5fbWVyaWRpZW0pLG9lKHQpLGllKHQpfWVsc2UgZ2UodCk7ZWxzZSBkZSh0KX1mdW5jdGlvbiB2ZSh0KXt2YXIgZSxuLHIsaCxkPXQuX2ksbT10Ll9mO3JldHVybiB0Ll9sb2NhbGU9dC5fbG9jYWxlfHxyZSh0Ll9sKSxudWxsPT09ZHx8dm9pZCAwPT09bSYmIiI9PT1kP2coe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIGQmJih0Ll9pPWQ9dC5fbG9jYWxlLnByZXBhcnNlKGQpKSxfKGQpP25ldyB4KGllKGQpKToodShkKT90Ll9kPWQ6YShtKT9mdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxhO2lmKDA9PT10Ll9mLmxlbmd0aClyZXR1cm4gcCh0KS5pbnZhbGlkRm9ybWF0PSEwLHQuX2Q9bmV3IERhdGUoTmFOKTtmb3IoaT0wO2k8dC5fZi5sZW5ndGg7aSsrKWE9MCxlPXYoe30sdCksbnVsbCE9dC5fdXNlVVRDJiYoZS5fdXNlVVRDPXQuX3VzZVVUQyksZS5fZj10Ll9mW2ldLG1lKGUpLHkoZSkmJihhKz1wKGUpLmNoYXJzTGVmdE92ZXIsYSs9MTAqcChlKS51bnVzZWRUb2tlbnMubGVuZ3RoLHAoZSkuc2NvcmU9YSwobnVsbD09cnx8YTxyKSYmKHI9YSxuPWUpKTtmKHQsbnx8ZSl9KHQpOm0/bWUodCk6cyhuPShlPXQpLl9pKT9lLl9kPW5ldyBEYXRlKGkubm93KCkpOnUobik/ZS5fZD1uZXcgRGF0ZShuLnZhbHVlT2YoKSk6InN0cmluZyI9PXR5cGVvZiBuPyhyPWUsbnVsbD09PShoPWZlLmV4ZWMoci5faSkpPyhkZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxnZShyKSwhMT09PXIuX2lzVmFsaWQmJihkZWxldGUgci5faXNWYWxpZCxpLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKHIpKSkpOnIuX2Q9bmV3IERhdGUoK2hbMV0pKTphKG4pPyhlLl9hPWwobi5zbGljZSgwKSwoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfSkpLG9lKGUpKTpvKG4pP2Z1bmN0aW9uKHQpe2lmKCF0Ll9kKXt2YXIgZT1SKHQuX2kpO3QuX2E9bChbZS55ZWFyLGUubW9udGgsZS5kYXl8fGUuZGF0ZSxlLmhvdXIsZS5taW51dGUsZS5zZWNvbmQsZS5taWxsaXNlY29uZF0sKGZ1bmN0aW9uKHQpe3JldHVybiB0JiZwYXJzZUludCh0LDEwKX0pKSxvZSh0KX19KGUpOmMobik/ZS5fZD1uZXcgRGF0ZShuKTppLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpLHkodCl8fCh0Ll9kPW51bGwpLHQpKX1mdW5jdGlvbiBiZSh0LGUsbixyLGkpe3ZhciBzLGM9e307cmV0dXJuITAhPT1uJiYhMSE9PW58fChyPW4sbj12b2lkIDApLChvKHQpJiZmdW5jdGlvbih0KXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpLmxlbmd0aDt2YXIgZTtmb3IoZSBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuITE7cmV0dXJuITB9KHQpfHxhKHQpJiYwPT09dC5sZW5ndGgpJiYodD12b2lkIDApLGMuX2lzQU1vbWVudE9iamVjdD0hMCxjLl91c2VVVEM9Yy5faXNVVEM9aSxjLl9sPW4sYy5faT10LGMuX2Y9ZSxjLl9zdHJpY3Q9ciwocz1uZXcgeChpZSh2ZShjKSkpKS5fbmV4dERheSYmKHMuYWRkKDEsImQiKSxzLl9uZXh0RGF5PXZvaWQgMCksc31mdW5jdGlvbiB4ZSh0LGUsbixyKXtyZXR1cm4gYmUodCxlLG4sciwhMSl9aS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz1DKCJ2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSBkaXNjb3VyYWdlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGFuIHVwY29taW5nIG1ham9yIHJlbGVhc2UuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIiwoZnVuY3Rpb24odCl7dC5fZD1uZXcgRGF0ZSh0Ll9pKyh0Ll91c2VVVEM/IiBVVEMiOiIiKSl9KSksaS5JU09fODYwMT1mdW5jdGlvbigpe30saS5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIF9lPUMoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvIiwoZnVuY3Rpb24oKXt2YXIgdD14ZS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKT90PHRoaXM/dGhpczp0OmcoKX0pKSxrZT1DKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsKGZ1bmN0aW9uKCl7dmFyIHQ9eGUuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmdC5pc1ZhbGlkKCk/dGhpczx0P3RoaXM6dDpnKCl9KSk7ZnVuY3Rpb24gd2UodCxlKXt2YXIgbixyO2lmKDE9PT1lLmxlbmd0aCYmYShlWzBdKSYmKGU9ZVswXSksIWUubGVuZ3RoKXJldHVybiB4ZSgpO2ZvcihuPWVbMF0scj0xO3I8ZS5sZW5ndGg7KytyKWVbcl0uaXNWYWxpZCgpJiYhZVtyXVt0XShuKXx8KG49ZVtyXSk7cmV0dXJuIG59dmFyIFRlPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBFZSh0KXt2YXIgZT1SKHQpLG49ZS55ZWFyfHwwLHI9ZS5xdWFydGVyfHwwLGk9ZS5tb250aHx8MCxhPWUud2Vla3x8ZS5pc29XZWVrfHwwLG89ZS5kYXl8fDAscz1lLmhvdXJ8fDAsYz1lLm1pbnV0ZXx8MCx1PWUuc2Vjb25kfHwwLGw9ZS5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0KWlmKC0xPT09dnQuY2FsbChUZSxlKXx8bnVsbCE9dFtlXSYmaXNOYU4odFtlXSkpcmV0dXJuITE7Zm9yKHZhciBuPSExLHI9MDtyPFRlLmxlbmd0aDsrK3IpaWYodFtUZVtyXV0pe2lmKG4pcmV0dXJuITE7cGFyc2VGbG9hdCh0W1RlW3JdXSkhPT13KHRbVGVbcl1dKSYmKG49ITApfXJldHVybiEwfShlKSx0aGlzLl9taWxsaXNlY29uZHM9K2wrMWUzKnUrNmU0KmMrMWUzKnMqNjAqNjAsdGhpcy5fZGF5cz0rbys3KmEsdGhpcy5fbW9udGhzPStpKzMqcisxMipuLHRoaXMuX2RhdGE9e30sdGhpcy5fbG9jYWxlPXJlKCksdGhpcy5fYnViYmxlKCl9ZnVuY3Rpb24gQ2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFZX1mdW5jdGlvbiBTZSh0KXtyZXR1cm4gdDwwPy0xKk1hdGgucm91bmQoLTEqdCk6TWF0aC5yb3VuZCh0KX1mdW5jdGlvbiBBZSh0LGUpe3EodCwwLDAsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51dGNPZmZzZXQoKSxuPSIrIjtyZXR1cm4gdDwwJiYodD0tdCxuPSItIiksbitqKH5+KHQvNjApLDIpK2Uraih+fnQlNjAsMil9KSl9QWUoIloiLCI6IiksQWUoIlpaIiwiIiksbHQoIloiLHN0KSxsdCgiWloiLHN0KSxwdChbIloiLCJaWiJdLChmdW5jdGlvbih0LGUsbil7bi5fdXNlVVRDPSEwLG4uX3R6bT1PZShzdCx0KX0pKTt2YXIgTWU9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gT2UodCxlKXt2YXIgbj0oZXx8IiIpLm1hdGNoKHQpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO3ZhciByPSgobltuLmxlbmd0aC0xXXx8W10pKyIiKS5tYXRjaChNZSl8fFsiLSIsMCwwXSxpPTYwKnJbMV0rdyhyWzJdKTtyZXR1cm4gMD09PWk/MDoiKyI9PT1yWzBdP2k6LWl9ZnVuY3Rpb24gTmUodCxlKXt2YXIgbixyO3JldHVybiBlLl9pc1VUQz8obj1lLmNsb25lKCkscj0oXyh0KXx8dSh0KT90LnZhbHVlT2YoKTp4ZSh0KS52YWx1ZU9mKCkpLW4udmFsdWVPZigpLG4uX2Quc2V0VGltZShuLl9kLnZhbHVlT2YoKStyKSxpLnVwZGF0ZU9mZnNldChuLCExKSxuKTp4ZSh0KS5sb2NhbCgpfWZ1bmN0aW9uIEJlKHQpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0Ll9kLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfWZ1bmN0aW9uIERlKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEMmJjA9PT10aGlzLl9vZmZzZXR9aS51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciBMZT0vXihcLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKVw6KFxkKykoPzpcOihcZCspKFwuXGQqKT8pPyQvLEllPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBSZSh0LGUpe3ZhciBuLHIsaSxhPXQsbz1udWxsO3JldHVybiBDZSh0KT9hPXttczp0Ll9taWxsaXNlY29uZHMsZDp0Ll9kYXlzLE06dC5fbW9udGhzfTpjKHQpPyhhPXt9LGU/YVtlXT10OmEubWlsbGlzZWNvbmRzPXQpOihvPUxlLmV4ZWModCkpPyhuPSItIj09PW9bMV0/LTE6MSxhPXt5OjAsZDp3KG9bMl0pKm4saDp3KG9bM10pKm4sbTp3KG9bNF0pKm4sczp3KG9bNV0pKm4sbXM6dyhTZSgxZTMqb1s2XSkpKm59KToobz1JZS5leGVjKHQpKT8obj0iLSI9PT1vWzFdPy0xOjEsYT17eTpGZShvWzJdLG4pLE06RmUob1szXSxuKSx3OkZlKG9bNF0sbiksZDpGZShvWzVdLG4pLGg6RmUob1s2XSxuKSxtOkZlKG9bN10sbiksczpGZShvWzhdLG4pfSk6bnVsbD09YT9hPXt9OiJvYmplY3QiPT10eXBlb2YgYSYmKCJmcm9tImluIGF8fCJ0byJpbiBhKSYmKGk9ZnVuY3Rpb24odCxlKXt2YXIgbjtyZXR1cm4gdC5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpPyhlPU5lKGUsdCksdC5pc0JlZm9yZShlKT9uPVBlKHQsZSk6KChuPVBlKGUsdCkpLm1pbGxpc2Vjb25kcz0tbi5taWxsaXNlY29uZHMsbi5tb250aHM9LW4ubW9udGhzKSxuKTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fSh4ZShhLmZyb20pLHhlKGEudG8pKSwoYT17fSkubXM9aS5taWxsaXNlY29uZHMsYS5NPWkubW9udGhzKSxyPW5ldyBFZShhKSxDZSh0KSYmaCh0LCJfbG9jYWxlIikmJihyLl9sb2NhbGU9dC5fbG9jYWxlKSxyfWZ1bmN0aW9uIEZlKHQsZSl7dmFyIG49dCYmcGFyc2VGbG9hdCh0LnJlcGxhY2UoIiwiLCIuIikpO3JldHVybihpc05hTihuKT8wOm4pKmV9ZnVuY3Rpb24gUGUodCxlKXt2YXIgbj17fTtyZXR1cm4gbi5tb250aHM9ZS5tb250aCgpLXQubW9udGgoKSsxMiooZS55ZWFyKCktdC55ZWFyKCkpLHQuY2xvbmUoKS5hZGQobi5tb250aHMsIk0iKS5pc0FmdGVyKGUpJiYtLW4ubW9udGhzLG4ubWlsbGlzZWNvbmRzPStlLSt0LmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIiksbn1mdW5jdGlvbiBqZSh0LGUpe3JldHVybiBmdW5jdGlvbihuLHIpe3ZhciBpO3JldHVybiBudWxsPT09cnx8aXNOYU4oK3IpfHwoTShlLCJtb21lbnQoKS4iK2UrIihwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4iK2UrIihudW1iZXIsIHBlcmlvZCkuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4iKSxpPW4sbj1yLHI9aSksWWUodGhpcyxSZShuPSJzdHJpbmciPT10eXBlb2Ygbj8rbjpuLHIpLHQpLHRoaXN9fWZ1bmN0aW9uIFllKHQsZSxuLHIpe3ZhciBhPWUuX21pbGxpc2Vjb25kcyxvPVNlKGUuX2RheXMpLHM9U2UoZS5fbW9udGhzKTt0LmlzVmFsaWQoKSYmKHI9bnVsbD09cnx8cixzJiZTdCh0LF90KHQsIk1vbnRoIikrcypuKSxvJiZrdCh0LCJEYXRlIixfdCh0LCJEYXRlIikrbypuKSxhJiZ0Ll9kLnNldFRpbWUodC5fZC52YWx1ZU9mKCkrYSpuKSxyJiZpLnVwZGF0ZU9mZnNldCh0LG98fHMpKX1SZS5mbj1FZS5wcm90b3R5cGUsUmUuaW52YWxpZD1mdW5jdGlvbigpe3JldHVybiBSZShOYU4pfTt2YXIgemU9amUoMSwiYWRkIiksVWU9amUoLTEsInN1YnRyYWN0Iik7ZnVuY3Rpb24gJGUodCxlKXt2YXIgbj0xMiooZS55ZWFyKCktdC55ZWFyKCkpKyhlLm1vbnRoKCktdC5tb250aCgpKSxyPXQuY2xvbmUoKS5hZGQobiwibW9udGhzIik7cmV0dXJuLShuKyhlLXI8MD8oZS1yKS8oci10LmNsb25lKCkuYWRkKG4tMSwibW9udGhzIikpOihlLXIpLyh0LmNsb25lKCkuYWRkKG4rMSwibW9udGhzIiktcikpKXx8MH1mdW5jdGlvbiBxZSh0KXt2YXIgZTtyZXR1cm4gdm9pZCAwPT09dD90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShlPXJlKHQpKSYmKHRoaXMuX2xvY2FsZT1lKSx0aGlzKX1pLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixpLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBXZT1DKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKHQpfSkpO2Z1bmN0aW9uIEhlKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgVmU9MTI2MjI3ODA4ZTU7ZnVuY3Rpb24gR2UodCxlKXtyZXR1cm4odCVlK2UpJWV9ZnVuY3Rpb24gWGUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9uZXcgRGF0ZSh0KzQwMCxlLG4pLVZlOm5ldyBEYXRlKHQsZSxuKS52YWx1ZU9mKCl9ZnVuY3Rpb24gWmUodCxlLG4pe3JldHVybiB0PDEwMCYmMDw9dD9EYXRlLlVUQyh0KzQwMCxlLG4pLVZlOkRhdGUuVVRDKHQsZSxuKX1mdW5jdGlvbiBLZSh0LGUpe3EoMCxbdCx0Lmxlbmd0aF0sMCxlKX1mdW5jdGlvbiBRZSh0LGUsbixyLGkpe3ZhciBhO3JldHVybiBudWxsPT10P0l0KHRoaXMscixpKS55ZWFyOigoYT1SdCh0LHIsaSkpPGUmJihlPWEpLGZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9THQodCxlLG4scixpKSxvPUJ0KGEueWVhciwwLGEuZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKG8uZ2V0VVRDRnVsbFllYXIoKSksdGhpcy5tb250aChvLmdldFVUQ01vbnRoKCkpLHRoaXMuZGF0ZShvLmdldFVUQ0RhdGUoKSksdGhpc30uY2FsbCh0aGlzLHQsZSxuLHIsaSkpfXEoMCxbImdnIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSkpLHEoMCxbIkdHIiwyXSwwLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmlzb1dlZWtZZWFyKCklMTAwfSkpLEtlKCJnZ2dnIiwid2Vla1llYXIiKSxLZSgiZ2dnZ2ciLCJ3ZWVrWWVhciIpLEtlKCJHR0dHIiwiaXNvV2Vla1llYXIiKSxLZSgiR0dHR0ciLCJpc29XZWVrWWVhciIpLEwoIndlZWtZZWFyIiwiZ2ciKSxMKCJpc29XZWVrWWVhciIsIkdHIiksUCgid2Vla1llYXIiLDEpLFAoImlzb1dlZWtZZWFyIiwxKSxsdCgiRyIsYXQpLGx0KCJnIixhdCksbHQoIkdHIixRLEcpLGx0KCJnZyIsUSxHKSxsdCgiR0dHRyIsbnQsWiksbHQoImdnZ2ciLG50LFopLGx0KCJHR0dHRyIscnQsSyksbHQoImdnZ2dnIixydCxLKSx5dChbImdnZ2ciLCJnZ2dnZyIsIkdHR0ciLCJHR0dHRyJdLChmdW5jdGlvbih0LGUsbixyKXtlW3Iuc3Vic3RyKDAsMildPXcodCl9KSkseXQoWyJnZyIsIkdHIl0sKGZ1bmN0aW9uKHQsZSxuLHIpe2Vbcl09aS5wYXJzZVR3b0RpZ2l0WWVhcih0KX0pKSxxKCJRIiwwLCJRbyIsInF1YXJ0ZXIiKSxMKCJxdWFydGVyIiwiUSIpLFAoInF1YXJ0ZXIiLDcpLGx0KCJRIixWKSxwdCgiUSIsKGZ1bmN0aW9uKHQsZSl7ZVsxXT0zKih3KHQpLTEpfSkpLHEoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxMKCJkYXRlIiwiRCIpLFAoImRhdGUiLDkpLGx0KCJEIixRKSxsdCgiREQiLFEsRyksbHQoIkRvIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9lLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlfHxlLl9vcmRpbmFsUGFyc2U6ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSkscHQoWyJEIiwiREQiXSwyKSxwdCgiRG8iLChmdW5jdGlvbih0LGUpe2VbMl09dyh0Lm1hdGNoKFEpWzBdKX0pKTt2YXIgSmU9eHQoIkRhdGUiLCEwKTtxKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxMKCJkYXlPZlllYXIiLCJEREQiKSxQKCJkYXlPZlllYXIiLDQpLGx0KCJEREQiLGV0KSxsdCgiRERERCIsWCkscHQoWyJEREQiLCJEREREIl0sKGZ1bmN0aW9uKHQsZSxuKXtuLl9kYXlPZlllYXI9dyh0KX0pKSxxKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxMKCJtaW51dGUiLCJtIiksUCgibWludXRlIiwxNCksbHQoIm0iLFEpLGx0KCJtbSIsUSxHKSxwdChbIm0iLCJtbSJdLDQpO3ZhciB0bj14dCgiTWludXRlcyIsITEpO3EoInMiLFsic3MiLDJdLDAsInNlY29uZCIpLEwoInNlY29uZCIsInMiKSxQKCJzZWNvbmQiLDE1KSxsdCgicyIsUSksbHQoInNzIixRLEcpLHB0KFsicyIsInNzIl0sNSk7dmFyIGVuLG5uPXh0KCJTZWNvbmRzIiwhMSk7Zm9yKHEoIlMiLDAsMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTAwKX0pKSxxKDAsWyJTUyIsMl0sMCwoZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSkpLHEoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxxKDAsWyJTU1NTIiw0XSwwLChmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1MiLDVdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1NTIiw2XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTMqdGhpcy5taWxsaXNlY29uZCgpfSkpLHEoMCxbIlNTU1NTU1MiLDddLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1NTU1MiLDhdLDAsKGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSkscSgwLFsiU1NTU1NTU1NTIiw5XSwwLChmdW5jdGlvbigpe3JldHVybiAxZTYqdGhpcy5taWxsaXNlY29uZCgpfSkpLEwoIm1pbGxpc2Vjb25kIiwibXMiKSxQKCJtaWxsaXNlY29uZCIsMTYpLGx0KCJTIixldCxWKSxsdCgiU1MiLGV0LEcpLGx0KCJTU1MiLGV0LFgpLGVuPSJTU1NTIjtlbi5sZW5ndGg8PTk7ZW4rPSJTIilsdChlbixpdCk7ZnVuY3Rpb24gcm4odCxlKXtlWzZdPXcoMWUzKigiMC4iK3QpKX1mb3IoZW49IlMiO2VuLmxlbmd0aDw9OTtlbis9IlMiKXB0KGVuLHJuKTt2YXIgYW49eHQoIk1pbGxpc2Vjb25kcyIsITEpO3EoInoiLDAsMCwiem9uZUFiYnIiKSxxKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciBvbj14LnByb3RvdHlwZTtmdW5jdGlvbiBzbih0KXtyZXR1cm4gdH1vbi5hZGQ9emUsb24uY2FsZW5kYXI9ZnVuY3Rpb24odCxlKXt2YXIgbj10fHx4ZSgpLHI9TmUobix0aGlzKS5zdGFydE9mKCJkYXkiKSxhPWkuY2FsZW5kYXJGb3JtYXQodGhpcyxyKXx8InNhbWVFbHNlIixvPWUmJihPKGVbYV0pP2VbYV0uY2FsbCh0aGlzLG4pOmVbYV0pO3JldHVybiB0aGlzLmZvcm1hdChvfHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihhLHRoaXMseGUobikpKX0sb24uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHgodGhpcyl9LG9uLmRpZmY9ZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKHI9TmUodCx0aGlzKSkuaXNWYWxpZCgpKXJldHVybiBOYU47c3dpdGNoKGk9NmU0KihyLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLGU9SShlKSl7Y2FzZSJ5ZWFyIjphPSRlKHRoaXMscikvMTI7YnJlYWs7Y2FzZSJtb250aCI6YT0kZSh0aGlzLHIpO2JyZWFrO2Nhc2UicXVhcnRlciI6YT0kZSh0aGlzLHIpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOmE9KHRoaXMtcikvMWUzO2JyZWFrO2Nhc2UibWludXRlIjphPSh0aGlzLXIpLzZlNDticmVhaztjYXNlImhvdXIiOmE9KHRoaXMtcikvMzZlNTticmVhaztjYXNlImRheSI6YT0odGhpcy1yLWkpLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6YT0odGhpcy1yLWkpLzYwNDhlNTticmVhaztkZWZhdWx0OmE9dGhpcy1yfXJldHVybiBuP2E6ayhhKX0sb24uZW5kT2Y9ZnVuY3Rpb24odCl7dmFyIGU7aWYodm9pZCAwPT09KHQ9SSh0KSl8fCJtaWxsaXNlY29uZCI9PT10fHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5faXNVVEM/WmU6WGU7c3dpdGNoKHQpe2Nhc2UieWVhciI6ZT1uKHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjplPW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOmU9dGhpcy5fZC52YWx1ZU9mKCksZSs9MzZlNS1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KS0xO2JyZWFrO2Nhc2UibWludXRlIjplPXRoaXMuX2QudmFsdWVPZigpLGUrPTZlNC1HZShlLDZlNCktMTticmVhaztjYXNlInNlY29uZCI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlKz0xZTMtR2UoZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShlKSxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxvbi5mb3JtYXQ9ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5pc1V0YygpP2kuZGVmYXVsdEZvcm1hdFV0YzppLmRlZmF1bHRGb3JtYXQpO3ZhciBlPVcodGhpcyx0KTtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChlKX0sb24uZnJvbT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlzVmFsaWQoKSYmKF8odCkmJnQuaXNWYWxpZCgpfHx4ZSh0KS5pc1ZhbGlkKCkpP1JlKHt0bzp0aGlzLGZyb206dH0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghZSk6dGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX0sb24uZnJvbU5vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tKHhlKCksdCl9LG9uLnRvPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoXyh0KSYmdC5pc1ZhbGlkKCl8fHhlKHQpLmlzVmFsaWQoKSk/UmUoe2Zyb206dGhpcyx0bzp0fSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCFlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSxvbi50b05vdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50byh4ZSgpLHQpfSxvbi5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIE8odGhpc1t0PUkodCldKT90aGlzW3RdKCk6dGhpc30sb24uaW52YWxpZEF0PWZ1bmN0aW9uKCl7cmV0dXJuIHAodGhpcykub3ZlcmZsb3d9LG9uLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXt2YXIgbj1fKHQpP3Q6eGUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk+bi52YWx1ZU9mKCk6bi52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpKX0sb24uaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXt2YXIgbj1fKHQpP3Q6eGUodCk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFuLmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KGU9SShlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKGUpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl9LG9uLmlzQmV0d2Vlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1fKHQpP3Q6eGUodCksYT1fKGUpP2U6eGUoZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmkuaXNWYWxpZCgpJiZhLmlzVmFsaWQoKSkmJigiKCI9PT0ocj1yfHwiKCkiKVswXT90aGlzLmlzQWZ0ZXIoaSxuKTohdGhpcy5pc0JlZm9yZShpLG4pKSYmKCIpIj09PXJbMV0/dGhpcy5pc0JlZm9yZShhLG4pOiF0aGlzLmlzQWZ0ZXIoYSxuKSl9LG9uLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9Xyh0KT90OnhlKHQpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhci5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShlPUkoZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPT09ci52YWx1ZU9mKCk6KG49ci52YWx1ZU9mKCksdGhpcy5jbG9uZSgpLnN0YXJ0T2YoZSkudmFsdWVPZigpPD1uJiZuPD10aGlzLmNsb25lKCkuZW5kT2YoZSkudmFsdWVPZigpKSl9LG9uLmlzU2FtZU9yQWZ0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pc1NhbWUodCxlKXx8dGhpcy5pc0FmdGVyKHQsZSl9LG9uLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaXNTYW1lKHQsZSl8fHRoaXMuaXNCZWZvcmUodCxlKX0sb24uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB5KHRoaXMpfSxvbi5sYW5nPVdlLG9uLmxvY2FsZT1xZSxvbi5sb2NhbGVEYXRhPUhlLG9uLm1heD1rZSxvbi5taW49X2Usb24ucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uKCl7cmV0dXJuIGYoe30scCh0aGlzKSl9LG9uLnNldD1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdClmb3IodmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciBuIGluIHQpZS5wdXNoKHt1bml0Om4scHJpb3JpdHk6RltuXX0pO3JldHVybiBlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX0pKSxlfSh0PVIodCkpLHI9MDtyPG4ubGVuZ3RoO3IrKyl0aGlzW25bcl0udW5pdF0odFtuW3JdLnVuaXRdKTtlbHNlIGlmKE8odGhpc1t0PUkodCldKSlyZXR1cm4gdGhpc1t0XShlKTtyZXR1cm4gdGhpc30sb24uc3RhcnRPZj1mdW5jdGlvbih0KXt2YXIgZTtpZih2b2lkIDA9PT0odD1JKHQpKXx8Im1pbGxpc2Vjb25kIj09PXR8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9pc1VUQz9aZTpYZTtzd2l0Y2godCl7Y2FzZSJ5ZWFyIjplPW4odGhpcy55ZWFyKCksMCwxKTticmVhaztjYXNlInF1YXJ0ZXIiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSwxKTticmVhaztjYXNlIndlZWsiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktdGhpcy53ZWVrZGF5KCkpO2JyZWFrO2Nhc2UiaXNvV2VlayI6ZT1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOmU9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkpO2JyZWFrO2Nhc2UiaG91ciI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlKyh0aGlzLl9pc1VUQz8wOjZlNCp0aGlzLnV0Y09mZnNldCgpKSwzNmU1KTticmVhaztjYXNlIm1pbnV0ZSI6ZT10aGlzLl9kLnZhbHVlT2YoKSxlLT1HZShlLDZlNCk7YnJlYWs7Y2FzZSJzZWNvbmQiOmU9dGhpcy5fZC52YWx1ZU9mKCksZS09R2UoZSwxZTMpfXJldHVybiB0aGlzLl9kLnNldFRpbWUoZSksaS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sb24uc3VidHJhY3Q9VWUsb24udG9BcnJheT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuW3QueWVhcigpLHQubW9udGgoKSx0LmRhdGUoKSx0LmhvdXIoKSx0Lm1pbnV0ZSgpLHQuc2Vjb25kKCksdC5taWxsaXNlY29uZCgpXX0sb24udG9PYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybnt5ZWFyczp0LnllYXIoKSxtb250aHM6dC5tb250aCgpLGRhdGU6dC5kYXRlKCksaG91cnM6dC5ob3VycygpLG1pbnV0ZXM6dC5taW51dGVzKCksc2Vjb25kczp0LnNlY29uZHMoKSxtaWxsaXNlY29uZHM6dC5taWxsaXNlY29uZHMoKX19LG9uLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG9uLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgZT0hMCE9PXQsbj1lP3RoaXMuY2xvbmUoKS51dGMoKTp0aGlzO3JldHVybiBuLnllYXIoKTwwfHw5OTk5PG4ueWVhcigpP1cobixlPyJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0iOiJZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIik6TyhEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyk/ZT90aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk6bmV3IERhdGUodGhpcy52YWx1ZU9mKCkrNjAqdGhpcy51dGNPZmZzZXQoKSoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsVyhuLCJaIikpOlcobixlPyJZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKX0sb24uaW5zcGVjdD1mdW5jdGlvbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4ibW9tZW50LmludmFsaWQoLyogIit0aGlzLl9pKyIgKi8pIjt2YXIgdD0ibW9tZW50IixlPSIiO3RoaXMuaXNMb2NhbCgpfHwodD0wPT09dGhpcy51dGNPZmZzZXQoKT8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiLGU9IloiKTt2YXIgbj0iWyIrdCsnKCJdJyxyPTA8PXRoaXMueWVhcigpJiZ0aGlzLnllYXIoKTw9OTk5OT8iWVlZWSI6IllZWVlZWSIsaT1lKydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobityKyItTU0tRERbVF1ISDptbTpzcy5TU1MiK2kpfSxvbi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG9uLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfSxvbi51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sb24udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kLnZhbHVlT2YoKS02ZTQqKHRoaXMuX29mZnNldHx8MCl9LG9uLmNyZWF0aW9uRGF0YT1mdW5jdGlvbigpe3JldHVybntpbnB1dDp0aGlzLl9pLGZvcm1hdDp0aGlzLl9mLGxvY2FsZTp0aGlzLl9sb2NhbGUsaXNVVEM6dGhpcy5faXNVVEMsc3RyaWN0OnRoaXMuX3N0cmljdH19LG9uLnllYXI9YnQsb24uaXNMZWFwWWVhcj1mdW5jdGlvbigpe3JldHVybiBtdCh0aGlzLnllYXIoKSl9LG9uLndlZWtZZWFyPWZ1bmN0aW9uKHQpe3JldHVybiBRZS5jYWxsKHRoaXMsdCx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sb24uaXNvV2Vla1llYXI9ZnVuY3Rpb24odCl7cmV0dXJuIFFlLmNhbGwodGhpcyx0LHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LG9uLnF1YXJ0ZXI9b24ucXVhcnRlcnM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgzKih0LTEpK3RoaXMubW9udGgoKSUzKX0sb24ubW9udGg9QXQsb24uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gd3QodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sb24ud2Vlaz1vbi53ZWVrcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi5pc29XZWVrPW9uLmlzb1dlZWtzPWZ1bmN0aW9uKHQpe3ZhciBlPUl0KHRoaXMsMSw0KS53ZWVrO3JldHVybiBudWxsPT10P2U6dGhpcy5hZGQoNyoodC1lKSwiZCIpfSxvbi53ZWVrc0luWWVhcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBSdCh0aGlzLnllYXIoKSx0LmRvdyx0LmRveSl9LG9uLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIFJ0KHRoaXMueWVhcigpLDEsNCl9LG9uLmRhdGU9SmUsb24uZGF5PW9uLmRheXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT10P3RoaXM6TmFOO3ZhciBlLG4scj10aGlzLl9pc1VUQz90aGlzLl9kLmdldFVUQ0RheSgpOnRoaXMuX2QuZ2V0RGF5KCk7cmV0dXJuIG51bGwhPXQ/KGU9dCxuPXRoaXMubG9jYWxlRGF0YSgpLHQ9InN0cmluZyIhPXR5cGVvZiBlP2U6aXNOYU4oZSk/Im51bWJlciI9PXR5cGVvZihlPW4ud2Vla2RheXNQYXJzZShlKSk/ZTpudWxsOnBhcnNlSW50KGUsMTApLHRoaXMuYWRkKHQtciwiZCIpKTpyfSxvbi53ZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjt2YXIgZT0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gbnVsbD09dD9lOnRoaXMuYWRkKHQtZSwiZCIpfSxvbi5pc29XZWVrZGF5PWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9dD90aGlzOk5hTjtpZihudWxsPT10KXJldHVybiB0aGlzLmRheSgpfHw3O3ZhciBlLG4scj0oZT10LG49dGhpcy5sb2NhbGVEYXRhKCksInN0cmluZyI9PXR5cGVvZiBlP24ud2Vla2RheXNQYXJzZShlKSU3fHw3OmlzTmFOKGUpP251bGw6ZSk7cmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCklNz9yOnItNyl9LG9uLmRheU9mWWVhcj1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnJvdW5kKCh0aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IiktdGhpcy5jbG9uZSgpLnN0YXJ0T2YoInllYXIiKSkvODY0ZTUpKzE7cmV0dXJuIG51bGw9PXQ/ZTp0aGlzLmFkZCh0LWUsImQiKX0sb24uaG91cj1vbi5ob3Vycz1YdCxvbi5taW51dGU9b24ubWludXRlcz10bixvbi5zZWNvbmQ9b24uc2Vjb25kcz1ubixvbi5taWxsaXNlY29uZD1vbi5taWxsaXNlY29uZHM9YW4sb24udXRjT2Zmc2V0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixhPXRoaXMuX29mZnNldHx8MDtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPXQ/dGhpczpOYU47aWYobnVsbD09dClyZXR1cm4gdGhpcy5faXNVVEM/YTpCZSh0aGlzKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKG51bGw9PT0odD1PZShzdCx0KSkpcmV0dXJuIHRoaXN9ZWxzZSBNYXRoLmFicyh0KTwxNiYmIW4mJih0Kj02MCk7cmV0dXJuIXRoaXMuX2lzVVRDJiZlJiYocj1CZSh0aGlzKSksdGhpcy5fb2Zmc2V0PXQsdGhpcy5faXNVVEM9ITAsbnVsbCE9ciYmdGhpcy5hZGQociwibSIpLGEhPT10JiYoIWV8fHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3M/WWUodGhpcyxSZSh0LWEsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCxpLnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfSxvbi51dGM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsdCl9LG9uLmxvY2FsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pc1VUQyYmKHRoaXMudXRjT2Zmc2V0KDAsdCksdGhpcy5faXNVVEM9ITEsdCYmdGhpcy5zdWJ0cmFjdChCZSh0aGlzKSwibSIpKSx0aGlzfSxvbi5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgdGhpcy5faSl7dmFyIHQ9T2Uob3QsdGhpcy5faSk7bnVsbCE9dD90aGlzLnV0Y09mZnNldCh0KTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sb24uaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24odCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmKHQ9dD94ZSh0KS51dGNPZmZzZXQoKTowLCh0aGlzLnV0Y09mZnNldCgpLXQpJTYwPT0wKX0sb24uaXNEU1Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCl8fHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpfSxvbi5pc0xvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmIXRoaXMuX2lzVVRDfSxvbi5pc1V0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDfSxvbi5pc1V0Yz1EZSxvbi5pc1VUQz1EZSxvbi56b25lQWJicj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn0sb24uem9uZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNVVEM/IkNvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIjoiIn0sb24uZGF0ZXM9QygiZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLEplKSxvbi5tb250aHM9QygibW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkIixBdCksb24ueWVhcnM9QygieWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCIsYnQpLG9uLnpvbmU9QygibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLChmdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10Pygic3RyaW5nIiE9dHlwZW9mIHQmJih0PS10KSx0aGlzLnV0Y09mZnNldCh0LGUpLHRoaXMpOi10aGlzLnV0Y09mZnNldCgpfSkpLG9uLmlzRFNUU2hpZnRlZD1DKCJpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uIiwoZnVuY3Rpb24oKXtpZighcyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIHQ9e307aWYodih0LHRoaXMpLCh0PXZlKHQpKS5fYSl7dmFyIGU9dC5faXNVVEM/ZCh0Ll9hKTp4ZSh0Ll9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJjA8VCh0Ll9hLGUudG9BcnJheSgpKX1lbHNlIHRoaXMuX2lzRFNUU2hpZnRlZD0hMTtyZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkfSkpO3ZhciBjbj1CLnByb3RvdHlwZTtmdW5jdGlvbiB1bih0LGUsbixyKXt2YXIgaT1yZSgpLGE9ZCgpLnNldChyLGUpO3JldHVybiBpW25dKGEsdCl9ZnVuY3Rpb24gbG4odCxlLG4pe2lmKGModCkmJihlPXQsdD12b2lkIDApLHQ9dHx8IiIsbnVsbCE9ZSlyZXR1cm4gdW4odCxlLG4sIm1vbnRoIik7dmFyIHIsaT1bXTtmb3Iocj0wO3I8MTI7cisrKWlbcl09dW4odCxyLG4sIm1vbnRoIik7cmV0dXJuIGl9ZnVuY3Rpb24gaG4odCxlLG4scil7ImJvb2xlYW4iPT10eXBlb2YgdD9jKGUpJiYobj1lLGU9dm9pZCAwKTooZT10LHQ9ITEsYyhuPWUpJiYobj1lLGU9dm9pZCAwKSksZT1lfHwiIjt2YXIgaSxhPXJlKCksbz10P2EuX3dlZWsuZG93OjA7aWYobnVsbCE9bilyZXR1cm4gdW4oZSwobitvKSU3LHIsImRheSIpO3ZhciBzPVtdO2ZvcihpPTA7aTw3O2krKylzW2ldPXVuKGUsKGkrbyklNyxyLCJkYXkiKTtyZXR1cm4gc31jbi5jYWxlbmRhcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5fY2FsZW5kYXJbdF18fHRoaXMuX2NhbGVuZGFyLnNhbWVFbHNlO3JldHVybiBPKHIpP3IuY2FsbChlLG4pOnJ9LGNuLmxvbmdEYXRlRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xvbmdEYXRlRm9ybWF0W3RdLG49dGhpcy5fbG9uZ0RhdGVGb3JtYXRbdC50b1VwcGVyQ2FzZSgpXTtyZXR1cm4gZXx8IW4/ZToodGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF09bi5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMSl9KSksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbdF0pfSxjbi5pbnZhbGlkRGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnZhbGlkRGF0ZX0sY24ub3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCIlZCIsdCl9LGNuLnByZXBhcnNlPXNuLGNuLnBvc3Rmb3JtYXQ9c24sY24ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMuX3JlbGF0aXZlVGltZVtuXTtyZXR1cm4gTyhpKT9pKHQsZSxuLHIpOmkucmVwbGFjZSgvJWQvaSx0KX0sY24ucGFzdEZ1dHVyZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVswPHQ/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gTyhuKT9uKGUpOm4ucmVwbGFjZSgvJXMvaSxlKX0sY24uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKG4gaW4gdClPKGU9dFtuXSk/dGhpc1tuXT1lOnRoaXNbIl8iK25dPWU7dGhpcy5fY29uZmlnPXQsdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ9bmV3IFJlZ0V4cCgodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2V8fHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpKyJ8IisvXGR7MSwyfS8uc291cmNlKX0sY24ubW9udGhzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ/YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1t0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1sodGhpcy5fbW9udGhzLmlzRm9ybWF0fHxUdCkudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW3QubW9udGgoKV06YSh0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sY24ubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD9hKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFt0Lm1vbnRoKCldOnRoaXMuX21vbnRoc1Nob3J0W1R0LnRlc3QoZSk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVt0Lm1vbnRoKCldOmEodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmV9LGNuLm1vbnRoc1BhcnNlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpLGE7aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLHI9MDtyPDEyOysrcilhPWQoWzJlMyxyXSksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT10aGlzLm1vbnRoc1Nob3J0KGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhpcy5fbG9uZ01vbnRoc1BhcnNlW3JdPXRoaXMubW9udGhzKGEsIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG4/Ik1NTSI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLG8pKT9pOm51bGw6LTEhPT0oaT12dC5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxvKSk/aTpudWxsOiJNTU0iPT09ZT8tMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsbykpP2k6bnVsbH0uY2FsbCh0aGlzLHQsZSxuKTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSkscj0wO3I8MTI7cisrKXtpZihpPWQoWzJlMyxyXSksbiYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtyXSYmKHRoaXMuX2xvbmdNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhpLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KGksIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksbnx8dGhpcy5fbW9udGhzUGFyc2Vbcl18fChhPSJeIit0aGlzLm1vbnRocyhpLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoaSwiIiksdGhpcy5fbW9udGhzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiTU1NTSI9PT1lJiZ0aGlzLl9sb25nTW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZihuJiYiTU1NIj09PWUmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fbW9udGhzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcn19LGNuLm1vbnRoc1JlZ2V4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhoKHRoaXMsIl9tb250aHNSZWdleCIpfHxOdC5jYWxsKHRoaXMpLHQ/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihoKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9T3QpLHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4JiZ0P3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KX0sY24ubW9udGhzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oaCh0aGlzLCJfbW9udGhzUmVnZXgiKXx8TnQuY2FsbCh0aGlzKSx0P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KGgodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9TXQpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJnQ/dGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDp0aGlzLl9tb250aHNTaG9ydFJlZ2V4KX0sY24ud2Vlaz1mdW5jdGlvbih0KXtyZXR1cm4gSXQodCx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sY24uZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGNuLmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxjbi53ZWVrZGF5cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW3QmJiEwIT09dCYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09dD9GdChuLHRoaXMuX3dlZWsuZG93KTp0P25bdC5kYXkoKV06bn0sY24ud2Vla2RheXNNaW49ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10P0Z0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzTWluW3QuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxjbi53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD9GdCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTp0P3RoaXMuX3dlZWtkYXlzU2hvcnRbdC5kYXkoKV06dGhpcy5fd2Vla2RheXNTaG9ydH0sY24ud2Vla2RheXNQYXJzZT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaSxhO2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdClyZXR1cm4gZnVuY3Rpb24odCxlLG4pe3ZhciByLGksYSxvPXQudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxyPTA7cjw3OysrcilhPWQoWzJlMywxXSkuZGF5KHIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW3JdPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gbj8iZGRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKT9pOm51bGw6ImRkZCI9PT1lPy0xIT09KGk9dnQuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSk/aTpudWxsOiJkZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsbykpfHwtMSE9PShpPXZ0LmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDoiZGRkIj09PWU/LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsbykpP2k6bnVsbDotMSE9PShpPXZ0LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxvKSl8fC0xIT09KGk9dnQuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLG8pKXx8LTEhPT0oaT12dC5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxvKSk/aTpudWxsfS5jYWxsKHRoaXMsdCxlLG4pO2Zvcih0aGlzLl93ZWVrZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSkscj0wO3I8NztyKyspe2lmKGk9ZChbMmUzLDFdKS5kYXkociksbiYmIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW3JdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5cyhpLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtyXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlW3JdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaSwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2RheXNQYXJzZVtyXXx8KGE9Il4iK3RoaXMud2Vla2RheXMoaSwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoaSwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKGksIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2Vbcl09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxuJiYiZGRkZCI9PT1lJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByO2lmKG4mJiJkZGQiPT09ZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW3JdLnRlc3QodCkpcmV0dXJuIHI7aWYobiYmImRkIj09PWUmJnRoaXMuX21pbldlZWtkYXlzUGFyc2Vbcl0udGVzdCh0KSlyZXR1cm4gcjtpZighbiYmdGhpcy5fd2Vla2RheXNQYXJzZVtyXS50ZXN0KHQpKXJldHVybiByfX0sY24ud2Vla2RheXNSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1JlZ2V4PXp0KSx0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGNuLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KTooaCh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9VXQpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCYmdD90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sY24ud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhoKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fHF0LmNhbGwodGhpcyksdD90aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzTWluUmVnZXgpOihoKHRoaXMsIl93ZWVrZGF5c01pblJlZ2V4Iil8fCh0aGlzLl93ZWVrZGF5c01pblJlZ2V4PSR0KSx0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZ0P3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCl9LGNuLmlzUE09ZnVuY3Rpb24odCl7cmV0dXJuInAiPT09KHQrIiIpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApfSxjbi5tZXJpZGllbT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIDExPHQ/bj8icG0iOiJQTSI6bj8iYW0iOiJBTSJ9LGVlKCJlbiIse2RheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPXQlMTA7cmV0dXJuIHQrKDE9PT13KHQlMTAwLzEwKT8idGgiOjE9PT1lPyJzdCI6Mj09PWU/Im5kIjozPT09ZT8icmQiOiJ0aCIpfX0pLGkubGFuZz1DKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsZWUpLGkubGFuZ0RhdGE9QygibW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLiIscmUpO3ZhciBmbj1NYXRoLmFicztmdW5jdGlvbiBkbih0LGUsbixyKXt2YXIgaT1SZShlLG4pO3JldHVybiB0Ll9taWxsaXNlY29uZHMrPXIqaS5fbWlsbGlzZWNvbmRzLHQuX2RheXMrPXIqaS5fZGF5cyx0Ll9tb250aHMrPXIqaS5fbW9udGhzLHQuX2J1YmJsZSgpfWZ1bmN0aW9uIHBuKHQpe3JldHVybiB0PDA/TWF0aC5mbG9vcih0KTpNYXRoLmNlaWwodCl9ZnVuY3Rpb24geW4odCl7cmV0dXJuIDQ4MDAqdC8xNDYwOTd9ZnVuY3Rpb24gZ24odCl7cmV0dXJuIDE0NjA5Nyp0LzQ4MDB9ZnVuY3Rpb24gbW4odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXModCl9fXZhciB2bj1tbigibXMiKSxibj1tbigicyIpLHhuPW1uKCJtIiksX249bW4oImgiKSxrbj1tbigiZCIpLHduPW1uKCJ3IiksVG49bW4oIk0iKSxFbj1tbigiUSIpLENuPW1uKCJ5Iik7ZnVuY3Rpb24gU24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMuX2RhdGFbdF06TmFOfX12YXIgQW49U24oIm1pbGxpc2Vjb25kcyIpLE1uPVNuKCJzZWNvbmRzIiksT249U24oIm1pbnV0ZXMiKSxObj1TbigiaG91cnMiKSxCbj1TbigiZGF5cyIpLERuPVNuKCJtb250aHMiKSxMbj1TbigieWVhcnMiKSxJbj1NYXRoLnJvdW5kLFJuPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LE06MTF9LEZuPU1hdGguYWJzO2Z1bmN0aW9uIFBuKHQpe3JldHVybigwPHQpLSh0PDApfHwrdH1mdW5jdGlvbiBqbigpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgdCxlLG49Rm4odGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMscj1Gbih0aGlzLl9kYXlzKSxpPUZuKHRoaXMuX21vbnRocyk7ZT1rKCh0PWsobi82MCkpLzYwKSxuJT02MCx0JT02MDt2YXIgYT1rKGkvMTIpLG89aSU9MTIscz1yLGM9ZSx1PXQsbD1uP24udG9GaXhlZCgzKS5yZXBsYWNlKC9cLj8wKyQvLCIiKToiIixoPXRoaXMuYXNTZWNvbmRzKCk7aWYoIWgpcmV0dXJuIlAwRCI7dmFyIGY9aDwwPyItIjoiIixkPVBuKHRoaXMuX21vbnRocykhPT1QbihoKT8iLSI6IiIscD1Qbih0aGlzLl9kYXlzKSE9PVBuKGgpPyItIjoiIix5PVBuKHRoaXMuX21pbGxpc2Vjb25kcykhPT1QbihoKT8iLSI6IiI7cmV0dXJuIGYrIlAiKyhhP2QrYSsiWSI6IiIpKyhvP2QrbysiTSI6IiIpKyhzP3ArcysiRCI6IiIpKyhjfHx1fHxsPyJUIjoiIikrKGM/eStjKyJIIjoiIikrKHU/eSt1KyJNIjoiIikrKGw/eStsKyJTIjoiIil9dmFyIFluPUVlLnByb3RvdHlwZTtyZXR1cm4gWW4uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxZbi5hYnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9Zm4odGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWZuKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1mbih0aGlzLl9tb250aHMpLHQubWlsbGlzZWNvbmRzPWZuKHQubWlsbGlzZWNvbmRzKSx0LnNlY29uZHM9Zm4odC5zZWNvbmRzKSx0Lm1pbnV0ZXM9Zm4odC5taW51dGVzKSx0LmhvdXJzPWZuKHQuaG91cnMpLHQubW9udGhzPWZuKHQubW9udGhzKSx0LnllYXJzPWZuKHQueWVhcnMpLHRoaXN9LFluLmFkZD1mdW5jdGlvbih0LGUpe3JldHVybiBkbih0aGlzLHQsZSwxKX0sWW4uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZG4odGhpcyx0LGUsLTEpfSxZbi5hcz1mdW5jdGlvbih0KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgZSxuLHI9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9PT0odD1JKHQpKXx8InF1YXJ0ZXIiPT09dHx8InllYXIiPT09dClzd2l0Y2goZT10aGlzLl9kYXlzK3IvODY0ZTUsbj10aGlzLl9tb250aHMreW4oZSksdCl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9ZWxzZSBzd2l0Y2goZT10aGlzLl9kYXlzK01hdGgucm91bmQoZ24odGhpcy5fbW9udGhzKSksdCl7Y2FzZSJ3ZWVrIjpyZXR1cm4gZS83K3IvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gZStyLzg2NGU1O2Nhc2UiaG91ciI6cmV0dXJuIDI0KmUrci8zNmU1O2Nhc2UibWludXRlIjpyZXR1cm4gMTQ0MCplK3IvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqZStyLzFlMztjYXNlIm1pbGxpc2Vjb25kIjpyZXR1cm4gTWF0aC5mbG9vcig4NjRlNSplKStyO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIit0KX19LFluLmFzTWlsbGlzZWNvbmRzPXZuLFluLmFzU2Vjb25kcz1ibixZbi5hc01pbnV0ZXM9eG4sWW4uYXNIb3Vycz1fbixZbi5hc0RheXM9a24sWW4uYXNXZWVrcz13bixZbi5hc01vbnRocz1UbixZbi5hc1F1YXJ0ZXJzPUVuLFluLmFzWWVhcnM9Q24sWW4udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLl9taWxsaXNlY29uZHMrODY0ZTUqdGhpcy5fZGF5cyt0aGlzLl9tb250aHMlMTIqMjU5MmU2KzMxNTM2ZTYqdyh0aGlzLl9tb250aHMvMTIpOk5hTn0sWW4uX2J1YmJsZT1mdW5jdGlvbigpe3ZhciB0LGUsbixyLGksYT10aGlzLl9taWxsaXNlY29uZHMsbz10aGlzLl9kYXlzLHM9dGhpcy5fbW9udGhzLGM9dGhpcy5fZGF0YTtyZXR1cm4gMDw9YSYmMDw9byYmMDw9c3x8YTw9MCYmbzw9MCYmczw9MHx8KGErPTg2NGU1KnBuKGduKHMpK28pLHM9bz0wKSxjLm1pbGxpc2Vjb25kcz1hJTFlMyx0PWsoYS8xZTMpLGMuc2Vjb25kcz10JTYwLGU9ayh0LzYwKSxjLm1pbnV0ZXM9ZSU2MCxuPWsoZS82MCksYy5ob3Vycz1uJTI0LHMrPWk9ayh5bihvKz1rKG4vMjQpKSksby09cG4oZ24oaSkpLHI9ayhzLzEyKSxzJT0xMixjLmRheXM9byxjLm1vbnRocz1zLGMueWVhcnM9cix0aGlzfSxZbi5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBSZSh0aGlzKX0sWW4uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0PUkodCksdGhpcy5pc1ZhbGlkKCk/dGhpc1t0KyJzIl0oKTpOYU59LFluLm1pbGxpc2Vjb25kcz1BbixZbi5zZWNvbmRzPU1uLFluLm1pbnV0ZXM9T24sWW4uaG91cnM9Tm4sWW4uZGF5cz1CbixZbi53ZWVrcz1mdW5jdGlvbigpe3JldHVybiBrKHRoaXMuZGF5cygpLzcpfSxZbi5tb250aHM9RG4sWW4ueWVhcnM9TG4sWW4uaHVtYW5pemU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBlLG4scixpLGEsbyxzLGMsdSxsLGg9dGhpcy5sb2NhbGVEYXRhKCksZj0oZT0hdCxuPWgscj1SZSh0aGlzKS5hYnMoKSxpPUluKHIuYXMoInMiKSksYT1JbihyLmFzKCJtIikpLG89SW4oci5hcygiaCIpKSxzPUluKHIuYXMoImQiKSksYz1JbihyLmFzKCJNIikpLHU9SW4oci5hcygieSIpKSwobD1pPD1Sbi5zcyYmWyJzIixpXXx8aTxSbi5zJiZbInNzIixpXXx8YTw9MSYmWyJtIl18fGE8Um4ubSYmWyJtbSIsYV18fG88PTEmJlsiaCJdfHxvPFJuLmgmJlsiaGgiLG9dfHxzPD0xJiZbImQiXXx8czxSbi5kJiZbImRkIixzXXx8Yzw9MSYmWyJNIl18fGM8Um4uTSYmWyJNTSIsY118fHU8PTEmJlsieSJdfHxbInl5Iix1XSlbMl09ZSxsWzNdPTA8K3RoaXMsbFs0XT1uLGZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkucmVsYXRpdmVUaW1lKGV8fDEsISFuLHQscil9LmFwcGx5KG51bGwsbCkpO3JldHVybiB0JiYoZj1oLnBhc3RGdXR1cmUoK3RoaXMsZikpLGgucG9zdGZvcm1hdChmKX0sWW4udG9JU09TdHJpbmc9am4sWW4udG9TdHJpbmc9am4sWW4udG9KU09OPWpuLFluLmxvY2FsZT1xZSxZbi5sb2NhbGVEYXRhPUhlLFluLnRvSXNvU3RyaW5nPUMoInRvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpIixqbiksWW4ubGFuZz1XZSxxKCJYIiwwLDAsInVuaXgiKSxxKCJ4IiwwLDAsInZhbHVlT2YiKSxsdCgieCIsYXQpLGx0KCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxwdCgiWCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KHQsMTApKX0pKSxwdCgieCIsKGZ1bmN0aW9uKHQsZSxuKXtuLl9kPW5ldyBEYXRlKHcodCkpfSkpLGkudmVyc2lvbj0iMi4yNC4wIixlPXhlLGkuZm49b24saS5taW49ZnVuY3Rpb24oKXtyZXR1cm4gd2UoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIHdlKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LGkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25ldyBEYXRlfSxpLnV0Yz1kLGkudW5peD1mdW5jdGlvbih0KXtyZXR1cm4geGUoMWUzKnQpfSxpLm1vbnRocz1mdW5jdGlvbih0LGUpe3JldHVybiBsbih0LGUsIm1vbnRocyIpfSxpLmlzRGF0ZT11LGkubG9jYWxlPWVlLGkuaW52YWxpZD1nLGkuZHVyYXRpb249UmUsaS5pc01vbWVudD1fLGkud2Vla2RheXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXMiKX0saS5wYXJzZVpvbmU9ZnVuY3Rpb24oKXtyZXR1cm4geGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSxpLmxvY2FsZURhdGE9cmUsaS5pc0R1cmF0aW9uPUNlLGkubW9udGhzU2hvcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbG4odCxlLCJtb250aHNTaG9ydCIpfSxpLndlZWtkYXlzTWluPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaG4odCxlLG4sIndlZWtkYXlzTWluIil9LGkuZGVmaW5lTG9jYWxlPW5lLGkudXBkYXRlTG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9ZSl7dmFyIG4scixpPVp0O251bGwhPShyPXRlKHQpKSYmKGk9ci5fY29uZmlnKSwobj1uZXcgQihlPU4oaSxlKSkpLnBhcmVudExvY2FsZT1LdFt0XSxLdFt0XT1uLGVlKHQpfWVsc2UgbnVsbCE9S3RbdF0mJihudWxsIT1LdFt0XS5wYXJlbnRMb2NhbGU/S3RbdF09S3RbdF0ucGFyZW50TG9jYWxlOm51bGwhPUt0W3RdJiZkZWxldGUgS3RbdF0pO3JldHVybiBLdFt0XX0saS5sb2NhbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIFMoS3QpfSxpLndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobih0LGUsbiwid2Vla2RheXNTaG9ydCIpfSxpLm5vcm1hbGl6ZVVuaXRzPUksaS5yZWxhdGl2ZVRpbWVSb3VuZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9JbjoiZnVuY3Rpb24iPT10eXBlb2YgdCYmKEluPXQsITApfSxpLnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1Sblt0XSYmKHZvaWQgMD09PWU/Um5bdF06KFJuW3RdPWUsInMiPT09dCYmKFJuLnNzPWUtMSksITApKX0saS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZGlmZihlLCJkYXlzIiwhMCk7cmV0dXJuIG48LTY/InNhbWVFbHNlIjpuPC0xPyJsYXN0V2VlayI6bjwwPyJsYXN0RGF5IjpuPDE/InNhbWVEYXkiOm48Mj8ibmV4dERheSI6bjw3PyJuZXh0V2VlayI6InNhbWVFbHNlIn0saS5wcm90b3R5cGU9b24saS5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0saX0oKX0pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSwzXSxuPVsxLDVdLHI9WzcsOSwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMSwyOCwzM10saT1bMSwxNV0sYT1bMSwxNl0sbz1bMSwxN10scz1bMSwxOF0sYz1bMSwxOV0sdT1bMSwyMF0sbD1bMSwyMV0saD1bMSwyMl0sZj1bMSwyNF0sZD1bMSwyNl0scD1bMSwyOV0seT1bNSw3LDksMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjEsMjgsMzNdLGc9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LGdhbnR0OjUsZG9jdW1lbnQ6NixFT0Y6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkw6MTEsZGF0ZUZvcm1hdDoxMixpbmNsdXNpdmVFbmREYXRlczoxMyx0b3BBeGlzOjE0LGF4aXNGb3JtYXQ6MTUsZXhjbHVkZXM6MTYsdG9kYXlNYXJrZXI6MTcsdGl0bGU6MTgsc2VjdGlvbjoxOSxjbGlja1N0YXRlbWVudDoyMCx0YXNrVHh0OjIxLHRhc2tEYXRhOjIyLG9wZW5EaXJlY3RpdmU6MjMsdHlwZURpcmVjdGl2ZToyNCxjbG9zZURpcmVjdGl2ZToyNSwiOiI6MjYsYXJnRGlyZWN0aXZlOjI3LGNsaWNrOjI4LGNhbGxiYWNrbmFtZToyOSxjYWxsYmFja2FyZ3M6MzAsaHJlZjozMSxjbGlja1N0YXRlbWVudERlYnVnOjMyLG9wZW5fZGlyZWN0aXZlOjMzLHR5cGVfZGlyZWN0aXZlOjM0LGFyZ19kaXJlY3RpdmU6MzUsY2xvc2VfZGlyZWN0aXZlOjM2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw1OiJnYW50dCIsNzoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5MIiwxMjoiZGF0ZUZvcm1hdCIsMTM6ImluY2x1c2l2ZUVuZERhdGVzIiwxNDoidG9wQXhpcyIsMTU6ImF4aXNGb3JtYXQiLDE2OiJleGNsdWRlcyIsMTc6InRvZGF5TWFya2VyIiwxODoidGl0bGUiLDE5OiJzZWN0aW9uIiwyMToidGFza1R4dCIsMjI6InRhc2tEYXRhIiwyNjoiOiIsMjg6ImNsaWNrIiwyOToiY2FsbGJhY2tuYW1lIiwzMDoiY2FsbGJhY2thcmdzIiwzMToiaHJlZiIsMzM6Im9wZW5fZGlyZWN0aXZlIiwzNDoidHlwZV9kaXJlY3RpdmUiLDM1OiJhcmdfZGlyZWN0aXZlIiwzNjoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDJdLFszLDNdLFs2LDBdLFs2LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwxXSxbMTAsMV0sWzEwLDFdLFsxMCwyXSxbMTAsMV0sWzQsNF0sWzQsNl0sWzIwLDJdLFsyMCwzXSxbMjAsM10sWzIwLDRdLFsyMCwzXSxbMjAsNF0sWzIwLDJdLFszMiwyXSxbMzIsM10sWzMyLDNdLFszMiw0XSxbMzIsM10sWzMyLDRdLFszMiwyXSxbMjMsMV0sWzI0LDFdLFsyNywxXSxbMjUsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAyOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgOTpyLnNldERhdGVGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTA6ci5lbmFibGVJbmNsdXNpdmVFbmREYXRlcygpLHRoaXMuJD1hW3NdLnN1YnN0cigxOCk7YnJlYWs7Y2FzZSAxMTpyLlRvcEF4aXMoKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMjpyLnNldEF4aXNGb3JtYXQoYVtzXS5zdWJzdHIoMTEpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoMTEpO2JyZWFrO2Nhc2UgMTM6ci5zZXRFeGNsdWRlcyhhW3NdLnN1YnN0cig5KSksdGhpcy4kPWFbc10uc3Vic3RyKDkpO2JyZWFrO2Nhc2UgMTQ6ci5zZXRUb2RheU1hcmtlcihhW3NdLnN1YnN0cigxMikpLHRoaXMuJD1hW3NdLnN1YnN0cigxMik7YnJlYWs7Y2FzZSAxNTpyLnNldFRpdGxlKGFbc10uc3Vic3RyKDYpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoNik7YnJlYWs7Y2FzZSAxNjpyLmFkZFNlY3Rpb24oYVtzXS5zdWJzdHIoOCkpLHRoaXMuJD1hW3NdLnN1YnN0cig4KTticmVhaztjYXNlIDE4OnIuYWRkVGFzayhhW3MtMV0sYVtzXSksdGhpcy4kPSJ0YXNrIjticmVhaztjYXNlIDIyOnRoaXMuJD1hW3MtMV0sci5zZXRDbGlja0V2ZW50KGFbcy0xXSxhW3NdLG51bGwpO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDI0OnRoaXMuJD1hW3MtMl0sci5zZXRDbGlja0V2ZW50KGFbcy0yXSxhW3MtMV0sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDI1OnRoaXMuJD1hW3MtM10sci5zZXRDbGlja0V2ZW50KGFbcy0zXSxhW3MtMl0sYVtzLTFdKSxyLnNldExpbmsoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbc10sbnVsbCksci5zZXRMaW5rKGFbcy0yXSxhW3MtMV0pO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPWFbcy0zXSxyLnNldENsaWNrRXZlbnQoYVtzLTNdLGFbcy0xXSxhW3NdKSxyLnNldExpbmsoYVtzLTNdLGFbcy0yXSk7YnJlYWs7Y2FzZSAyODp0aGlzLiQ9YVtzLTFdLHIuc2V0TGluayhhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSAyOTpjYXNlIDM1OnRoaXMuJD1hW3MtMV0rIiAiK2Fbc107YnJlYWs7Y2FzZSAzMDpjYXNlIDMxOmNhc2UgMzM6dGhpcy4kPWFbcy0yXSsiICIrYVtzLTFdKyIgIithW3NdO2JyZWFrO2Nhc2UgMzI6Y2FzZSAzNDp0aGlzLiQ9YVtzLTNdKyIgIithW3MtMl0rIiAiK2Fbcy0xXSsiICIrYVtzXTticmVhaztjYXNlIDM2OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAzODphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzk6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwiZ2FudHQiKX19LHRhYmxlOlt7MzoxLDQ6Miw1OmUsMjM6NCwzMzpufSx7MTpbM119LHszOjYsNDoyLDU6ZSwyMzo0LDMzOm59LHQocixbMiwzXSx7Njo3fSksezI0OjgsMzQ6WzEsOV19LHszNDpbMiwzNl19LHsxOlsyLDFdfSx7NDoyNSw3OlsxLDEwXSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjppLDEzOmEsMTQ6bywxNTpzLDE2OmMsMTc6dSwxODpsLDE5OmgsMjA6MjMsMjE6ZiwyMzo0LDI4OmQsMzM6bn0sezI1OjI3LDI2OlsxLDI4XSwzNjpwfSx0KFsyNiwzNl0sWzIsMzddKSx0KHIsWzIsOF0sezE6WzIsMl19KSx0KHIsWzIsNF0pLHs0OjI1LDEwOjMwLDEyOmksMTM6YSwxNDpvLDE1OnMsMTY6YywxNzp1LDE4OmwsMTk6aCwyMDoyMywyMTpmLDIzOjQsMjg6ZCwzMzpufSx0KHIsWzIsNl0pLHQocixbMiw3XSksdChyLFsyLDldKSx0KHIsWzIsMTBdKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMTNdKSx0KHIsWzIsMTRdKSx0KHIsWzIsMTVdKSx0KHIsWzIsMTZdKSx0KHIsWzIsMTddKSx7MjI6WzEsMzFdfSx0KHIsWzIsMTldKSx7Mjk6WzEsMzJdLDMxOlsxLDMzXX0sezExOlsxLDM0XX0sezI3OjM1LDM1OlsxLDM2XX0sezExOlsyLDM5XX0sdChyLFsyLDVdKSx0KHIsWzIsMThdKSx0KHIsWzIsMjJdLHszMDpbMSwzN10sMzE6WzEsMzhdfSksdChyLFsyLDI4XSx7Mjk6WzEsMzldfSksdCh5LFsyLDIwXSksezI1OjQwLDM2OnB9LHszNjpbMiwzOF19LHQocixbMiwyM10sezMxOlsxLDQxXX0pLHQocixbMiwyNF0pLHQocixbMiwyNl0sezMwOlsxLDQyXX0pLHsxMTpbMSw0M119LHQocixbMiwyNV0pLHQocixbMiwyN10pLHQoeSxbMiwyMV0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwzNl0sNjpbMiwxXSwyOTpbMiwzOV0sMzY6WzIsMzhdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbT17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDMzO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwzNDtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMjY7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDM2O2Nhc2UgNDpyZXR1cm4gMzU7Y2FzZSA1OmNhc2UgNjpjYXNlIDc6YnJlYWs7Y2FzZSA4OnJldHVybiAxMTtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmJyZWFrO2Nhc2UgMTI6dGhpcy5iZWdpbigiaHJlZiIpO2JyZWFrO2Nhc2UgMTM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMTQ6cmV0dXJuIDMxO2Nhc2UgMTU6dGhpcy5iZWdpbigiY2FsbGJhY2tuYW1lIik7YnJlYWs7Y2FzZSAxNjp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNzp0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiY2FsbGJhY2thcmdzIik7YnJlYWs7Y2FzZSAxODpyZXR1cm4gMjk7Y2FzZSAxOTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAyMDpyZXR1cm4gMzA7Y2FzZSAyMTp0aGlzLmJlZ2luKCJjbGljayIpO2JyZWFrO2Nhc2UgMjI6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjM6cmV0dXJuIDI4O2Nhc2UgMjQ6cmV0dXJuIDU7Y2FzZSAyNTpyZXR1cm4gMTI7Y2FzZSAyNjpyZXR1cm4gMTM7Y2FzZSAyNzpyZXR1cm4gMTQ7Y2FzZSAyODpyZXR1cm4gMTU7Y2FzZSAyOTpyZXR1cm4gMTY7Y2FzZSAzMDpyZXR1cm4gMTc7Y2FzZSAzMTpyZXR1cm4iZGF0ZSI7Y2FzZSAzMjpyZXR1cm4gMTg7Y2FzZSAzMzpyZXR1cm4gMTk7Y2FzZSAzNDpyZXR1cm4gMjE7Y2FzZSAzNTpyZXR1cm4gMjI7Y2FzZSAzNjpyZXR1cm4gMjY7Y2FzZSAzNzpyZXR1cm4gNztjYXNlIDM4OnJldHVybiJJTlZBTElEIn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUlKD8hXHspKlteXG5dKikvaSwvXig/OlteXH1dJSUqW15cbl0qKS9pLC9eKD86JSUqW15cbl0qW1xuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzolW15cbl0qKS9pLC9eKD86aHJlZltcc10rWyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpjYWxsW1xzXSspL2ksL14oPzpcKFtcc10qXCkpL2ksL14oPzpcKCkvaSwvXig/OlteKF0qKS9pLC9eKD86XCkpL2ksL14oPzpbXildKikvaSwvXig/OmNsaWNrW1xzXSspL2ksL14oPzpbXHNcbl0pL2ksL14oPzpbXlxzXG5dKikvaSwvXig/OmdhbnR0XGIpL2ksL14oPzpkYXRlRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmluY2x1c2l2ZUVuZERhdGVzXGIpL2ksL14oPzp0b3BBeGlzXGIpL2ksL14oPzpheGlzRm9ybWF0XHNbXiNcbjtdKykvaSwvXig/OmV4Y2x1ZGVzXHNbXiNcbjtdKykvaSwvXig/OnRvZGF5TWFya2VyXHNbXlxuO10rKS9pLC9eKD86XGRcZFxkXGQtXGRcZC1cZFxkXGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsxOSwyMF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsxNiwxNywxOF0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTMsMTRdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyMiwyM10saW5jbHVzaXZlOiExfSxJTklUSUFMOntydWxlczpbMCw1LDYsNyw4LDksMTAsMTEsMTIsMTUsMjEsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzhdLGluY2x1c2l2ZTohMH19fTtmdW5jdGlvbiB2KCl7dGhpcy55eT17fX1yZXR1cm4gZy5sZXhlcj1tLHYucHJvdG90eXBlPWcsZy5QYXJzZXI9dixuZXcgdn0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTIpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOSksaT1uKDgyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJmkodC5sZW5ndGgpJiYhcih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI2MSksaT1uKDI3MSksYT1uKDM2KSxvPW4oNSkscz1uKDI3OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6bnVsbD09dD9hOiJvYmplY3QiPT10eXBlb2YgdD9vKHQpP2kodFswXSx0WzFdKTpyKHQpOnModCl9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDldLG49WzEsN10scj1bMSw2XSxpPVsxLDhdLGE9WzEsMjAsMjEsMjIsMjMsMzgsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbz1bMiwxMF0scz1bMSwyMF0sYz1bMSwyMV0sdT1bMSwyMl0sbD1bMSwyM10saD1bMSwzMF0sZj1bMSw1OV0sZD1bMSwzM10scD1bMSwzNF0seT1bMSwzNV0sZz1bMSwzNl0sbT1bMSwzN10sdj1bMSw1M10sYj1bMSw0OF0seD1bMSw1MF0sXz1bMSw0NV0saz1bMSw0OV0sdz1bMSw1Ml0sVD1bMSw1Nl0sRT1bMSw1N10sQz1bMSwzOF0sUz1bMSwzOV0sQT1bMSw0MF0sTT1bMSw0MV0sTz1bMSw1OF0sTj1bMSw0N10sQj1bMSw1MV0sRD1bMSw1NF0sTD1bMSw1NV0sST1bMSw0Nl0sUj1bMSw2Ml0sRj1bMSw2N10sUD1bMSwyMCwyMSwyMiwyMywzOCw0Miw0Nyw3Niw3Nyw3OCw3OSw4MCw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxqPVsxLDcxXSxZPVsxLDcwXSx6PVsxLDcyXSxVPVsyMCwyMSwyMyw3MCw3MV0sJD1bMSw5M10scT1bMSw5OF0sVz1bMSw5NV0sSD1bMSwxMDBdLFY9WzEsMTAzXSxHPVsxLDEwMV0sWD1bMSwxMDJdLFo9WzEsOTZdLEs9WzEsMTA4XSxRPVsxLDEwN10sSj1bMSw5N10sdHQ9WzEsOTldLGV0PVsxLDEwNF0sbnQ9WzEsMTA1XSxydD1bMSwxMDZdLGl0PVsxLDEwOV0sYXQ9WzIwLDIxLDIyLDIzLDcwLDcxXSxvdD1bMjAsMjEsMjIsMjMsNDgsNzAsNzFdLHN0PVsyMCwyMSwyMiwyMyw0MCw0Nyw0OCw1MCw1Miw1NCw1Niw1OCw2MCw2Miw2Myw2NSw3MCw3MSw4MSw5NSw5Niw5OSwxMDAsMTAxLDEwMywxMDQsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLGN0PVsyMCwyMSwyM10sdXQ9WzIwLDIxLDIzLDQ3LDcwLDcxLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sbHQ9WzEsMTIsMjAsMjEsMjIsMjMsMjQsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0saHQ9WzQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sZnQ9WzEsMTQxXSxkdD1bMSwxNDldLHB0PVsxLDE1MF0seXQ9WzEsMTUxXSxndD1bMSwxNTJdLG10PVsxLDEzNl0sdnQ9WzEsMTM3XSxidD1bMSwxMzNdLHh0PVsxLDE0NF0sX3Q9WzEsMTQ1XSxrdD1bMSwxNDZdLHd0PVsxLDE0N10sVHQ9WzEsMTQ4XSxFdD1bMSwxNTNdLEN0PVsxLDE1NF0sU3Q9WzEsMTM5XSxBdD1bMSwxNDJdLE10PVsxLDEzOF0sT3Q9WzEsMTM1XSxOdD1bMjAsMjEsMjIsMjMsMzgsNDIsNDcsNzYsNzcsNzgsNzksODAsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sQnQ9WzEsMTU3XSxEdD1bMjAsMjEsMjIsMjMsMjYsNDcsODEsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDExNCwxMTUsMTE2LDExNywxMTgsMTE5XSxMdD1bMjAsMjEsMjIsMjMsMjQsMjYsMzgsNDAsNDEsNDIsNDcsNTEsNTMsNTUsNTcsNTksNjEsNjIsNjQsNjYsNzAsNzEsNzIsNzYsNzcsNzgsNzksODAsODEsODIsODUsOTUsOTYsOTksMTAwLDEwMSwxMDMsMTA0LDEwNSwxMDYsMTE0LDExNSwxMTYsMTE3LDExOCwxMTldLEl0PVsxMiwyMSwyMiwyNF0sUnQ9WzIyLDk2XSxGdD1bMSwyMzhdLFB0PVsxLDI0Ml0sanQ9WzEsMjM5XSxZdD1bMSwyMzZdLHp0PVsxLDIzM10sVXQ9WzEsMjM0XSwkdD1bMSwyMzVdLHF0PVsxLDIzN10sV3Q9WzEsMjQwXSxIdD1bMSwyNDFdLFZ0PVsxLDI0M10sR3Q9WzEsMjYwXSxYdD1bMjAsMjEsMjMsOTZdLFp0PVsyMCwyMSwyMiwyMyw3Niw5Miw5NSw5Niw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNV0sS3Q9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLG1lcm1haWREb2M6NCxkaXJlY3RpdmU6NSxvcGVuRGlyZWN0aXZlOjYsdHlwZURpcmVjdGl2ZTo3LGNsb3NlRGlyZWN0aXZlOjgsc2VwYXJhdG9yOjksIjoiOjEwLGFyZ0RpcmVjdGl2ZToxMSxvcGVuX2RpcmVjdGl2ZToxMix0eXBlX2RpcmVjdGl2ZToxMyxhcmdfZGlyZWN0aXZlOjE0LGNsb3NlX2RpcmVjdGl2ZToxNSxncmFwaENvbmZpZzoxNixkb2N1bWVudDoxNyxsaW5lOjE4LHN0YXRlbWVudDoxOSxTRU1JOjIwLE5FV0xJTkU6MjEsU1BBQ0U6MjIsRU9GOjIzLEdSQVBIOjI0LE5PRElSOjI1LERJUjoyNixGaXJzdFN0bXRTZXBlcmF0b3I6MjcsZW5kaW5nOjI4LGVuZFRva2VuOjI5LHNwYWNlTGlzdDozMCxzcGFjZUxpc3ROZXdsaW5lOjMxLHZlcnRpY2VTdGF0ZW1lbnQ6MzIsc3R5bGVTdGF0ZW1lbnQ6MzMsbGlua1N0eWxlU3RhdGVtZW50OjM0LGNsYXNzRGVmU3RhdGVtZW50OjM1LGNsYXNzU3RhdGVtZW50OjM2LGNsaWNrU3RhdGVtZW50OjM3LHN1YmdyYXBoOjM4LHRleHQ6MzksU1FTOjQwLFNRRTo0MSxlbmQ6NDIsZGlyZWN0aW9uOjQzLGxpbms6NDQsbm9kZTo0NSx2ZXJ0ZXg6NDYsQU1QOjQ3LFNUWUxFX1NFUEFSQVRPUjo0OCxpZFN0cmluZzo0OSxQUzo1MCxQRTo1MSwiKC0iOjUyLCItKSI6NTMsU1RBRElVTVNUQVJUOjU0LFNUQURJVU1FTkQ6NTUsU1VCUk9VVElORVNUQVJUOjU2LFNVQlJPVVRJTkVFTkQ6NTcsQ1lMSU5ERVJTVEFSVDo1OCxDWUxJTkRFUkVORDo1OSxESUFNT05EX1NUQVJUOjYwLERJQU1PTkRfU1RPUDo2MSxUQUdFTkQ6NjIsVFJBUFNUQVJUOjYzLFRSQVBFTkQ6NjQsSU5WVFJBUFNUQVJUOjY1LElOVlRSQVBFTkQ6NjYsbGlua1N0YXRlbWVudDo2NyxhcnJvd1RleHQ6NjgsVEVTVFNUUjo2OSxTVEFSVF9MSU5LOjcwLExJTks6NzEsUElQRTo3Mix0ZXh0VG9rZW46NzMsU1RSOjc0LGtleXdvcmRzOjc1LFNUWUxFOjc2LExJTktTVFlMRTo3NyxDTEFTU0RFRjo3OCxDTEFTUzo3OSxDTElDSzo4MCxET1dOOjgxLFVQOjgyLHRleHROb1RhZ3M6ODMsdGV4dE5vVGFnc1Rva2VuOjg0LERFRkFVTFQ6ODUsc3R5bGVzT3B0Ojg2LGFscGhhTnVtOjg3LENBTExCQUNLTkFNRTo4OCxDQUxMQkFDS0FSR1M6ODksSFJFRjo5MCxMSU5LX1RBUkdFVDo5MSxIRVg6OTIsbnVtTGlzdDo5MyxJTlRFUlBPTEFURTo5NCxOVU06OTUsQ09NTUE6OTYsc3R5bGU6OTcsc3R5bGVDb21wb25lbnQ6OTgsQUxQSEE6OTksQ09MT046MTAwLE1JTlVTOjEwMSxVTklUOjEwMixCUktUOjEwMyxET1Q6MTA0LFBDVDoxMDUsVEFHU1RBUlQ6MTA2LGFscGhhTnVtVG9rZW46MTA3LGlkU3RyaW5nVG9rZW46MTA4LGFscGhhTnVtU3RhdGVtZW50OjEwOSxkaXJlY3Rpb25fdGI6MTEwLGRpcmVjdGlvbl9idDoxMTEsZGlyZWN0aW9uX3JsOjExMixkaXJlY3Rpb25fbHI6MTEzLFBVTkNUVUFUSU9OOjExNCxVTklDT0RFX1RFWFQ6MTE1LFBMVVM6MTE2LEVRVUFMUzoxMTcsTVVMVDoxMTgsVU5ERVJTQ09SRToxMTksZ3JhcGhDb2RlVG9rZW5zOjEyMCxBUlJPV19DUk9TUzoxMjEsQVJST1dfUE9JTlQ6MTIyLEFSUk9XX0NJUkNMRToxMjMsQVJST1dfT1BFTjoxMjQsUVVPVEU6MTI1LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiwxMDoiOiIsMTI6Im9wZW5fZGlyZWN0aXZlIiwxMzoidHlwZV9kaXJlY3RpdmUiLDE0OiJhcmdfZGlyZWN0aXZlIiwxNToiY2xvc2VfZGlyZWN0aXZlIiwyMDoiU0VNSSIsMjE6Ik5FV0xJTkUiLDIyOiJTUEFDRSIsMjM6IkVPRiIsMjQ6IkdSQVBIIiwyNToiTk9ESVIiLDI2OiJESVIiLDM4OiJzdWJncmFwaCIsNDA6IlNRUyIsNDE6IlNRRSIsNDI6ImVuZCIsNDc6IkFNUCIsNDg6IlNUWUxFX1NFUEFSQVRPUiIsNTA6IlBTIiw1MToiUEUiLDUyOiIoLSIsNTM6Ii0pIiw1NDoiU1RBRElVTVNUQVJUIiw1NToiU1RBRElVTUVORCIsNTY6IlNVQlJPVVRJTkVTVEFSVCIsNTc6IlNVQlJPVVRJTkVFTkQiLDU4OiJDWUxJTkRFUlNUQVJUIiw1OToiQ1lMSU5ERVJFTkQiLDYwOiJESUFNT05EX1NUQVJUIiw2MToiRElBTU9ORF9TVE9QIiw2MjoiVEFHRU5EIiw2MzoiVFJBUFNUQVJUIiw2NDoiVFJBUEVORCIsNjU6IklOVlRSQVBTVEFSVCIsNjY6IklOVlRSQVBFTkQiLDY5OiJURVNUU1RSIiw3MDoiU1RBUlRfTElOSyIsNzE6IkxJTksiLDcyOiJQSVBFIiw3NDoiU1RSIiw3NjoiU1RZTEUiLDc3OiJMSU5LU1RZTEUiLDc4OiJDTEFTU0RFRiIsNzk6IkNMQVNTIiw4MDoiQ0xJQ0siLDgxOiJET1dOIiw4MjoiVVAiLDg1OiJERUZBVUxUIiw4ODoiQ0FMTEJBQ0tOQU1FIiw4OToiQ0FMTEJBQ0tBUkdTIiw5MDoiSFJFRiIsOTE6IkxJTktfVEFSR0VUIiw5MjoiSEVYIiw5NDoiSU5URVJQT0xBVEUiLDk1OiJOVU0iLDk2OiJDT01NQSIsOTk6IkFMUEhBIiwxMDA6IkNPTE9OIiwxMDE6Ik1JTlVTIiwxMDI6IlVOSVQiLDEwMzoiQlJLVCIsMTA0OiJET1QiLDEwNToiUENUIiwxMDY6IlRBR1NUQVJUIiwxMTA6ImRpcmVjdGlvbl90YiIsMTExOiJkaXJlY3Rpb25fYnQiLDExMjoiZGlyZWN0aW9uX3JsIiwxMTM6ImRpcmVjdGlvbl9sciIsMTE0OiJQVU5DVFVBVElPTiIsMTE1OiJVTklDT0RFX1RFWFQiLDExNjoiUExVUyIsMTE3OiJFUVVBTFMiLDExODoiTVVMVCIsMTE5OiJVTkRFUlNDT1JFIiwxMjE6IkFSUk9XX0NST1NTIiwxMjI6IkFSUk9XX1BPSU5UIiwxMjM6IkFSUk9XX0NJUkNMRSIsMTI0OiJBUlJPV19PUEVOIiwxMjU6IlFVT1RFIn0scHJvZHVjdGlvbnNfOlswLFszLDFdLFszLDJdLFs1LDRdLFs1LDZdLFs2LDFdLFs3LDFdLFsxMSwxXSxbOCwxXSxbNCwyXSxbMTcsMF0sWzE3LDJdLFsxOCwxXSxbMTgsMV0sWzE4LDFdLFsxOCwxXSxbMTgsMV0sWzE2LDJdLFsxNiwyXSxbMTYsMl0sWzE2LDNdLFsyOCwyXSxbMjgsMV0sWzI5LDFdLFsyOSwxXSxbMjksMV0sWzI3LDFdLFsyNywxXSxbMjcsMl0sWzMxLDJdLFszMSwyXSxbMzEsMV0sWzMxLDFdLFszMCwyXSxbMzAsMV0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDJdLFsxOSwyXSxbMTksMl0sWzE5LDldLFsxOSw2XSxbMTksNF0sWzE5LDFdLFs5LDFdLFs5LDFdLFs5LDFdLFszMiwzXSxbMzIsNF0sWzMyLDJdLFszMiwxXSxbNDUsMV0sWzQ1LDVdLFs0NSwzXSxbNDYsNF0sWzQ2LDZdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0Niw2XSxbNDYsNF0sWzQ2LDRdLFs0Niw0XSxbNDYsNF0sWzQ2LDRdLFs0NiwxXSxbNDQsMl0sWzQ0LDNdLFs0NCwzXSxbNDQsMV0sWzQ0LDNdLFs2NywxXSxbNjgsM10sWzM5LDFdLFszOSwyXSxbMzksMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbNzUsMV0sWzc1LDFdLFs3NSwxXSxbODMsMV0sWzgzLDJdLFszNSw1XSxbMzUsNV0sWzM2LDVdLFszNywyXSxbMzcsNF0sWzM3LDNdLFszNyw1XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzM3LDJdLFszNyw0XSxbMzcsMl0sWzM3LDRdLFszNyw0XSxbMzcsNl0sWzMzLDVdLFszMyw1XSxbMzQsNV0sWzM0LDVdLFszNCw5XSxbMzQsOV0sWzM0LDddLFszNCw3XSxbOTMsMV0sWzkzLDNdLFs4NiwxXSxbODYsM10sWzk3LDFdLFs5NywyXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs5OCwxXSxbOTgsMV0sWzk4LDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs3MywxXSxbNzMsMV0sWzczLDFdLFs4NCwxXSxbODQsMV0sWzg0LDFdLFs4NCwxXSxbNDksMV0sWzQ5LDJdLFs4NywxXSxbODcsMl0sWzEwOSwxXSxbMTA5LDFdLFsxMDksMV0sWzEwOSwxXSxbNDMsMV0sWzQzLDFdLFs0MywxXSxbNDMsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA3LDFdLFsxMDcsMV0sWzEwNywxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTA4LDFdLFsxMDgsMV0sWzEwOCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdLFsxMjAsMV0sWzEyMCwxXSxbMTIwLDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA3OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImZsb3djaGFydCIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6YVtzXSE9PVtdJiZhW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgMTI6Y2FzZSA3NzpjYXNlIDc5OmNhc2UgOTE6Y2FzZSAxNDc6Y2FzZSAxNDk6Y2FzZSAxNTA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAxOTpyLnNldERpcmVjdGlvbigiVEIiKSx0aGlzLiQ9IlRCIjticmVhaztjYXNlIDIwOnIuc2V0RGlyZWN0aW9uKGFbcy0xXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDM1OnRoaXMuJD1hW3MtMV0ubm9kZXM7YnJlYWs7Y2FzZSAzNjpjYXNlIDM3OmNhc2UgMzg6Y2FzZSAzOTpjYXNlIDQwOnRoaXMuJD1bXTticmVhaztjYXNlIDQxOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy02XSxhW3MtMV0sYVtzLTRdKTticmVhaztjYXNlIDQyOnRoaXMuJD1yLmFkZFN1YkdyYXBoKGFbcy0zXSxhW3MtMV0sYVtzLTNdKTticmVhaztjYXNlIDQzOnRoaXMuJD1yLmFkZFN1YkdyYXBoKHZvaWQgMCxhW3MtMV0sdm9pZCAwKTticmVhaztjYXNlIDQ4OnIuYWRkTGluayhhW3MtMl0uc3RtdCxhW3NdLGFbcy0xXSksdGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXS5jb25jYXQoYVtzLTJdLm5vZGVzKX07YnJlYWs7Y2FzZSA0OTpyLmFkZExpbmsoYVtzLTNdLnN0bXQsYVtzLTFdLGFbcy0yXSksdGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV0uY29uY2F0KGFbcy0zXS5ub2Rlcyl9O2JyZWFrO2Nhc2UgNTA6dGhpcy4kPXtzdG10OmFbcy0xXSxub2RlczphW3MtMV19O2JyZWFrO2Nhc2UgNTE6dGhpcy4kPXtzdG10OmFbc10sbm9kZXM6YVtzXX07YnJlYWs7Y2FzZSA1Mjp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgNTM6dGhpcy4kPWFbcy00XS5jb25jYXQoYVtzXSk7YnJlYWs7Y2FzZSA1NDp0aGlzLiQ9W2Fbcy0yXV0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA1NTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInNxdWFyZSIpO2JyZWFrO2Nhc2UgNTY6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJjaXJjbGUiKTticmVhaztjYXNlIDU3OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZWxsaXBzZSIpO2JyZWFrO2Nhc2UgNTg6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJzdGFkaXVtIik7YnJlYWs7Y2FzZSA1OTp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sInN1YnJvdXRpbmUiKTticmVhaztjYXNlIDYwOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiY3lsaW5kZXIiKTticmVhaztjYXNlIDYxOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwicm91bmQiKTticmVhaztjYXNlIDYyOnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiZGlhbW9uZCIpO2JyZWFrO2Nhc2UgNjM6dGhpcy4kPWFbcy01XSxyLmFkZFZlcnRleChhW3MtNV0sYVtzLTJdLCJoZXhhZ29uIik7YnJlYWs7Y2FzZSA2NDp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sIm9kZCIpO2JyZWFrO2Nhc2UgNjU6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJ0cmFwZXpvaWQiKTticmVhaztjYXNlIDY2OnRoaXMuJD1hW3MtM10sci5hZGRWZXJ0ZXgoYVtzLTNdLGFbcy0xXSwiaW52X3RyYXBlem9pZCIpO2JyZWFrO2Nhc2UgNjc6dGhpcy4kPWFbcy0zXSxyLmFkZFZlcnRleChhW3MtM10sYVtzLTFdLCJsZWFuX3JpZ2h0Iik7YnJlYWs7Y2FzZSA2ODp0aGlzLiQ9YVtzLTNdLHIuYWRkVmVydGV4KGFbcy0zXSxhW3MtMV0sImxlYW5fbGVmdCIpO2JyZWFrO2Nhc2UgNjk6dGhpcy4kPWFbc10sci5hZGRWZXJ0ZXgoYVtzXSk7YnJlYWs7Y2FzZSA3MDphW3MtMV0udGV4dD1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3MTpjYXNlIDcyOmFbcy0yXS50ZXh0PWFbcy0xXSx0aGlzLiQ9YVtzLTJdO2JyZWFrO2Nhc2UgNzM6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3NDp2YXIgYz1yLmRlc3RydWN0TGluayhhW3NdLGFbcy0yXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RoLHRleHQ6YVtzLTFdfTticmVhaztjYXNlIDc1OmM9ci5kZXN0cnVjdExpbmsoYVtzXSk7dGhpcy4kPXt0eXBlOmMudHlwZSxzdHJva2U6Yy5zdHJva2UsbGVuZ3RoOmMubGVuZ3RofTticmVhaztjYXNlIDc2OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3ODpjYXNlIDkyOmNhc2UgMTQ4OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDkzOmNhc2UgOTQ6dGhpcy4kPWFbcy00XSxyLmFkZENsYXNzKGFbcy0yXSxhW3NdKTticmVhaztjYXNlIDk1OnRoaXMuJD1hW3MtNF0sci5zZXRDbGFzcyhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSA5NjpjYXNlIDEwNDp0aGlzLiQ9YVtzLTFdLHIuc2V0Q2xpY2tFdmVudChhW3MtMV0sYVtzXSk7YnJlYWs7Y2FzZSA5NzpjYXNlIDEwNTp0aGlzLiQ9YVtzLTNdLHIuc2V0Q2xpY2tFdmVudChhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgOTg6dGhpcy4kPWFbcy0yXSxyLnNldENsaWNrRXZlbnQoYVtzLTJdLGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDk5OnRoaXMuJD1hW3MtNF0sci5zZXRDbGlja0V2ZW50KGFbcy00XSxhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgMTAwOmNhc2UgMTA2OnRoaXMuJD1hW3MtMV0sci5zZXRMaW5rKGFbcy0xXSxhW3NdKTticmVhaztjYXNlIDEwMTpjYXNlIDEwNzp0aGlzLiQ9YVtzLTNdLHIuc2V0TGluayhhW3MtM10sYVtzLTJdKSxyLnNldFRvb2x0aXAoYVtzLTNdLGFbc10pO2JyZWFrO2Nhc2UgMTAyOmNhc2UgMTA4OnRoaXMuJD1hW3MtM10sci5zZXRMaW5rKGFbcy0zXSxhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMDM6Y2FzZSAxMDk6dGhpcy4kPWFbcy01XSxyLnNldExpbmsoYVtzLTVdLGFbcy00XSxhW3NdKSxyLnNldFRvb2x0aXAoYVtzLTVdLGFbcy0yXSk7YnJlYWs7Y2FzZSAxMTA6dGhpcy4kPWFbcy00XSxyLmFkZFZlcnRleChhW3MtMl0sdm9pZCAwLHZvaWQgMCxhW3NdKTticmVhaztjYXNlIDExMTpjYXNlIDExMzp0aGlzLiQ9YVtzLTRdLHIudXBkYXRlTGluayhhW3MtMl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTI6dGhpcy4kPWFbcy00XSxyLnVwZGF0ZUxpbmsoW2Fbcy0yXV0sYVtzXSk7YnJlYWs7Y2FzZSAxMTQ6dGhpcy4kPWFbcy04XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTZdXSxhW3MtMl0pLHIudXBkYXRlTGluayhbYVtzLTZdXSxhW3NdKTticmVhaztjYXNlIDExNTp0aGlzLiQ9YVtzLThdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy02XSxhW3MtMl0pLHIudXBkYXRlTGluayhhW3MtNl0sYVtzXSk7YnJlYWs7Y2FzZSAxMTY6dGhpcy4kPWFbcy02XSxyLnVwZGF0ZUxpbmtJbnRlcnBvbGF0ZShbYVtzLTRdXSxhW3NdKTticmVhaztjYXNlIDExNzp0aGlzLiQ9YVtzLTZdLHIudXBkYXRlTGlua0ludGVycG9sYXRlKGFbcy00XSxhW3NdKTticmVhaztjYXNlIDExODpjYXNlIDEyMDp0aGlzLiQ9W2Fbc11dO2JyZWFrO2Nhc2UgMTE5OmNhc2UgMTIxOmFbcy0yXS5wdXNoKGFbc10pLHRoaXMuJD1hW3MtMl07YnJlYWs7Y2FzZSAxMjM6dGhpcy4kPWFbcy0xXSthW3NdO2JyZWFrO2Nhc2UgMTQ1OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTQ2OnRoaXMuJD1hW3MtMV0rIiIrYVtzXTticmVhaztjYXNlIDE1MTp0aGlzLiQ9InYiO2JyZWFrO2Nhc2UgMTUyOnRoaXMuJD0iLSI7YnJlYWs7Y2FzZSAxNTM6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJUQiJ9O2JyZWFrO2Nhc2UgMTU0OnRoaXMuJD17c3RtdDoiZGlyIix2YWx1ZToiQlQifTticmVhaztjYXNlIDE1NTp0aGlzLiQ9e3N0bXQ6ImRpciIsdmFsdWU6IlJMIn07YnJlYWs7Y2FzZSAxNTY6dGhpcy4kPXtzdG10OiJkaXIiLHZhbHVlOiJMUiJ9fX0sdGFibGU6W3szOjEsNDoyLDU6Myw2OjUsMTI6ZSwxNjo0LDIxOm4sMjI6ciwyNDppfSx7MTpbM119LHsxOlsyLDFdfSx7MzoxMCw0OjIsNTozLDY6NSwxMjplLDE2OjQsMjE6biwyMjpyLDI0Oml9LHQoYSxvLHsxNzoxMX0pLHs3OjEyLDEzOlsxLDEzXX0sezE2OjE0LDIxOm4sMjI6ciwyNDppfSx7MTY6MTUsMjE6biwyMjpyLDI0Oml9LHsyNTpbMSwxNl0sMjY6WzEsMTddfSx7MTM6WzIsNV19LHsxOlsyLDJdfSx7MTpbMiw5XSwxODoxOCwxOToxOSwyMDpzLDIxOmMsMjI6dSwyMzpsLDMyOjI0LDMzOjI1LDM0OjI2LDM1OjI3LDM2OjI4LDM3OjI5LDM4OmgsNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOm0sODE6diw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6VCwxMDQ6RSwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9LHs4OjYwLDEwOlsxLDYxXSwxNTpSfSx0KFsxMCwxNV0sWzIsNl0pLHQoYSxbMiwxN10pLHQoYSxbMiwxOF0pLHQoYSxbMiwxOV0pLHsyMDpbMSw2NF0sMjE6WzEsNjVdLDIyOkYsMjc6NjMsMzA6NjZ9LHQoUCxbMiwxMV0pLHQoUCxbMiwxMl0pLHQoUCxbMiwxM10pLHQoUCxbMiwxNF0pLHQoUCxbMiwxNV0pLHQoUCxbMiwxNl0pLHs5OjY4LDIwOmosMjE6WSwyMzp6LDQ0OjY5LDY3OjczLDcwOlsxLDc0XSw3MTpbMSw3NV19LHs5Ojc2LDIwOmosMjE6WSwyMzp6fSx7OTo3NywyMDpqLDIxOlksMjM6en0sezk6NzgsMjA6aiwyMTpZLDIzOnp9LHs5Ojc5LDIwOmosMjE6WSwyMzp6fSx7OTo4MCwyMDpqLDIxOlksMjM6en0sezk6ODIsMjA6aiwyMTpZLDIyOlsxLDgxXSwyMzp6fSx0KFAsWzIsNDRdKSx0KFUsWzIsNTFdLHszMDo4MywyMjpGfSksezIyOlsxLDg0XX0sezIyOlsxLDg1XX0sezIyOlsxLDg2XX0sezIyOlsxLDg3XX0sezI2OiQsNDc6cSw3NDpbMSw5MV0sODE6Vyw4Nzo5MCw4ODpbMSw4OF0sOTA6WzEsODldLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChQLFsyLDE1M10pLHQoUCxbMiwxNTRdKSx0KFAsWzIsMTU1XSksdChQLFsyLDE1Nl0pLHQoYXQsWzIsNTJdLHs0ODpbMSwxMTBdfSksdChvdCxbMiw2OV0sezEwODoxMjEsNDA6WzEsMTExXSw0NzpmLDUwOlsxLDExMl0sNTI6WzEsMTEzXSw1NDpbMSwxMTRdLDU2OlsxLDExNV0sNTg6WzEsMTE2XSw2MDpbMSwxMTddLDYyOlsxLDExOF0sNjM6WzEsMTE5XSw2NTpbMSwxMjBdLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9KSx0KHN0LFsyLDE0NV0pLHQoc3QsWzIsMTcwXSksdChzdCxbMiwxNzFdKSx0KHN0LFsyLDE3Ml0pLHQoc3QsWzIsMTczXSksdChzdCxbMiwxNzRdKSx0KHN0LFsyLDE3NV0pLHQoc3QsWzIsMTc2XSksdChzdCxbMiwxNzddKSx0KHN0LFsyLDE3OF0pLHQoc3QsWzIsMTc5XSksdChzdCxbMiwxODBdKSx0KHN0LFsyLDE4MV0pLHQoc3QsWzIsMTgyXSksdChzdCxbMiwxODNdKSx0KHN0LFsyLDE4NF0pLHs5OjEyMiwyMDpqLDIxOlksMjM6en0sezExOjEyMywxNDpbMSwxMjRdfSx0KGN0LFsyLDhdKSx0KGEsWzIsMjBdKSx0KGEsWzIsMjZdKSx0KGEsWzIsMjddKSx7MjE6WzEsMTI1XX0sdCh1dCxbMiwzNF0sezMwOjEyNiwyMjpGfSksdChQLFsyLDM1XSksezQ1OjEyNyw0Njo0Miw0NzpmLDQ5OjQzLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTA4OjQ0LDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSx0KGx0LFsyLDQ1XSksdChsdCxbMiw0Nl0pLHQobHQsWzIsNDddKSx0KGh0LFsyLDczXSx7Njg6MTI4LDY5OlsxLDEyOV0sNzI6WzEsMTMwXX0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxMzEsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQoWzQ3LDY5LDcyLDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzVdKSx0KFAsWzIsMzZdKSx0KFAsWzIsMzddKSx0KFAsWzIsMzhdKSx0KFAsWzIsMzldKSx0KFAsWzIsNDBdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTU1LDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KE50LG8sezE3OjE1Nn0pLHQoVSxbMiw1MF0sezQ3OkJ0fSksezI2OiQsNDc6cSw4MTpXLDg3OjE1OCw5MjpbMSwxNTldLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezg1OlsxLDE2MF0sOTM6MTYxLDk1OlsxLDE2Ml19LHsyNjokLDQ3OnEsODE6Vyw4NTpbMSwxNjNdLDg3OjE2NCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6WiwxMDM6SywxMDQ6USwxMDc6OTQsMTA5OjkyLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyNjokLDQ3OnEsODE6Vyw4NzoxNjUsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KGN0LFsyLDk2XSx7MjI6WzEsMTY2XSw4OTpbMSwxNjddfSksdChjdCxbMiwxMDBdLHsyMjpbMSwxNjhdfSksdChjdCxbMiwxMDRdLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwxNjldLDI2OiQsNDc6cSw4MTpXLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx0KGN0LFsyLDEwNl0sezIyOlsxLDE3MV19KSx0KER0LFsyLDE0N10pLHQoRHQsWzIsMTQ5XSksdChEdCxbMiwxNTBdKSx0KER0LFsyLDE1MV0pLHQoRHQsWzIsMTUyXSksdChMdCxbMiwxNTddKSx0KEx0LFsyLDE1OF0pLHQoTHQsWzIsMTU5XSksdChMdCxbMiwxNjBdKSx0KEx0LFsyLDE2MV0pLHQoTHQsWzIsMTYyXSksdChMdCxbMiwxNjNdKSx0KEx0LFsyLDE2NF0pLHQoTHQsWzIsMTY1XSksdChMdCxbMiwxNjZdKSx0KEx0LFsyLDE2N10pLHQoTHQsWzIsMTY4XSksdChMdCxbMiwxNjldKSx7NDc6Ziw0OToxNzIsODE6diw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6VCwxMDQ6RSwxMDg6NDQsMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzMsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxNzUsNDI6Z3QsNDc6cSw1MDpbMSwxNzRdLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Niw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3Nyw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OCw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE3OSw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjEzMiw3NDpidCw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDM5OjE4MCw0MjpndCw0NzpxLDYwOlsxLDE4MV0sNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgyLDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTgzLDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MTg0LDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KHN0LFsyLDE0Nl0pLHQoSXQsWzIsM10pLHs4OjE4NSwxNTpSfSx7MTU6WzIsN119LHQoYSxbMiwyOF0pLHQodXQsWzIsMzNdKSx0KFUsWzIsNDhdLHszMDoxODYsMjI6Rn0pLHQoaHQsWzIsNzBdLHsyMjpbMSwxODddfSksezIyOlsxLDE4OF19LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToxODksNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDcxOlsxLDE5MF0sNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KEx0LFsyLDc3XSksdChMdCxbMiw3OV0pLHQoTHQsWzIsMTM1XSksdChMdCxbMiwxMzZdKSx0KEx0LFsyLDEzN10pLHQoTHQsWzIsMTM4XSksdChMdCxbMiwxMzldKSx0KEx0LFsyLDE0MF0pLHQoTHQsWzIsMTQxXSksdChMdCxbMiwxNDJdKSx0KEx0LFsyLDE0M10pLHQoTHQsWzIsMTQ0XSksdChMdCxbMiw4MF0pLHQoTHQsWzIsODFdKSx0KEx0LFsyLDgyXSksdChMdCxbMiw4M10pLHQoTHQsWzIsODRdKSx0KEx0LFsyLDg1XSksdChMdCxbMiw4Nl0pLHQoTHQsWzIsODddKSx0KEx0LFsyLDg4XSksdChMdCxbMiw4OV0pLHQoTHQsWzIsOTBdKSx7OToxOTMsMjA6aiwyMTpZLDIyOmZ0LDIzOnosMjQ6ZHQsMjY6cHQsMzg6eXQsNDA6WzEsMTkyXSw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwxOTRdLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDptLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSx7MjI6RiwzMDoxOTV9LHsyMjpbMSwxOTZdLDI2OiQsNDc6cSw4MTpXLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6MTcwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpbMSwxOTddfSx7MjI6WzEsMTk4XX0sezIyOlsxLDE5OV0sOTY6WzEsMjAwXX0sdChSdCxbMiwxMThdKSx7MjI6WzEsMjAxXX0sezIyOlsxLDIwMl0sMjY6JCw0NzpxLDgxOlcsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOlsxLDIwM10sMjY6JCw0NzpxLDgxOlcsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOToxNzAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezc0OlsxLDIwNF19LHQoY3QsWzIsOThdLHsyMjpbMSwyMDVdfSksezc0OlsxLDIwNl0sOTE6WzEsMjA3XX0sezc0OlsxLDIwOF19LHQoRHQsWzIsMTQ4XSksezc0OlsxLDIwOV0sOTE6WzEsMjEwXX0sdChhdCxbMiw1NF0sezEwODoxMjEsNDc6Ziw4MTp2LDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpULDEwNDpFLDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQxOlsxLDIxMV0sNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTIsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDUxOlsxLDIxM10sNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1MzpbMSwyMTRdLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTU6WzEsMjE1XSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDU3OlsxLDIxNl0sNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw1OTpbMSwyMTddLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNjE6WzEsMjE4XSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCwzOToyMTksNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MzoxMzIsNzQ6YnQsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MTpbMSwyMjBdLDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2MjptdCw2NDpbMSwyMjFdLDY2OlsxLDIyMl0sNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2MjptdCw2NDpbMSwyMjRdLDY2OlsxLDIyM10sNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7OToyMjUsMjA6aiwyMTpZLDIzOnp9LHQoVSxbMiw0OV0sezQ3OkJ0fSksdChodCxbMiw3Ml0pLHQoaHQsWzIsNzFdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDI6Z3QsNDc6cSw2MjptdCw3MDp2dCw3MjpbMSwyMjZdLDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChodCxbMiw3NF0pLHQoTHQsWzIsNzhdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsMzk6MjI3LDQyOmd0LDQ3OnEsNjI6bXQsNzA6dnQsNzM6MTMyLDc0OmJ0LDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KE50LG8sezE3OjIyOH0pLHQoUCxbMiw0M10pLHs0NjoyMjksNDc6Ziw0OTo0Myw4MTp2LDk1OmIsOTY6eCw5OTpfLDEwMDprLDEwMTp3LDEwMzpULDEwNDpFLDEwODo0NCwxMTQ6TywxMTU6TiwxMTY6QiwxMTc6RCwxMTg6TCwxMTk6SX0sezIyOkZ0LDc2OlB0LDg2OjIzMCw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx7MjI6RnQsNzY6UHQsODY6MjQ0LDkyOmp0LDk1Oll0LDk3OjIzMSw5ODoyMzIsOTk6enQsMTAwOlV0LDEwMTokdCwxMDI6cXQsMTAzOld0LDEwNDpIdCwxMDU6VnR9LHsyMjpGdCw3NjpQdCw4NjoyNDUsOTI6anQsOTQ6WzEsMjQ2XSw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx7MjI6RnQsNzY6UHQsODY6MjQ3LDkyOmp0LDk0OlsxLDI0OF0sOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0sezk1OlsxLDI0OV19LHsyMjpGdCw3NjpQdCw4NjoyNTAsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0sezIyOkZ0LDc2OlB0LDg2OjI1MSw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjUyLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiw5N10pLHs3NDpbMSwyNTNdfSx0KGN0LFsyLDEwMV0sezIyOlsxLDI1NF19KSx0KGN0LFsyLDEwMl0pLHQoY3QsWzIsMTA1XSksdChjdCxbMiwxMDddLHsyMjpbMSwyNTVdfSksdChjdCxbMiwxMDhdKSx0KG90LFsyLDU1XSksezIyOmZ0LDI0OmR0LDI2OnB0LDM4Onl0LDQyOmd0LDQ3OnEsNTE6WzEsMjU2XSw2MjptdCw3MDp2dCw3MzoxOTEsNzU6MTQzLDc2Onh0LDc3Ol90LDc4Omt0LDc5Ond0LDgwOlR0LDgxOkV0LDgyOkN0LDg0OjEzNCw4NTpTdCw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6QXQsMTAzOkssMTA0OlEsMTA1Ok10LDEwNjpPdCwxMDc6MTQwLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9LHQob3QsWzIsNjFdKSx0KG90LFsyLDU3XSksdChvdCxbMiw1OF0pLHQob3QsWzIsNTldKSx0KG90LFsyLDYwXSksdChvdCxbMiw2Ml0pLHsyMjpmdCwyNDpkdCwyNjpwdCwzODp5dCw0MjpndCw0NzpxLDYxOlsxLDI1N10sNjI6bXQsNzA6dnQsNzM6MTkxLDc1OjE0Myw3Njp4dCw3NzpfdCw3ODprdCw3OTp3dCw4MDpUdCw4MTpFdCw4MjpDdCw4NDoxMzQsODU6U3QsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOkF0LDEwMzpLLDEwNDpRLDEwNTpNdCwxMDY6T3QsMTA3OjE0MCwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx0KG90LFsyLDY0XSksdChvdCxbMiw2NV0pLHQob3QsWzIsNjddKSx0KG90LFsyLDY2XSksdChvdCxbMiw2OF0pLHQoSXQsWzIsNF0pLHQoWzIyLDQ3LDgxLDk1LDk2LDk5LDEwMCwxMDEsMTAzLDEwNCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOV0sWzIsNzZdKSx7MjI6ZnQsMjQ6ZHQsMjY6cHQsMzg6eXQsNDE6WzEsMjU4XSw0MjpndCw0NzpxLDYyOm10LDcwOnZ0LDczOjE5MSw3NToxNDMsNzY6eHQsNzc6X3QsNzg6a3QsNzk6d3QsODA6VHQsODE6RXQsODI6Q3QsODQ6MTM0LDg1OlN0LDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpBdCwxMDM6SywxMDQ6USwxMDU6TXQsMTA2Ok90LDEwNzoxNDAsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sezE4OjE4LDE5OjE5LDIwOnMsMjE6YywyMjp1LDIzOmwsMzI6MjQsMzM6MjUsMzQ6MjYsMzU6MjcsMzY6MjgsMzc6MjksMzg6aCw0MjpbMSwyNTldLDQzOjMxLDQ1OjMyLDQ2OjQyLDQ3OmYsNDk6NDMsNzY6ZCw3NzpwLDc4OnksNzk6Zyw4MDptLDgxOnYsOTU6Yiw5Njp4LDk5Ol8sMTAwOmssMTAxOncsMTAzOlQsMTA0OkUsMTA4OjQ0LDExMDpDLDExMTpTLDExMjpBLDExMzpNLDExNDpPLDExNTpOLDExNjpCLDExNzpELDExODpMLDExOTpJfSx0KGF0LFsyLDUzXSksdChjdCxbMiwxMTBdLHs5NjpHdH0pLHQoWHQsWzIsMTIwXSx7OTg6MjYxLDIyOkZ0LDc2OlB0LDkyOmp0LDk1Oll0LDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSksdChadCxbMiwxMjJdKSx0KFp0LFsyLDEyNF0pLHQoWnQsWzIsMTI1XSksdChadCxbMiwxMjZdKSx0KFp0LFsyLDEyN10pLHQoWnQsWzIsMTI4XSksdChadCxbMiwxMjldKSx0KFp0LFsyLDEzMF0pLHQoWnQsWzIsMTMxXSksdChadCxbMiwxMzJdKSx0KFp0LFsyLDEzM10pLHQoWnQsWzIsMTM0XSksdChjdCxbMiwxMTFdLHs5NjpHdH0pLHQoY3QsWzIsMTEyXSx7OTY6R3R9KSx7MjI6WzEsMjYyXX0sdChjdCxbMiwxMTNdLHs5NjpHdH0pLHsyMjpbMSwyNjNdfSx0KFJ0LFsyLDExOV0pLHQoY3QsWzIsOTNdLHs5NjpHdH0pLHQoY3QsWzIsOTRdLHs5NjpHdH0pLHQoY3QsWzIsOTVdLHsxMDc6OTQsMTA5OjE3MCwyNjokLDQ3OnEsODE6Vyw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6WiwxMDM6SywxMDQ6USwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiw5OV0pLHs5MTpbMSwyNjRdfSx7OTE6WzEsMjY1XX0sezUxOlsxLDI2Nl19LHs2MTpbMSwyNjddfSx7OToyNjgsMjA6aiwyMTpZLDIzOnp9LHQoUCxbMiw0Ml0pLHsyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5NzoyNjksOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx0KFp0LFsyLDEyM10pLHsyNjokLDQ3OnEsODE6Vyw4NzoyNzAsOTU6SCw5NjpWLDk5OkcsMTAwOlgsMTAxOlosMTAzOkssMTA0OlEsMTA3Ojk0LDEwOTo5MiwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSx7MjY6JCw0NzpxLDgxOlcsODc6MjcxLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDEwNzo5NCwxMDk6OTIsMTE0OkosMTE1OnR0LDExNjpldCwxMTc6bnQsMTE4OnJ0LDExOTppdH0sdChjdCxbMiwxMDNdKSx0KGN0LFsyLDEwOV0pLHQob3QsWzIsNTZdKSx0KG90LFsyLDYzXSksdChOdCxvLHsxNzoyNzJ9KSx0KFh0LFsyLDEyMV0sezk4OjI2MSwyMjpGdCw3NjpQdCw5MjpqdCw5NTpZdCw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0pLHQoY3QsWzIsMTE2XSx7MTA3Ojk0LDEwOToxNzAsMjI6WzEsMjczXSwyNjokLDQ3OnEsODE6Vyw5NTpILDk2OlYsOTk6RywxMDA6WCwxMDE6WiwxMDM6SywxMDQ6USwxMTQ6SiwxMTU6dHQsMTE2OmV0LDExNzpudCwxMTg6cnQsMTE5Oml0fSksdChjdCxbMiwxMTddLHsxMDc6OTQsMTA5OjE3MCwyMjpbMSwyNzRdLDI2OiQsNDc6cSw4MTpXLDk1OkgsOTY6Viw5OTpHLDEwMDpYLDEwMTpaLDEwMzpLLDEwNDpRLDExNDpKLDExNTp0dCwxMTY6ZXQsMTE3Om50LDExODpydCwxMTk6aXR9KSx7MTg6MTgsMTk6MTksMjA6cywyMTpjLDIyOnUsMjM6bCwzMjoyNCwzMzoyNSwzNDoyNiwzNToyNywzNjoyOCwzNzoyOSwzODpoLDQyOlsxLDI3NV0sNDM6MzEsNDU6MzIsNDY6NDIsNDc6Ziw0OTo0Myw3NjpkLDc3OnAsNzg6eSw3OTpnLDgwOm0sODE6diw5NTpiLDk2OngsOTk6XywxMDA6aywxMDE6dywxMDM6VCwxMDQ6RSwxMDg6NDQsMTEwOkMsMTExOlMsMTEyOkEsMTEzOk0sMTE0Ok8sMTE1Ok4sMTE2OkIsMTE3OkQsMTE4OkwsMTE5Okl9LHsyMjpGdCw3NjpQdCw4NjoyNzYsOTI6anQsOTU6WXQsOTc6MjMxLDk4OjIzMiw5OTp6dCwxMDA6VXQsMTAxOiR0LDEwMjpxdCwxMDM6V3QsMTA0Okh0LDEwNTpWdH0sezIyOkZ0LDc2OlB0LDg2OjI3Nyw5MjpqdCw5NTpZdCw5NzoyMzEsOTg6MjMyLDk5Onp0LDEwMDpVdCwxMDE6JHQsMTAyOnF0LDEwMzpXdCwxMDQ6SHQsMTA1OlZ0fSx0KFAsWzIsNDFdKSx0KGN0LFsyLDExNF0sezk2Okd0fSksdChjdCxbMiwxMTVdLHs5NjpHdH0pXSxkZWZhdWx0QWN0aW9uczp7MjpbMiwxXSw5OlsyLDVdLDEwOlsyLDJdLDEyNDpbMiw3XX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LFF0PXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7fSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMTI7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDEzO2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxMDtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMTU7Y2FzZSA0OnJldHVybiAxNDtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDg6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgOTpyZXR1cm4iU1RSIjtjYXNlIDEwOnJldHVybiA3NjtjYXNlIDExOnJldHVybiA4NTtjYXNlIDEyOnJldHVybiA3NztjYXNlIDEzOnJldHVybiA5NDtjYXNlIDE0OnJldHVybiA3ODtjYXNlIDE1OnJldHVybiA3OTtjYXNlIDE2OnRoaXMuYmVnaW4oImhyZWYiKTticmVhaztjYXNlIDE3OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE4OnJldHVybiA5MDtjYXNlIDE5OnRoaXMuYmVnaW4oImNhbGxiYWNrbmFtZSIpO2JyZWFrO2Nhc2UgMjA6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjE6dGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImNhbGxiYWNrYXJncyIpO2JyZWFrO2Nhc2UgMjI6cmV0dXJuIDg4O2Nhc2UgMjM6dGhpcy5wb3BTdGF0ZSgpO2JyZWFrO2Nhc2UgMjQ6cmV0dXJuIDg5O2Nhc2UgMjU6dGhpcy5iZWdpbigiY2xpY2siKTticmVhaztjYXNlIDI2OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDI3OnJldHVybiA4MDtjYXNlIDI4OmNhc2UgMjk6cmV0dXJuIHQubGV4LmZpcnN0R3JhcGgoKSYmdGhpcy5iZWdpbigiZGlyIiksMjQ7Y2FzZSAzMDpyZXR1cm4gMzg7Y2FzZSAzMTpyZXR1cm4gNDI7Y2FzZSAzMjpjYXNlIDMzOmNhc2UgMzQ6Y2FzZSAzNTpyZXR1cm4gOTE7Y2FzZSAzNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDI1O2Nhc2UgMzc6Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpjYXNlIDQyOmNhc2UgNDM6Y2FzZSA0NDpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwyNjtjYXNlIDQ3OnJldHVybiAxMTA7Y2FzZSA0ODpyZXR1cm4gMTExO2Nhc2UgNDk6cmV0dXJuIDExMjtjYXNlIDUwOnJldHVybiAxMTM7Y2FzZSA1MTpyZXR1cm4gOTU7Y2FzZSA1MjpyZXR1cm4gMTAzO2Nhc2UgNTM6cmV0dXJuIDQ4O2Nhc2UgNTQ6cmV0dXJuIDEwMDtjYXNlIDU1OnJldHVybiA0NztjYXNlIDU2OnJldHVybiAyMDtjYXNlIDU3OnJldHVybiA5NjtjYXNlIDU4OnJldHVybiAxMTg7Y2FzZSA1OTpjYXNlIDYwOmNhc2UgNjE6cmV0dXJuIDcxO2Nhc2UgNjI6Y2FzZSA2MzpjYXNlIDY0OnJldHVybiA3MDtjYXNlIDY1OnJldHVybiA1MjtjYXNlIDY2OnJldHVybiA1MztjYXNlIDY3OnJldHVybiA1NDtjYXNlIDY4OnJldHVybiA1NTtjYXNlIDY5OnJldHVybiA1NjtjYXNlIDcwOnJldHVybiA1NztjYXNlIDcxOnJldHVybiA1ODtjYXNlIDcyOnJldHVybiA1OTtjYXNlIDczOnJldHVybiAxMDE7Y2FzZSA3NDpyZXR1cm4gMTA0O2Nhc2UgNzU6cmV0dXJuIDExOTtjYXNlIDc2OnJldHVybiAxMTY7Y2FzZSA3NzpyZXR1cm4gMTA1O2Nhc2UgNzg6Y2FzZSA3OTpyZXR1cm4gMTE3O2Nhc2UgODA6cmV0dXJuIDEwNjtjYXNlIDgxOnJldHVybiA2MjtjYXNlIDgyOnJldHVybiA4MjtjYXNlIDgzOnJldHVybiJTRVAiO2Nhc2UgODQ6cmV0dXJuIDgxO2Nhc2UgODU6cmV0dXJuIDk5O2Nhc2UgODY6cmV0dXJuIDY0O2Nhc2UgODc6cmV0dXJuIDYzO2Nhc2UgODg6cmV0dXJuIDY2O2Nhc2UgODk6cmV0dXJuIDY1O2Nhc2UgOTA6cmV0dXJuIDExNDtjYXNlIDkxOnJldHVybiAxMTU7Y2FzZSA5MjpyZXR1cm4gNzI7Y2FzZSA5MzpyZXR1cm4gNTA7Y2FzZSA5NDpyZXR1cm4gNTE7Y2FzZSA5NTpyZXR1cm4gNDA7Y2FzZSA5NjpyZXR1cm4gNDE7Y2FzZSA5NzpyZXR1cm4gNjA7Y2FzZSA5ODpyZXR1cm4gNjE7Y2FzZSA5OTpyZXR1cm4gMTI1O2Nhc2UgMTAwOnJldHVybiAyMTtjYXNlIDEwMTpyZXR1cm4gMjI7Y2FzZSAxMDI6cmV0dXJuIDIzfX0scnVsZXM6Wy9eKD86JSVceykvLC9eKD86KCg/Oig/IVx9JSUpW146Ll0pKikpLywvXig/OjopLywvXig/Olx9JSUpLywvXig/OigoPzooPyFcfSUlKS58XG4pKikpLywvXig/OiUlKD8hXHspW15cbl0qKS8sL14oPzpbXlx9XSUlW15cbl0qKS8sL14oPzpbIl0pLywvXig/OlsiXSkvLC9eKD86W14iXSopLywvXig/OnN0eWxlXGIpLywvXig/OmRlZmF1bHRcYikvLC9eKD86bGlua1N0eWxlXGIpLywvXig/OmludGVycG9sYXRlXGIpLywvXig/OmNsYXNzRGVmXGIpLywvXig/OmNsYXNzXGIpLywvXig/OmhyZWZbXHNdK1siXSkvLC9eKD86WyJdKS8sL14oPzpbXiJdKikvLC9eKD86Y2FsbFtcc10rKS8sL14oPzpcKFtcc10qXCkpLywvXig/OlwoKS8sL14oPzpbXihdKikvLC9eKD86XCkpLywvXig/OlteKV0qKS8sL14oPzpjbGlja1tcc10rKS8sL14oPzpbXHNcbl0pLywvXig/OlteXHNcbl0qKS8sL14oPzpncmFwaFxiKS8sL14oPzpmbG93Y2hhcnRcYikvLC9eKD86c3ViZ3JhcGhcYikvLC9eKD86ZW5kXGJccyopLywvXig/Ol9zZWxmXGIpLywvXig/Ol9ibGFua1xiKS8sL14oPzpfcGFyZW50XGIpLywvXig/Ol90b3BcYikvLC9eKD86KFxyP1xuKSpccypcbikvLC9eKD86XHMqTFJcYikvLC9eKD86XHMqUkxcYikvLC9eKD86XHMqVEJcYikvLC9eKD86XHMqQlRcYikvLC9eKD86XHMqVERcYikvLC9eKD86XHMqQlJcYikvLC9eKD86XHMqPCkvLC9eKD86XHMqPikvLC9eKD86XHMqXF4pLywvXig/OlxzKnZcYikvLC9eKD86LipkaXJlY3Rpb25ccytUQlteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytCVFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytSTFteXG5dKikvLC9eKD86LipkaXJlY3Rpb25ccytMUlteXG5dKikvLC9eKD86WzAtOV0rKS8sL14oPzojKS8sL14oPzo6OjopLywvXig/OjopLywvXig/OiYpLywvXig/OjspLywvXig/OiwpLywvXig/OlwqKS8sL14oPzpccypbeG88XT8tLStbLXhvPl1ccyopLywvXig/OlxzKlt4bzxdPz09K1s9eG8+XVxzKikvLC9eKD86XHMqW3hvPF0/LT9cListW3hvPl0/XHMqKS8sL14oPzpccypbeG88XT8tLVxzKikvLC9eKD86XHMqW3hvPF0/PT1ccyopLywvXig/OlxzKlt4bzxdPy1cLlxzKikvLC9eKD86XCgtKS8sL14oPzotXCkpLywvXig/OlwoXFspLywvXig/OlxdXCkpLywvXig/OlxbXFspLywvXig/OlxdXF0pLywvXig/OlxbXCgpLywvXig/OlwpXF0pLywvXig/Oi0pLywvXig/OlwuKS8sL14oPzpbXF9dKS8sL14oPzpcKykvLC9eKD86JSkvLC9eKD86PSkvLC9eKD86PSkvLC9eKD86PCkvLC9eKD86PikvLC9eKD86XF4pLywvXig/OlxcXHwpLywvXig/OnZcYikvLC9eKD86W0EtWmEtel0rKS8sL14oPzpcXFxdKS8sL14oPzpcW1wvKS8sL14oPzpcL1xdKS8sL14oPzpcW1xcKS8sL14oPzpbISIjJCUmJyorLC0uYD9cXF8vXSkvLC9eKD86W1x1MDBBQVx1MDBCNVx1MDBCQVx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XXxbXHUwMEY4LVx1MDJDMVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzcwLVx1MDM3NFx1MDM3Nlx1MDM3N118W1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNBMVx1MDNBMy1cdTAzRjVdfFtcdTAzRjctXHUwNDgxXHUwNDhBLVx1MDUyN1x1MDUzMS1cdTA1NTZcdTA1NTlcdTA1NjEtXHUwNTg3XHUwNUQwLVx1MDVFQV18W1x1MDVGMC1cdTA1RjJcdTA2MjAtXHUwNjRBXHUwNjZFXHUwNjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRV18W1x1MDZFRlx1MDZGQS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDQS1cdTA3RUFdfFtcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1OFx1MDhBMF18W1x1MDhBMi1cdTA4QUNcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk3MS1cdTA5NzddfFtcdTA5NzktXHUwOTdGXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUwOUIwXHUwOUIyXXxbXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RjBcdTA5RjFcdTBBMDUtXHUwQTBBXXxbXHUwQTBGXHUwQTEwXHUwQTEzLVx1MEEyOFx1MEEyQS1cdTBBMzBcdTBBMzJcdTBBMzNcdTBBMzVcdTBBMzZcdTBBMzhcdTBBMzldfFtcdTBBNTktXHUwQTVDXHUwQTVFXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOF18W1x1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQjA1LVx1MEIwQ118W1x1MEIwRlx1MEIxMFx1MEIxMy1cdTBCMjhcdTBCMkEtXHUwQjMwXHUwQjMyXHUwQjMzXHUwQjM1LVx1MEIzOVx1MEIzRFx1MEI1Q118W1x1MEI1RFx1MEI1Ri1cdTBCNjFcdTBCNzFcdTBCODNcdTBCODUtXHUwQjhBXHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTldfFtcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMF18W1x1MEMwNS1cdTBDMENcdTBDMEUtXHUwQzEwXHUwQzEyLVx1MEMyOFx1MEMyQS1cdTBDMzNcdTBDMzUtXHUwQzM5XHUwQzNEXXxbXHUwQzU4XHUwQzU5XHUwQzYwXHUwQzYxXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM118W1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDREVcdTBDRTBcdTBDRTFcdTBDRjFcdTBDRjJcdTBEMDUtXHUwRDBDXHUwRDBFLVx1MEQxMF18W1x1MEQxMi1cdTBEM0FcdTBEM0RcdTBENEVcdTBENjBcdTBENjFcdTBEN0EtXHUwRDdGXHUwRDg1LVx1MEQ5Nlx1MEQ5QS1cdTBEQjFdfFtcdTBEQjMtXHUwREJCXHUwREJEXHUwREMwLVx1MERDNlx1MEUwMS1cdTBFMzBcdTBFMzJcdTBFMzNcdTBFNDAtXHUwRTQ2XHUwRTgxXXxbXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRThBXHUwRThEXHUwRTk0LVx1MEU5N1x1MEU5OS1cdTBFOUZcdTBFQTEtXHUwRUEzXXxbXHUwRUE1XHUwRUE3XHUwRUFBXHUwRUFCXHUwRUFELVx1MEVCMFx1MEVCMlx1MEVCM1x1MEVCRFx1MEVDMC1cdTBFQzRcdTBFQzZdfFtcdTBFREMtXHUwRURGXHUwRjAwXHUwRjQwLVx1MEY0N1x1MEY0OS1cdTBGNkNcdTBGODgtXHUwRjhDXHUxMDAwLVx1MTAyQV18W1x1MTAzRlx1MTA1MC1cdTEwNTVcdTEwNUEtXHUxMDVEXHUxMDYxXHUxMDY1XHUxMDY2XHUxMDZFLVx1MTA3MFx1MTA3NS1cdTEwODFdfFtcdTEwOEVcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXXxbXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUxMjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBdfFtcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMF18W1x1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzgwLVx1MTM4Rlx1MTNBMC1cdTEzRjRcdTE0MDEtXHUxNjZDXXxbXHUxNjZGLVx1MTY3Rlx1MTY4MS1cdTE2OUFcdTE2QTAtXHUxNkVBXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTFdfFtcdTE3MjAtXHUxNzMxXHUxNzQwLVx1MTc1MVx1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzgwLVx1MTdCM1x1MTdEN118W1x1MTdEQ1x1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNdfFtcdTE5NTAtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QzEtXHUxOUM3XHUxQTAwLVx1MUExNl18W1x1MUEyMC1cdTFBNTRcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Qlx1MUI4My1cdTFCQTBcdTFCQUVcdTFCQUZdfFtcdTFCQkEtXHUxQkU1XHUxQzAwLVx1MUMyM1x1MUM0RC1cdTFDNEZcdTFDNUEtXHUxQzdEXHUxQ0U5LVx1MUNFQ118W1x1MUNFRS1cdTFDRjFcdTFDRjVcdTFDRjZcdTFEMDAtXHUxREJGXHUxRTAwLVx1MUYxNVx1MUYxOC1cdTFGMURdfFtcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXXxbXHUxRjgwLVx1MUZCNFx1MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNdfFtcdTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDcxXHUyMDdGXXxbXHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XXxbXHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE4M1x1MjE4NF18W1x1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNdfFtcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XXxbXHUyREE4LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VdfFtcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNVx1MzAwNlx1MzAzMS1cdTMwMzVcdTMwM0JcdTMwM0NdfFtcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFcdTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRF18W1x1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYwLVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXXxbXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQl18W1x1QTY0MC1cdUE2NkVcdUE2N0YtXHVBNjk3XHVBNkEwLVx1QTZFNVx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XXxbXHVBNzhCLVx1QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVdfFtcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYyLVx1QThGN1x1QThGQl18W1x1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XXxbXHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNV18W1x1QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRdfFtcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRV18W1x1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXXxbXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZdfFtcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RdfFtcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ118W1x1RkYyMS1cdUZGM0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXXxbXHVGRkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdKS8sL14oPzpcfCkvLC9eKD86XCgpLywvXig/OlwpKS8sL14oPzpcWykvLC9eKD86XF0pLywvXig/Olx7KS8sL14oPzpcfSkvLC9eKD86IikvLC9eKD86KFxyP1xuKSspLywvXig/OlxzKS8sL14oPzokKS9dLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSxjYWxsYmFja2FyZ3M6e3J1bGVzOlsyMywyNF0saW5jbHVzaXZlOiExfSxjYWxsYmFja25hbWU6e3J1bGVzOlsyMCwyMSwyMl0saW5jbHVzaXZlOiExfSxocmVmOntydWxlczpbMTcsMThdLGluY2x1c2l2ZTohMX0sY2xpY2s6e3J1bGVzOlsyNiwyN10saW5jbHVzaXZlOiExfSx2ZXJ0ZXg6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sZGlyOntydWxlczpbMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDZdLGluY2x1c2l2ZTohMX0sc3RyaW5nOntydWxlczpbOCw5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE5LDI1LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gSnQoKXt0aGlzLnl5PXt9fXJldHVybiBLdC5sZXhlcj1RdCxKdC5wcm90b3R5cGU9S3QsS3QuUGFyc2VyPUp0LG5ldyBKdH0oKTtlLnBhcnNlcj1pLGUuUGFyc2VyPWkuUGFyc2VyLGUucGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZS5hcHBseShpLGFyZ3VtZW50cyl9LGUubWFpbj1mdW5jdGlvbihyKXtyWzFdfHwoY29uc29sZS5sb2coIlVzYWdlOiAiK3JbMF0rIiBGSUxFIiksdC5leGl0KDEpKTt2YXIgaT1uKDE3KS5yZWFkRmlsZVN5bmMobigxOCkubm9ybWFsaXplKHJbMV0pLCJ1dGY4Iik7cmV0dXJuIGUucGFyc2VyLnBhcnNlKGkpfSxuLmNbbi5zXT09PXImJmUubWFpbih0LmFyZ3Yuc2xpY2UoMSkpfSkuY2FsbCh0aGlzLG4oMTIpLG4oNykodCkpfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDJdLG49WzEsNV0scj1bNiw5LDExLDE3LDE4LDE5LDIxXSxpPVsxLDE1XSxhPVsxLDE2XSxvPVsxLDE3XSxzPVsxLDIxXSxjPVs0LDYsOSwxMSwxNywxOCwxOSwyMV0sdT17dHJhY2U6ZnVuY3Rpb24oKXt9LHl5Ont9LHN5bWJvbHNfOntlcnJvcjoyLHN0YXJ0OjMsam91cm5leTo0LGRvY3VtZW50OjUsRU9GOjYsZGlyZWN0aXZlOjcsbGluZTo4LFNQQUNFOjksc3RhdGVtZW50OjEwLE5FV0xJTkU6MTEsb3BlbkRpcmVjdGl2ZToxMix0eXBlRGlyZWN0aXZlOjEzLGNsb3NlRGlyZWN0aXZlOjE0LCI6IjoxNSxhcmdEaXJlY3RpdmU6MTYsdGl0bGU6MTcsc2VjdGlvbjoxOCx0YXNrTmFtZToxOSx0YXNrRGF0YToyMCxvcGVuX2RpcmVjdGl2ZToyMSx0eXBlX2RpcmVjdGl2ZToyMixhcmdfZGlyZWN0aXZlOjIzLGNsb3NlX2RpcmVjdGl2ZToyNCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiam91cm5leSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwxNzoidGl0bGUiLDE4OiJzZWN0aW9uIiwxOToidGFza05hbWUiLDIwOiJ0YXNrRGF0YSIsMjE6Im9wZW5fZGlyZWN0aXZlIiwyMjoidHlwZV9kaXJlY3RpdmUiLDIzOiJhcmdfZGlyZWN0aXZlIiwyNDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsMV0sWzEwLDJdLFsxMCwxXSxbMTIsMV0sWzEzLDFdLFsxNiwxXSxbMTQsMV1dLHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scixpLGEsbyl7dmFyIHM9YS5sZW5ndGgtMTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBhW3MtMV07Y2FzZSAzOnRoaXMuJD1bXTticmVhaztjYXNlIDQ6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDU6Y2FzZSA2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgNzpjYXNlIDg6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTE6ci5zZXRUaXRsZShhW3NdLnN1YnN0cig2KSksdGhpcy4kPWFbc10uc3Vic3RyKDYpO2JyZWFrO2Nhc2UgMTI6ci5hZGRTZWN0aW9uKGFbc10uc3Vic3RyKDgpKSx0aGlzLiQ9YVtzXS5zdWJzdHIoOCk7YnJlYWs7Y2FzZSAxMzpyLmFkZFRhc2soYVtzLTFdLGFbc10pLHRoaXMuJD0idGFzayI7YnJlYWs7Y2FzZSAxNTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTY6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMTc6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDE4OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImpvdXJuZXkiKX19LHRhYmxlOlt7MzoxLDQ6ZSw3OjMsMTI6NCwyMTpufSx7MTpbM119LHQocixbMiwzXSx7NTo2fSksezM6Nyw0OmUsNzozLDEyOjQsMjE6bn0sezEzOjgsMjI6WzEsOV19LHsyMjpbMiwxNV19LHs2OlsxLDEwXSw3OjE4LDg6MTEsOTpbMSwxMl0sMTA6MTMsMTE6WzEsMTRdLDEyOjQsMTc6aSwxODphLDE5Om8sMjE6bn0sezE6WzIsMl19LHsxNDoxOSwxNTpbMSwyMF0sMjQ6c30sdChbMTUsMjRdLFsyLDE2XSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxOCwxMDoyMiwxMjo0LDE3OmksMTg6YSwxOTpvLDIxOm59LHQocixbMiw2XSksdChyLFsyLDddKSx0KHIsWzIsMTFdKSx0KHIsWzIsMTJdKSx7MjA6WzEsMjNdfSx0KHIsWzIsMTRdKSx7MTE6WzEsMjRdfSx7MTY6MjUsMjM6WzEsMjZdfSx7MTE6WzIsMThdfSx0KHIsWzIsNV0pLHQocixbMiwxM10pLHQoYyxbMiw5XSksezE0OjI3LDI0OnN9LHsyNDpbMiwxN119LHsxMTpbMSwyOF19LHQoYyxbMiwxMF0pXSxkZWZhdWx0QWN0aW9uczp7NTpbMiwxNV0sNzpbMiwyXSwyMTpbMiwxOF0sMjY6WzIsMTddfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sbD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDIxO2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwyMjtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTU7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDI0O2Nhc2UgNDpyZXR1cm4gMjM7Y2FzZSA1OmNhc2UgNjpicmVhaztjYXNlIDc6cmV0dXJuIDExO2Nhc2UgODpjYXNlIDk6YnJlYWs7Y2FzZSAxMDpyZXR1cm4gNDtjYXNlIDExOnJldHVybiAxNztjYXNlIDEyOnJldHVybiAxODtjYXNlIDEzOnJldHVybiAxOTtjYXNlIDE0OnJldHVybiAyMDtjYXNlIDE1OnJldHVybiAxNTtjYXNlIDE2OnJldHVybiA2O2Nhc2UgMTc6cmV0dXJuIklOVkFMSUQifX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSg/IVx7KVteXG5dKikvaSwvXig/OlteXH1dJSVbXlxuXSopL2ksL14oPzpbXG5dKykvaSwvXig/OlxzKykvaSwvXig/OiNbXlxuXSopL2ksL14oPzpqb3VybmV5XGIpL2ksL14oPzp0aXRsZVxzW14jXG47XSspL2ksL14oPzpzZWN0aW9uXHNbXiM6XG47XSspL2ksL14oPzpbXiM6XG47XSspL2ksL14oPzo6W14jXG47XSspL2ksL14oPzo6KS9pLC9eKD86JCkvaSwvXig/Oi4pL2ldLGNvbmRpdGlvbnM6e29wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxN10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGgoKXt0aGlzLnl5PXt9fXJldHVybiB1LmxleGVyPWwsaC5wcm90b3R5cGU9dSx1LlBhcnNlcj1oLG5ldyBofSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0Lmxhbmcucm91bmQoaS5kZWZhdWx0LnBhcnNlKHQpW2VdKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDExMiksaT1uKDg0KSxhPW4oMjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKHQpOmkodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI7aWYoIXIpdHJ5e3I9bigwKX1jYXRjaCh0KXt9cnx8KHI9d2luZG93LmQzKSx0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMSksaT1uKDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbil7dmFyIGE9aS5kZWZhdWx0LnBhcnNlKHQpLG89YVtlXSxzPXIuZGVmYXVsdC5jaGFubmVsLmNsYW1wW2VdKG8rbik7cmV0dXJuIG8hPT1zJiYoYVtlXT1zKSxpLmRlZmF1bHQuc3RyaW5naWZ5KGEpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjE1KSxpPW4oMjIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1pKHQsZSk7cmV0dXJuIHIobik/bjp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MCksaT1uKDIxNyksYT1uKDIxOCksbz1yP3IudG9TdHJpbmdUYWc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA9PT10PyJbb2JqZWN0IFVuZGVmaW5lZF0iOiJbb2JqZWN0IE51bGxdIjpvJiZvIGluIE9iamVjdCh0KT9pKHQpOmEodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTIpLGk9bigyNDEpLGE9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpP3IodCwhMCk6aSh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0fX0sZnVuY3Rpb24odCl7dC5leHBvcnRzPUpTT04ucGFyc2UoJ3sibmFtZSI6Im1lcm1haWQiLCJ2ZXJzaW9uIjoiOC4xMi4xIiwiZGVzY3JpcHRpb24iOiJNYXJrZG93bmlzaCBzeW50YXggZm9yIGdlbmVyYXRpbmcgZmxvd2NoYXJ0cywgc2VxdWVuY2UgZGlhZ3JhbXMsIGNsYXNzIGRpYWdyYW1zLCBnYW50dCBjaGFydHMgYW5kIGdpdCBncmFwaHMuIiwibWFpbiI6ImRpc3QvbWVybWFpZC5jb3JlLmpzIiwia2V5d29yZHMiOlsiZGlhZ3JhbSIsIm1hcmtkb3duIiwiZmxvd2NoYXJ0Iiwic2VxdWVuY2UgZGlhZ3JhbSIsImdhbnR0IiwiY2xhc3MgZGlhZ3JhbSIsImdpdCBncmFwaCJdLCJzY3JpcHRzIjp7ImJ1aWxkOmRldmVsb3BtZW50Ijoid2VicGFjayAtLXByb2dyZXNzIC0tY29sb3IiLCJidWlsZDpwcm9kdWN0aW9uIjoieWFybiBidWlsZDpkZXZlbG9wbWVudCAtLW1vZGUgcHJvZHVjdGlvbiAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5wcm9kLmJhYmVsLmpzIiwiYnVpbGQiOiJ5YXJuIGJ1aWxkOmRldmVsb3BtZW50ICYmIHlhcm4gYnVpbGQ6cHJvZHVjdGlvbiIsInBvc3RidWlsZCI6ImRvY3VtZW50YXRpb24gYnVpbGQgc3JjL21lcm1haWRBUEkuanMgc3JjL2NvbmZpZy5qcyBzcmMvZGVmYXVsdENvbmZpZy5qcyAtLXNoYWxsb3cgLWYgbWQgLS1tYXJrZG93bi10b2MgZmFsc2UgPiBkb2NzL1NldHVwLm1kIiwiYnVpbGQ6d2F0Y2giOiJ5YXJuIGJ1aWxkIC0td2F0Y2giLCJyZWxlYXNlIjoieWFybiBidWlsZCIsImxpbnQiOiJlc2xpbnQgc3JjIiwiZTJlOmRlcHIiOiJ5YXJuIGxpbnQgJiYgamVzdCBlMmUgLS1jb25maWcgZTJlL2plc3QuY29uZmlnLmpzIiwiY3lwcmVzcyI6InBlcmN5IGV4ZWMgLS0gY3lwcmVzcyBydW4iLCJlMmUiOiJzdGFydC1zZXJ2ZXItYW5kLXRlc3QgZGV2IGh0dHA6Ly9sb2NhbGhvc3Q6OTAwMC8gY3lwcmVzcyIsImUyZS11cGQiOiJ5YXJuIGxpbnQgJiYgamVzdCBlMmUgLXUgLS1jb25maWcgZTJlL2plc3QuY29uZmlnLmpzIiwiZGV2Ijoid2VicGFjayBzZXJ2ZSAtLWNvbmZpZyB3ZWJwYWNrLmNvbmZpZy5lMmUuanMiLCJ0ZXN0IjoieWFybiBsaW50ICYmIGplc3Qgc3JjLy4qIiwidGVzdDp3YXRjaCI6Implc3QgLS13YXRjaCBzcmMiLCJwcmVwdWJsaXNoT25seSI6Inlhcm4gYnVpbGQgJiYgeWFybiB0ZXN0IiwicHJlcGFyZSI6Inlhcm4gYnVpbGQifSwicmVwb3NpdG9yeSI6eyJ0eXBlIjoiZ2l0IiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL2tuc3YvbWVybWFpZCJ9LCJhdXRob3IiOiJLbnV0IFN2ZWlkcXZpc3QiLCJsaWNlbnNlIjoiTUlUIiwic3RhbmRhcmQiOnsiaWdub3JlIjpbIioqL3BhcnNlci8qLmpzIiwiZGlzdC8qKi8qLmpzIiwiY3lwcmVzcy8qKi8qLmpzIl0sImdsb2JhbHMiOlsicGFnZSJdfSwiZGVwZW5kZW5jaWVzIjp7IkBicmFpbnRyZWUvc2FuaXRpemUtdXJsIjoiXjMuMS4wIiwiZDMiOiJeNS4xNi4wIiwiZGFncmUiOiJeMC44LjUiLCJkYWdyZS1kMyI6Il4wLjYuNCIsImRvbXB1cmlmeSI6IjIuMy4xIiwiZ3JhcGhsaWIiOiJeMi4xLjgiLCJraHJvbWEiOiJeMS40LjEiLCJtb21lbnQtbWluaSI6Il4yLjI0LjAiLCJzdHlsaXMiOiJeNC4wLjEwIn0sImRldkRlcGVuZGVuY2llcyI6eyJAYmFiZWwvY29yZSI6Il43LjE0LjYiLCJAYmFiZWwvZXNsaW50LXBhcnNlciI6Il43LjE0LjciLCJAYmFiZWwvcHJlc2V0LWVudiI6Il43LjE0LjciLCJAYmFiZWwvcmVnaXN0ZXIiOiJeNy4xNC41IiwiQHBlcmN5L2NsaSI6Il4xLjAuMC1iZXRhLjU4IiwiQHBlcmN5L2N5cHJlc3MiOiJeMy4xLjAiLCJAcGVyY3kvbWlncmF0ZSI6Il4wLjExLjAiLCJiYWJlbC1qZXN0IjoiXjI3LjAuNiIsImJhYmVsLWxvYWRlciI6Il44LjIuMiIsImNvdmVyYWxscyI6Il4zLjAuMiIsImNzcy10by1zdHJpbmctbG9hZGVyIjoiXjAuMS4zIiwiY3lwcmVzcyI6IjguMS4wIiwiZG9jdW1lbnRhdGlvbiI6IjEzLjIuMCIsImVzbGludCI6Il43LjMwLjAiLCJlc2xpbnQtY29uZmlnLXByZXR0aWVyIjoiXjguMy4wIiwiZXNsaW50LXBsdWdpbi1wcmV0dGllciI6Il4zLjQuMCIsImh1c2t5IjoiXjcuMC4xIiwiaWRlbnRpdHktb2JqLXByb3h5IjoiXjMuMC4wIiwiamVzdCI6Il4yNy4wLjYiLCJqaXNvbiI6Il4wLjQuMTgiLCJqcy1iYXNlNjQiOiIzLjYuMSIsIm1vbWVudCI6Il4yLjIzLjAiLCJwcmV0dGllciI6Il4yLjMuMiIsInN0YXJ0LXNlcnZlci1hbmQtdGVzdCI6Il4xLjEyLjYiLCJ0ZXJzZXItd2VicGFjay1wbHVnaW4iOiJeNC4yLjMiLCJ3ZWJwYWNrIjoiXjQuNDEuMiIsIndlYnBhY2stY2xpIjoiXjQuNy4yIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuNC4xIiwid2VicGFjay1ub2RlLWV4dGVybmFscyI6Il4zLjAuMCJ9LCJmaWxlcyI6WyJkaXN0Il0sInNpZGVFZmZlY3RzIjpbIioqLyouY3NzIiwiKiovKi5zY3NzIl0sImh1c2t5Ijp7Imhvb2tzIjp7InByZS1wdXNoIjoieWFybiB0ZXN0In19fScpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMTQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighaSh0KSlyZXR1cm4hMTt2YXIgZT1yKHQpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWV8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09ZXx8IltvYmplY3QgUHJveHldIj09ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KS5TeW1ib2w7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCl7dmFyIHI9bigxOSksaT1uKDIzNyksYT1lJiYhZS5ub2RlVHlwZSYmZSxvPWEmJiJvYmplY3QiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQscz1vJiZvLmV4cG9ydHM9PT1hP3IuQnVmZmVyOnZvaWQgMCxjPShzP3MuaXNCdWZmZXI6dm9pZCAwKXx8aTt0LmV4cG9ydHM9Y30pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjQ2KSxpPW4oNzkpLGE9bigyNDcpLG89bigxMjEpLHM9bigyNDgpLGM9bigzNCksdT1uKDExMCksbD11KHIpLGg9dShpKSxmPXUoYSksZD11KG8pLHA9dShzKSx5PWM7KHImJiJbb2JqZWN0IERhdGFWaWV3XSIhPXkobmV3IHIobmV3IEFycmF5QnVmZmVyKDEpKSl8fGkmJiJbb2JqZWN0IE1hcF0iIT15KG5ldyBpKXx8YSYmIltvYmplY3QgUHJvbWlzZV0iIT15KGEucmVzb2x2ZSgpKXx8byYmIltvYmplY3QgU2V0XSIhPXkobmV3IG8pfHxzJiYiW29iamVjdCBXZWFrTWFwXSIhPXkobmV3IHMpKSYmKHk9ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KSxuPSJbb2JqZWN0IE9iamVjdF0iPT1lP3QuY29uc3RydWN0b3I6dm9pZCAwLHI9bj91KG4pOiIiO2lmKHIpc3dpdGNoKHIpe2Nhc2UgbDpyZXR1cm4iW29iamVjdCBEYXRhVmlld10iO2Nhc2UgaDpyZXR1cm4iW29iamVjdCBNYXBdIjtjYXNlIGY6cmV0dXJuIltvYmplY3QgUHJvbWlzZV0iO2Nhc2UgZDpyZXR1cm4iW29iamVjdCBTZXRdIjtjYXNlIHA6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiBlfSksdC5leHBvcnRzPXl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGkodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPXtkZWZhdWx0czpuKDE1NCksZWFjaDpuKDg5KSxpc0Z1bmN0aW9uOm4oMzkpLGlzUGxhaW5PYmplY3Q6bigxNTgpLHBpY2s6bigxNjEpLGhhczpuKDk0KSxyYW5nZTpuKDE2MiksdW5pcXVlSWQ6bigxNjMpfX1jYXRjaCh0KXt9cnx8KHI9d2luZG93Ll8pLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQscil7dmFyIGk9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbih0LGUsbixyKXtmb3Iobj1ufHx7fSxyPXQubGVuZ3RoO3ItLTtuW3Rbcl1dPWUpO3JldHVybiBufSxlPVsxLDNdLG49WzEsNV0scj1bMSwxN10saT1bMiwxMF0sYT1bMSwyMV0sbz1bMSwyMl0scz1bMSwyM10sYz1bMSwyNF0sdT1bMSwyNV0sbD1bMSwyNl0saD1bMSwxOV0sZj1bMSwyN10sZD1bMSwyOF0scD1bMSwzMV0seT1bNjYsNjddLGc9WzUsOCwxNCwzNSwzNiwzNywzOCwzOSw0MCw0OCw1NSw1Nyw2Niw2N10sbT1bNSw2LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLHY9WzEsNTFdLGI9WzEsNTJdLHg9WzEsNTNdLF89WzEsNTRdLGs9WzEsNTVdLHc9WzEsNTZdLFQ9WzEsNTddLEU9WzU3LDU4XSxDPVsxLDY5XSxTPVsxLDY1XSxBPVsxLDY2XSxNPVsxLDY3XSxPPVsxLDY4XSxOPVsxLDcwXSxCPVsxLDc0XSxEPVsxLDc1XSxMPVsxLDcyXSxJPVsxLDczXSxSPVs1LDgsMTQsMzUsMzYsMzcsMzgsMzksNDAsNDgsNjYsNjddLEY9e3RyYWNlOmZ1bmN0aW9uKCl7fSx5eTp7fSxzeW1ib2xzXzp7ZXJyb3I6MixzdGFydDozLGRpcmVjdGl2ZTo0LE5FV0xJTkU6NSxSRDo2LGRpYWdyYW06NyxFT0Y6OCxvcGVuRGlyZWN0aXZlOjksdHlwZURpcmVjdGl2ZToxMCxjbG9zZURpcmVjdGl2ZToxMSwiOiI6MTIsYXJnRGlyZWN0aXZlOjEzLG9wZW5fZGlyZWN0aXZlOjE0LHR5cGVfZGlyZWN0aXZlOjE1LGFyZ19kaXJlY3RpdmU6MTYsY2xvc2VfZGlyZWN0aXZlOjE3LHJlcXVpcmVtZW50RGVmOjE4LGVsZW1lbnREZWY6MTkscmVsYXRpb25zaGlwRGVmOjIwLHJlcXVpcmVtZW50VHlwZToyMSxyZXF1aXJlbWVudE5hbWU6MjIsU1RSVUNUX1NUQVJUOjIzLHJlcXVpcmVtZW50Qm9keToyNCxJRDoyNSxDT0xPTlNFUDoyNixpZDoyNyxURVhUOjI4LHRleHQ6MjksUklTSzozMCxyaXNrTGV2ZWw6MzEsVkVSSUZZTVRIRDozMix2ZXJpZnlUeXBlOjMzLFNUUlVDVF9TVE9QOjM0LFJFUVVJUkVNRU5UOjM1LEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6MzYsSU5URVJGQUNFX1JFUVVJUkVNRU5UOjM3LFBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UOjM4LFBIWVNJQ0FMX1JFUVVJUkVNRU5UOjM5LERFU0lHTl9DT05TVFJBSU5UOjQwLExPV19SSVNLOjQxLE1FRF9SSVNLOjQyLEhJR0hfUklTSzo0MyxWRVJJRllfQU5BTFlTSVM6NDQsVkVSSUZZX0RFTU9OU1RSQVRJT046NDUsVkVSSUZZX0lOU1BFQ1RJT046NDYsVkVSSUZZX1RFU1Q6NDcsRUxFTUVOVDo0OCxlbGVtZW50TmFtZTo0OSxlbGVtZW50Qm9keTo1MCxUWVBFOjUxLHR5cGU6NTIsRE9DUkVGOjUzLHJlZjo1NCxFTkRfQVJST1dfTDo1NSxyZWxhdGlvbnNoaXA6NTYsTElORTo1NyxFTkRfQVJST1dfUjo1OCxDT05UQUlOUzo1OSxDT1BJRVM6NjAsREVSSVZFUzo2MSxTQVRJU0ZJRVM6NjIsVkVSSUZJRVM6NjMsUkVGSU5FUzo2NCxUUkFDRVM6NjUsdW5xU3RyaW5nOjY2LHFTdHJpbmc6NjcsJGFjY2VwdDowLCRlbmQ6MX0sdGVybWluYWxzXzp7MjoiZXJyb3IiLDU6Ik5FV0xJTkUiLDY6IlJEIiw4OiJFT0YiLDEyOiI6IiwxNDoib3Blbl9kaXJlY3RpdmUiLDE1OiJ0eXBlX2RpcmVjdGl2ZSIsMTY6ImFyZ19kaXJlY3RpdmUiLDE3OiJjbG9zZV9kaXJlY3RpdmUiLDIzOiJTVFJVQ1RfU1RBUlQiLDI1OiJJRCIsMjY6IkNPTE9OU0VQIiwyODoiVEVYVCIsMzA6IlJJU0siLDMyOiJWRVJJRllNVEhEIiwzNDoiU1RSVUNUX1NUT1AiLDM1OiJSRVFVSVJFTUVOVCIsMzY6IkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQiLDM3OiJJTlRFUkZBQ0VfUkVRVUlSRU1FTlQiLDM4OiJQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVCIsMzk6IlBIWVNJQ0FMX1JFUVVJUkVNRU5UIiw0MDoiREVTSUdOX0NPTlNUUkFJTlQiLDQxOiJMT1dfUklTSyIsNDI6Ik1FRF9SSVNLIiw0MzoiSElHSF9SSVNLIiw0NDoiVkVSSUZZX0FOQUxZU0lTIiw0NToiVkVSSUZZX0RFTU9OU1RSQVRJT04iLDQ2OiJWRVJJRllfSU5TUEVDVElPTiIsNDc6IlZFUklGWV9URVNUIiw0ODoiRUxFTUVOVCIsNTE6IlRZUEUiLDUzOiJET0NSRUYiLDU1OiJFTkRfQVJST1dfTCIsNTc6IkxJTkUiLDU4OiJFTkRfQVJST1dfUiIsNTk6IkNPTlRBSU5TIiw2MDoiQ09QSUVTIiw2MToiREVSSVZFUyIsNjI6IlNBVElTRklFUyIsNjM6IlZFUklGSUVTIiw2NDoiUkVGSU5FUyIsNjU6IlRSQUNFUyIsNjY6InVucVN0cmluZyIsNjc6InFTdHJpbmcifSxwcm9kdWN0aW9uc186WzAsWzMsM10sWzMsMl0sWzMsNF0sWzQsM10sWzQsNV0sWzksMV0sWzEwLDFdLFsxMywxXSxbMTEsMV0sWzcsMF0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzcsMl0sWzE4LDVdLFsyNCw1XSxbMjQsNV0sWzI0LDVdLFsyNCw1XSxbMjQsMl0sWzI0LDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFsyMSwxXSxbMjEsMV0sWzIxLDFdLFszMSwxXSxbMzEsMV0sWzMxLDFdLFszMywxXSxbMzMsMV0sWzMzLDFdLFszMywxXSxbMTksNV0sWzUwLDVdLFs1MCw1XSxbNTAsMl0sWzUwLDFdLFsyMCw1XSxbMjAsNV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFs1NiwxXSxbNTYsMV0sWzU2LDFdLFsyMiwxXSxbMjIsMV0sWzI3LDFdLFsyNywxXSxbMjksMV0sWzI5LDFdLFs0OSwxXSxbNDksMV0sWzUyLDFdLFs1MiwxXSxbNTQsMV0sWzU0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgNjpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgNzpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA4OmFbc109YVtzXS50cmltKCkucmVwbGFjZSgvJy9nLCciJyksci5wYXJzZURpcmVjdGl2ZShhW3NdLCJhcmdfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSA5OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsInBpZSIpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgMTY6ci5hZGRSZXF1aXJlbWVudChhW3MtM10sYVtzLTRdKTticmVhaztjYXNlIDE3OnIuc2V0TmV3UmVxSWQoYVtzLTJdKTticmVhaztjYXNlIDE4OnIuc2V0TmV3UmVxVGV4dChhW3MtMl0pO2JyZWFrO2Nhc2UgMTk6ci5zZXROZXdSZXFSaXNrKGFbcy0yXSk7YnJlYWs7Y2FzZSAyMDpyLnNldE5ld1JlcVZlcmlmeU1ldGhvZChhW3MtMl0pO2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlJFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjQ6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9ci5SZXF1aXJlbWVudFR5cGUuSU5URVJGQUNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjY6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBFUkZPUk1BTkNFX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLlBIWVNJQ0FMX1JFUVVJUkVNRU5UO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuUmVxdWlyZW1lbnRUeXBlLkRFU0lHTl9DT05TVFJBSU5UO2JyZWFrO2Nhc2UgMjk6dGhpcy4kPXIuUmlza0xldmVsLkxPV19SSVNLO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPXIuUmlza0xldmVsLk1FRF9SSVNLO2JyZWFrO2Nhc2UgMzE6dGhpcy4kPXIuUmlza0xldmVsLkhJR0hfUklTSzticmVhaztjYXNlIDMyOnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0FOQUxZU0lTO2JyZWFrO2Nhc2UgMzM6dGhpcy4kPXIuVmVyaWZ5VHlwZS5WRVJJRllfREVNT05TVFJBVElPTjticmVhaztjYXNlIDM0OnRoaXMuJD1yLlZlcmlmeVR5cGUuVkVSSUZZX0lOU1BFQ1RJT047YnJlYWs7Y2FzZSAzNTp0aGlzLiQ9ci5WZXJpZnlUeXBlLlZFUklGWV9URVNUO2JyZWFrO2Nhc2UgMzY6ci5hZGRFbGVtZW50KGFbcy0zXSk7YnJlYWs7Y2FzZSAzNzpyLnNldE5ld0VsZW1lbnRUeXBlKGFbcy0yXSk7YnJlYWs7Y2FzZSAzODpyLnNldE5ld0VsZW1lbnREb2NSZWYoYVtzLTJdKTticmVhaztjYXNlIDQxOnIuYWRkUmVsYXRpb25zaGlwKGFbcy0yXSxhW3NdLGFbcy00XSk7YnJlYWs7Y2FzZSA0MjpyLmFkZFJlbGF0aW9uc2hpcChhW3MtMl0sYVtzLTRdLGFbc10pO2JyZWFrO2Nhc2UgNDM6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5DT05UQUlOUzticmVhaztjYXNlIDQ0OnRoaXMuJD1yLlJlbGF0aW9uc2hpcHMuQ09QSUVTO2JyZWFrO2Nhc2UgNDU6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5ERVJJVkVTO2JyZWFrO2Nhc2UgNDY6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5TQVRJU0ZJRVM7YnJlYWs7Y2FzZSA0Nzp0aGlzLiQ9ci5SZWxhdGlvbnNoaXBzLlZFUklGSUVTO2JyZWFrO2Nhc2UgNDg6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5SRUZJTkVTO2JyZWFrO2Nhc2UgNDk6dGhpcy4kPXIuUmVsYXRpb25zaGlwcy5UUkFDRVN9fSx0YWJsZTpbezM6MSw0OjIsNjplLDk6NCwxNDpufSx7MTpbM119LHszOjcsNDoyLDU6WzEsNl0sNjplLDk6NCwxNDpufSx7NTpbMSw4XX0sezEwOjksMTU6WzEsMTBdfSx7MTU6WzIsNl19LHszOjExLDQ6Miw2OmUsOTo0LDE0Om59LHsxOlsyLDJdfSx7NDoxNiw1OnIsNzoxMiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHsxMToyOSwxMjpbMSwzMF0sMTc6cH0sdChbMTIsMTddLFsyLDddKSx7MTpbMiwxXX0sezg6WzEsMzJdfSx7NDoxNiw1OnIsNzozMyw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM0LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezQ6MTYsNTpyLDc6MzUsODppLDk6NCwxNDpuLDE4OjEzLDE5OjE0LDIwOjE1LDIxOjE4LDI3OjIwLDM1OmEsMzY6bywzNzpzLDM4OmMsMzk6dSw0MDpsLDQ4OmgsNjY6Ziw2NzpkfSx7NDoxNiw1OnIsNzozNiw4OmksOTo0LDE0Om4sMTg6MTMsMTk6MTQsMjA6MTUsMjE6MTgsMjc6MjAsMzU6YSwzNjpvLDM3OnMsMzg6YywzOTp1LDQwOmwsNDg6aCw2NjpmLDY3OmR9LHs0OjE2LDU6ciw3OjM3LDg6aSw5OjQsMTQ6biwxODoxMywxOToxNCwyMDoxNSwyMToxOCwyNzoyMCwzNTphLDM2Om8sMzc6cywzODpjLDM5OnUsNDA6bCw0ODpoLDY2OmYsNjc6ZH0sezIyOjM4LDY2OlsxLDM5XSw2NzpbMSw0MF19LHs0OTo0MSw2NjpbMSw0Ml0sNjc6WzEsNDNdfSx7NTU6WzEsNDRdLDU3OlsxLDQ1XX0sdCh5LFsyLDIzXSksdCh5LFsyLDI0XSksdCh5LFsyLDI1XSksdCh5LFsyLDI2XSksdCh5LFsyLDI3XSksdCh5LFsyLDI4XSksdChnLFsyLDUyXSksdChnLFsyLDUzXSksdChtLFsyLDRdKSx7MTM6NDYsMTY6WzEsNDddfSx0KG0sWzIsOV0pLHsxOlsyLDNdfSx7ODpbMiwxMV19LHs4OlsyLDEyXX0sezg6WzIsMTNdfSx7ODpbMiwxNF19LHs4OlsyLDE1XX0sezIzOlsxLDQ4XX0sezIzOlsyLDUwXX0sezIzOlsyLDUxXX0sezIzOlsxLDQ5XX0sezIzOlsyLDU2XX0sezIzOlsyLDU3XX0sezU2OjUwLDU5OnYsNjA6Yiw2MTp4LDYyOl8sNjM6ayw2NDp3LDY1OlR9LHs1Njo1OCw1OTp2LDYwOmIsNjE6eCw2MjpfLDYzOmssNjQ6dyw2NTpUfSx7MTE6NTksMTc6cH0sezE3OlsyLDhdfSx7NTpbMSw2MF19LHs1OlsxLDYxXX0sezU3OlsxLDYyXX0sdChFLFsyLDQzXSksdChFLFsyLDQ0XSksdChFLFsyLDQ1XSksdChFLFsyLDQ2XSksdChFLFsyLDQ3XSksdChFLFsyLDQ4XSksdChFLFsyLDQ5XSksezU4OlsxLDYzXX0sdChtLFsyLDVdKSx7NTpDLDI0OjY0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Tn0sezU6QiwzNDpELDUwOjcxLDUxOkwsNTM6SX0sezI3Ojc2LDY2OmYsNjc6ZH0sezI3Ojc3LDY2OmYsNjc6ZH0sdChSLFsyLDE2XSksezI2OlsxLDc4XX0sezI2OlsxLDc5XX0sezI2OlsxLDgwXX0sezI2OlsxLDgxXX0sezU6QywyNDo4MiwyNTpTLDI4OkEsMzA6TSwzMjpPLDM0Ok59LHQoUixbMiwyMl0pLHQoUixbMiwzNl0pLHsyNjpbMSw4M119LHsyNjpbMSw4NF19LHs1OkIsMzQ6RCw1MDo4NSw1MTpMLDUzOkl9LHQoUixbMiw0MF0pLHQoUixbMiw0MV0pLHQoUixbMiw0Ml0pLHsyNzo4Niw2NjpmLDY3OmR9LHsyOTo4Nyw2NjpbMSw4OF0sNjc6WzEsODldfSx7MzE6OTAsNDE6WzEsOTFdLDQyOlsxLDkyXSw0MzpbMSw5M119LHszMzo5NCw0NDpbMSw5NV0sNDU6WzEsOTZdLDQ2OlsxLDk3XSw0NzpbMSw5OF19LHQoUixbMiwyMV0pLHs1Mjo5OSw2NjpbMSwxMDBdLDY3OlsxLDEwMV19LHs1NDoxMDIsNjY6WzEsMTAzXSw2NzpbMSwxMDRdfSx0KFIsWzIsMzldKSx7NTpbMSwxMDVdfSx7NTpbMSwxMDZdfSx7NTpbMiw1NF19LHs1OlsyLDU1XX0sezU6WzEsMTA3XX0sezU6WzIsMjldfSx7NTpbMiwzMF19LHs1OlsyLDMxXX0sezU6WzEsMTA4XX0sezU6WzIsMzJdfSx7NTpbMiwzM119LHs1OlsyLDM0XX0sezU6WzIsMzVdfSx7NTpbMSwxMDldfSx7NTpbMiw1OF19LHs1OlsyLDU5XX0sezU6WzEsMTEwXX0sezU6WzIsNjBdfSx7NTpbMiw2MV19LHs1OkMsMjQ6MTExLDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Tn0sezU6QywyNDoxMTIsMjU6UywyODpBLDMwOk0sMzI6TywzNDpOfSx7NTpDLDI0OjExMywyNTpTLDI4OkEsMzA6TSwzMjpPLDM0Ok59LHs1OkMsMjQ6MTE0LDI1OlMsMjg6QSwzMDpNLDMyOk8sMzQ6Tn0sezU6QiwzNDpELDUwOjExNSw1MTpMLDUzOkl9LHs1OkIsMzQ6RCw1MDoxMTYsNTE6TCw1MzpJfSx0KFIsWzIsMTddKSx0KFIsWzIsMThdKSx0KFIsWzIsMTldKSx0KFIsWzIsMjBdKSx0KFIsWzIsMzddKSx0KFIsWzIsMzhdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsNl0sNzpbMiwyXSwxMTpbMiwxXSwzMjpbMiwzXSwzMzpbMiwxMV0sMzQ6WzIsMTJdLDM1OlsyLDEzXSwzNjpbMiwxNF0sMzc6WzIsMTVdLDM5OlsyLDUwXSw0MDpbMiw1MV0sNDI6WzIsNTZdLDQzOlsyLDU3XSw0NzpbMiw4XSw4ODpbMiw1NF0sODk6WzIsNTVdLDkxOlsyLDI5XSw5MjpbMiwzMF0sOTM6WzIsMzFdLDk1OlsyLDMyXSw5NjpbMiwzM10sOTc6WzIsMzRdLDk4OlsyLDM1XSwxMDA6WzIsNThdLDEwMTpbMiw1OV0sMTAzOlsyLDYwXSwxMDQ6WzIsNjFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0sUD17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiB0aGlzLmJlZ2luKCJvcGVuX2RpcmVjdGl2ZSIpLDE0O2Nhc2UgMTpyZXR1cm4gdGhpcy5iZWdpbigidHlwZV9kaXJlY3RpdmUiKSwxNTtjYXNlIDI6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLmJlZ2luKCJhcmdfZGlyZWN0aXZlIiksMTI7Y2FzZSAzOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5wb3BTdGF0ZSgpLDE3O2Nhc2UgNDpyZXR1cm4gMTY7Y2FzZSA1OnJldHVybiA1O2Nhc2UgNjpjYXNlIDc6Y2FzZSA4OmJyZWFrO2Nhc2UgOTpyZXR1cm4gODtjYXNlIDEwOnJldHVybiA2O2Nhc2UgMTE6cmV0dXJuIDIzO2Nhc2UgMTI6cmV0dXJuIDM0O2Nhc2UgMTM6cmV0dXJuIDI2O2Nhc2UgMTQ6cmV0dXJuIDI1O2Nhc2UgMTU6cmV0dXJuIDI4O2Nhc2UgMTY6cmV0dXJuIDMwO2Nhc2UgMTc6cmV0dXJuIDMyO2Nhc2UgMTg6cmV0dXJuIDM1O2Nhc2UgMTk6cmV0dXJuIDM2O2Nhc2UgMjA6cmV0dXJuIDM3O2Nhc2UgMjE6cmV0dXJuIDM4O2Nhc2UgMjI6cmV0dXJuIDM5O2Nhc2UgMjM6cmV0dXJuIDQwO2Nhc2UgMjQ6cmV0dXJuIDQxO2Nhc2UgMjU6cmV0dXJuIDQyO2Nhc2UgMjY6cmV0dXJuIDQzO2Nhc2UgMjc6cmV0dXJuIDQ0O2Nhc2UgMjg6cmV0dXJuIDQ1O2Nhc2UgMjk6cmV0dXJuIDQ2O2Nhc2UgMzA6cmV0dXJuIDQ3O2Nhc2UgMzE6cmV0dXJuIDQ4O2Nhc2UgMzI6cmV0dXJuIDU5O2Nhc2UgMzM6cmV0dXJuIDYwO2Nhc2UgMzQ6cmV0dXJuIDYxO2Nhc2UgMzU6cmV0dXJuIDYyO2Nhc2UgMzY6cmV0dXJuIDYzO2Nhc2UgMzc6cmV0dXJuIDY0O2Nhc2UgMzg6cmV0dXJuIDY1O2Nhc2UgMzk6cmV0dXJuIDUxO2Nhc2UgNDA6cmV0dXJuIDUzO2Nhc2UgNDE6cmV0dXJuIDU1O2Nhc2UgNDI6cmV0dXJuIDU4O2Nhc2UgNDM6cmV0dXJuIDU3O2Nhc2UgNDQ6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSA0NTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSA0NjpyZXR1cm4icVN0cmluZyI7Y2FzZSA0NzpyZXR1cm4gZS55eXRleHQ9ZS55eXRleHQudHJpbSgpLDY2fX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OiQpL2ksL14oPzpyZXF1aXJlbWVudERpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XH0pL2ksL14oPzo6KS9pLC9eKD86aWRcYikvaSwvXig/OnRleHRcYikvaSwvXig/OnJpc2tcYikvaSwvXig/OnZlcmlmeU1ldGhvZFxiKS9pLC9eKD86cmVxdWlyZW1lbnRcYikvaSwvXig/OmZ1bmN0aW9uYWxSZXF1aXJlbWVudFxiKS9pLC9eKD86aW50ZXJmYWNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBlcmZvcm1hbmNlUmVxdWlyZW1lbnRcYikvaSwvXig/OnBoeXNpY2FsUmVxdWlyZW1lbnRcYikvaSwvXig/OmRlc2lnbkNvbnN0cmFpbnRcYikvaSwvXig/Omxvd1xiKS9pLC9eKD86bWVkaXVtXGIpL2ksL14oPzpoaWdoXGIpL2ksL14oPzphbmFseXNpc1xiKS9pLC9eKD86ZGVtb25zdHJhdGlvblxiKS9pLC9eKD86aW5zcGVjdGlvblxiKS9pLC9eKD86dGVzdFxiKS9pLC9eKD86ZWxlbWVudFxiKS9pLC9eKD86Y29udGFpbnNcYikvaSwvXig/OmNvcGllc1xiKS9pLC9eKD86ZGVyaXZlc1xiKS9pLC9eKD86c2F0aXNmaWVzXGIpL2ksL14oPzp2ZXJpZmllc1xiKS9pLC9eKD86cmVmaW5lc1xiKS9pLC9eKD86dHJhY2VzXGIpL2ksL14oPzp0eXBlXGIpL2ksL14oPzpkb2NyZWZcYikvaSwvXig/OjwtKS9pLC9eKD86LT4pL2ksL14oPzotKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbXHddW15cclxuXHtcPFw+XC1cPV0qKS9pXSxjb25kaXRpb25zOntjbG9zZV9kaXJlY3RpdmU6e3J1bGVzOltdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSx0eXBlX2RpcmVjdGl2ZTp7cnVsZXM6WzIsM10saW5jbHVzaXZlOiExfSxvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdW5xU3RyaW5nOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHRva2VuOntydWxlczpbXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzQ1LDQ2XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0N10saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIGooKXt0aGlzLnl5PXt9fXJldHVybiBGLmxleGVyPVAsai5wcm90b3R5cGU9RixGLlBhcnNlcj1qLG5ldyBqfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW5ldyhuKDE3NSkuZGVmYXVsdCkoe3I6MCxnOjAsYjowLGE6MH0sInRyYW5zcGFyZW50Iik7ZS5kZWZhdWx0PXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oNjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixhKXt2YXIgbz0hbjtufHwobj17fSk7Zm9yKHZhciBzPS0xLGM9ZS5sZW5ndGg7KytzPGM7KXt2YXIgdT1lW3NdLGw9YT9hKG5bdV0sdFt1XSx1LG4sdCk6dm9pZCAwO3ZvaWQgMD09PWwmJihsPXRbdV0pLG8/aShuLHUsbCk6cihuLHUsbCl9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzYpLGk9bigyMSksYT1PYmplY3QucHJvdG90eXBlLG89YS5oYXNPd25Qcm9wZXJ0eSxzPWEucHJvcGVydHlJc0VudW1lcmFibGUsYz1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/cjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmby5jYWxsKHQsImNhbGxlZSIpJiYhcy5jYWxsKHQsImNhbGxlZSIpfTt0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjM4KSxpPW4oNjIpLGE9big4Myksbz1hJiZhLmlzVHlwZWRBcnJheSxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8cih0KSlyZXR1cm4gdDt2YXIgZT10KyIiO3JldHVybiIwIj09ZSYmMS90PT0tMS8wPyItMCI6ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiZm9yZWlnbk9iamVjdCIpLmF0dHIoIndpZHRoIiwiMTAwMDAwIiksaT1uLmFwcGVuZCgieGh0bWw6ZGl2Iik7aS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgYT1lLmxhYmVsO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSJmdW5jdGlvbiI6aS5pbnNlcnQoYSk7YnJlYWs7Y2FzZSJvYmplY3QiOmkuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBhfSkpO2JyZWFrO2RlZmF1bHQ6aS5odG1sKGEpfXIuYXBwbHlTdHlsZShpLGUubGFiZWxTdHlsZSksaS5zdHlsZSgiZGlzcGxheSIsImlubGluZS1ibG9jayIpLGkuc3R5bGUoIndoaXRlLXNwYWNlIiwibm93cmFwIik7dmFyIG89aS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uYXR0cigid2lkdGgiLG8ud2lkdGgpLmF0dHIoImhlaWdodCIsby5oZWlnaHQpLG59fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDExKSxpPW4oNDYpLGE9big2KSxvPW4oNTMpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixzKXtpZih2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1zJiYocz0xKSwibnVtYmVyIiE9dHlwZW9mIHQpcmV0dXJuIG8uZGVmYXVsdCh0LHthOmV9KTt2YXIgYz1pLmRlZmF1bHQuc2V0KHtyOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLnIodCksZzpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5nKGUpLGI6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuYihuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEocyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShjKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQucGFyc2UodCk7Zm9yKHZhciBhIGluIGUpblthXT1yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcFthXShlW2FdKTtyZXR1cm4gaS5kZWZhdWx0LnN0cmluZ2lmeShuKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KSxpPW4oMjEwKSxhPW4oMjExKSxvPW4oMjEyKSxzPW4oMjEzKSxjPW4oMjE0KTtmdW5jdGlvbiB1KHQpe3ZhciBlPXRoaXMuX19kYXRhX189bmV3IHIodCk7dGhpcy5zaXplPWUuc2l6ZX11LnByb3RvdHlwZS5jbGVhcj1pLHUucHJvdG90eXBlLmRlbGV0ZT1hLHUucHJvdG90eXBlLmdldD1vLHUucHJvdG90eXBlLmhhcz1zLHUucHJvdG90eXBlLnNldD1jLHQuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMDUpLGk9bigyMDYpLGE9bigyMDcpLG89bigyMDgpLHM9bigyMDkpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj10Lmxlbmd0aDtuLS07KWlmKHIodFtuXVswXSxlKSlyZXR1cm4gbjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShPYmplY3QsImNyZWF0ZSIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuX19kYXRhX187cmV0dXJuIHIoZSk/blsic3RyaW5nIj09dHlwZW9mIGU/InN0cmluZyI6Imhhc2giXTpuLm1hcH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYwKSxpPW4oMzgpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBvPXRbZV07YS5jYWxsKHQsZSkmJmkobyxuKSYmKHZvaWQgMCE9PW58fGUgaW4gdCl8fHIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTExKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4peyJfX3Byb3RvX18iPT1lJiZyP3IodCxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpuLHdyaXRhYmxlOiEwfSk6dFtlXT1ufX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXig/OjB8WzEtOV1cZCopJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dHlwZW9mIHQ7cmV0dXJuISEoZT1udWxsPT1lPzkwMDcxOTkyNTQ3NDA5OTE6ZSkmJigibnVtYmVyIj09cnx8InN5bWJvbCIhPXImJm4udGVzdCh0KSkmJnQ+LTEmJnQlMT09MCYmdDxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdD09PSgiZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5wcm90b3R5cGV8fG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEzKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTApLGk9bigyNTkpKHIpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NyksaT1uKDUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MCxhPShlPXIoZSx0KSkubGVuZ3RoO251bGwhPXQmJm48YTspdD10W2koZVtuKytdKV07cmV0dXJuIG4mJm49PWE/dDp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1KSxpPW4oOTMpLGE9bigyNzMpLG89bigxMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQpP3Q6aSh0LGUpP1t0XTphKG8odCkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49LTEscj1udWxsPT10PzA6dC5sZW5ndGgsaT1BcnJheShyKTsrK248cjspaVtuXT1lKHRbbl0sbix0KTtyZXR1cm4gaX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM2KSxpPW4oMTQzKSxhPW4oMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYShpKHQsZSxyKSx0KyIiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM4KSxpPW4oMjUpLGE9big2MSksbz1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe2lmKCFvKG4pKXJldHVybiExO3ZhciBzPXR5cGVvZiBlO3JldHVybiEhKCJudW1iZXIiPT1zP2kobikmJmEoZSxuLmxlbmd0aCk6InN0cmluZyI9PXMmJmUgaW4gbikmJnIobltlXSx0KX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9e2xvbmdlc3RQYXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3IuZm9yRWFjaCh0LnNvdXJjZXMoKSwoZnVuY3Rpb24gbihpKXt2YXIgYT10Lm5vZGUoaSk7aWYoci5oYXMoZSxpKSlyZXR1cm4gYS5yYW5rO2VbaV09ITA7dmFyIG89ci5taW4oci5tYXAodC5vdXRFZGdlcyhpKSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS53KS10LmVkZ2UoZSkubWlubGVufSkpKTtyZXR1cm4gbyE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSYmbnVsbCE9b3x8KG89MCksYS5yYW5rPW99KSl9LHNsYWNrOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubm9kZShlLncpLnJhbmstdC5ub2RlKGUudikucmFuay10LmVkZ2UoZSkubWlubGVufX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9L14oJTIwfFxzKSooamF2YXNjcmlwdHxkYXRhKS9pbSxpPS9bXlx4MjAtXHg3RV0vZ2ltLGE9L14oW146XSspOi9nbSxvPVsiLiIsIi8iXTt0LmV4cG9ydHM9e3Nhbml0aXplVXJsOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJhYm91dDpibGFuayI7dmFyIGUsbixzPXQucmVwbGFjZShpLCIiKS50cmltKCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvLmluZGV4T2YodFswXSk+LTF9KHMpP3M6KG49cy5tYXRjaChhKSk/KGU9blswXSxyLnRlc3QoZSk/ImFib3V0OmJsYW5rIjpzKToiYWJvdXQ6YmxhbmsifX19LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzIsM10sbj1bMSw3XSxyPVs3LDEyLDE1LDE3LDE5LDIwLDIxXSxpPVs3LDExLDEyLDE1LDE3LDE5LDIwLDIxXSxhPVsyLDIwXSxvPVsxLDMyXSxzPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxHRzo0LCI6Ijo1LGRvY3VtZW50OjYsRU9GOjcsRElSOjgsb3B0aW9uczo5LGJvZHk6MTAsT1BUOjExLE5MOjEyLGxpbmU6MTMsc3RhdGVtZW50OjE0LENPTU1JVDoxNSxjb21taXRfYXJnOjE2LEJSQU5DSDoxNyxJRDoxOCxDSEVDS09VVDoxOSxNRVJHRToyMCxSRVNFVDoyMSxyZXNldF9hcmc6MjIsU1RSOjIzLEhFQUQ6MjQscmVzZXRfcGFyZW50czoyNSxDQVJFVDoyNiwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiR0ciLDU6IjoiLDc6IkVPRiIsODoiRElSIiwxMToiT1BUIiwxMjoiTkwiLDE1OiJDT01NSVQiLDE3OiJCUkFOQ0giLDE4OiJJRCIsMTk6IkNIRUNLT1VUIiwyMDoiTUVSR0UiLDIxOiJSRVNFVCIsMjM6IlNUUiIsMjQ6IkhFQUQiLDI2OiJDQVJFVCJ9LHByb2R1Y3Rpb25zXzpbMCxbMyw0XSxbMyw1XSxbNiwwXSxbNiwyXSxbOSwyXSxbOSwxXSxbMTAsMF0sWzEwLDJdLFsxMywyXSxbMTMsMV0sWzE0LDJdLFsxNCwyXSxbMTQsMl0sWzE0LDJdLFsxNCwyXSxbMTYsMF0sWzE2LDFdLFsyMiwyXSxbMjIsMl0sWzI1LDBdLFsyNSwyXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIGFbcy0xXTtjYXNlIDI6cmV0dXJuIHIuc2V0RGlyZWN0aW9uKGFbcy0zXSksYVtzLTFdO2Nhc2UgNDpyLnNldE9wdGlvbnMoYVtzLTFdKSx0aGlzLiQ9YVtzXTticmVhaztjYXNlIDU6YVtzLTFdKz1hW3NdLHRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA3OnRoaXMuJD1bXTticmVhaztjYXNlIDg6YVtzLTFdLnB1c2goYVtzXSksdGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDk6dGhpcy4kPWFbcy0xXTticmVhaztjYXNlIDExOnIuY29tbWl0KGFbc10pO2JyZWFrO2Nhc2UgMTI6ci5icmFuY2goYVtzXSk7YnJlYWs7Y2FzZSAxMzpyLmNoZWNrb3V0KGFbc10pO2JyZWFrO2Nhc2UgMTQ6ci5tZXJnZShhW3NdKTticmVhaztjYXNlIDE1OnIucmVzZXQoYVtzXSk7YnJlYWs7Y2FzZSAxNjp0aGlzLiQ9IiI7YnJlYWs7Y2FzZSAxNzp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDE4OnRoaXMuJD1hW3MtMV0rIjoiK2Fbc107YnJlYWs7Y2FzZSAxOTp0aGlzLiQ9YVtzLTFdKyI6IityLmNvdW50LHIuY291bnQ9MDticmVhaztjYXNlIDIwOnIuY291bnQ9MDticmVhaztjYXNlIDIxOnIuY291bnQrPTF9fSx0YWJsZTpbezM6MSw0OlsxLDJdfSx7MTpbM119LHs1OlsxLDNdLDg6WzEsNF19LHs2OjUsNzplLDk6NiwxMjpufSx7NTpbMSw4XX0sezc6WzEsOV19LHQocixbMiw3XSx7MTA6MTAsMTE6WzEsMTFdfSksdChpLFsyLDZdKSx7NjoxMiw3OmUsOTo2LDEyOm59LHsxOlsyLDFdfSx7NzpbMiw0XSwxMjpbMSwxNV0sMTM6MTMsMTQ6MTQsMTU6WzEsMTZdLDE3OlsxLDE3XSwxOTpbMSwxOF0sMjA6WzEsMTldLDIxOlsxLDIwXX0sdChpLFsyLDVdKSx7NzpbMSwyMV19LHQocixbMiw4XSksezEyOlsxLDIyXX0sdChyLFsyLDEwXSksezEyOlsyLDE2XSwxNjoyMywyMzpbMSwyNF19LHsxODpbMSwyNV19LHsxODpbMSwyNl19LHsxODpbMSwyN119LHsxODpbMSwzMF0sMjI6MjgsMjQ6WzEsMjldfSx7MTpbMiwyXX0sdChyLFsyLDldKSx7MTI6WzIsMTFdfSx7MTI6WzIsMTddfSx7MTI6WzIsMTJdfSx7MTI6WzIsMTNdfSx7MTI6WzIsMTRdfSx7MTI6WzIsMTVdfSx7MTI6YSwyNTozMSwyNjpvfSx7MTI6YSwyNTozMywyNjpvfSx7MTI6WzIsMThdfSx7MTI6YSwyNTozNCwyNjpvfSx7MTI6WzIsMTldfSx7MTI6WzIsMjFdfV0sZGVmYXVsdEFjdGlvbnM6ezk6WzIsMV0sMjE6WzIsMl0sMjM6WzIsMTFdLDI0OlsyLDE3XSwyNTpbMiwxMl0sMjY6WzIsMTNdLDI3OlsyLDE0XSwyODpbMiwxNV0sMzE6WzIsMThdLDMzOlsyLDE5XSwzNDpbMiwyMV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxjPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIDEyO2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmJyZWFrO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDU6cmV0dXJuIDE1O2Nhc2UgNjpyZXR1cm4gMTc7Y2FzZSA3OnJldHVybiAyMDtjYXNlIDg6cmV0dXJuIDIxO2Nhc2UgOTpyZXR1cm4gMTk7Y2FzZSAxMDpjYXNlIDExOnJldHVybiA4O2Nhc2UgMTI6cmV0dXJuIDU7Y2FzZSAxMzpyZXR1cm4gMjY7Y2FzZSAxNDp0aGlzLmJlZ2luKCJvcHRpb25zIik7YnJlYWs7Y2FzZSAxNTp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNjpyZXR1cm4gMTE7Y2FzZSAxNzp0aGlzLmJlZ2luKCJzdHJpbmciKTticmVhaztjYXNlIDE4OnRoaXMucG9wU3RhdGUoKTticmVhaztjYXNlIDE5OnJldHVybiAyMztjYXNlIDIwOnJldHVybiAxODtjYXNlIDIxOnJldHVybiA3fX0scnVsZXM6Wy9eKD86KFxyP1xuKSspL2ksL14oPzpccyspL2ksL14oPzojW15cbl0qKS9pLC9eKD86JVteXG5dKikvaSwvXig/OmdpdEdyYXBoXGIpL2ksL14oPzpjb21taXRcYikvaSwvXig/OmJyYW5jaFxiKS9pLC9eKD86bWVyZ2VcYikvaSwvXig/OnJlc2V0XGIpL2ksL14oPzpjaGVja291dFxiKS9pLC9eKD86TFJcYikvaSwvXig/OkJUXGIpL2ksL14oPzo6KS9pLC9eKD86XF4pL2ksL14oPzpvcHRpb25zXHI/XG4pL2ksL14oPzplbmRccj9cbikvaSwvXig/OlteXG5dK1xyP1xuKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpbYS16QS1aXVstX1wuYS16QS1aMC05XSpbLV9hLXpBLVowLTldKS9pLC9eKD86JCkvaV0sY29uZGl0aW9uczp7b3B0aW9uczp7cnVsZXM6WzE1LDE2XSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzE4LDE5XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE3LDIwLDIxXSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gdSgpe3RoaXMueXk9e319cmV0dXJuIHMubGV4ZXI9Yyx1LnByb3RvdHlwZT1zLHMuUGFyc2VyPXUsbmV3IHV9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDEyKSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bNiw5LDEwXSxuPXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxpbmZvOjQsZG9jdW1lbnQ6NSxFT0Y6NixsaW5lOjcsc3RhdGVtZW50OjgsTkw6OSxzaG93SW5mbzoxMCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiaW5mbyIsNjoiRU9GIiw5OiJOTCIsMTA6InNob3dJbmZvIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFs1LDBdLFs1LDJdLFs3LDFdLFs3LDFdLFs4LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe2EubGVuZ3RoO3N3aXRjaChpKXtjYXNlIDE6cmV0dXJuIHI7Y2FzZSA0OmJyZWFrO2Nhc2UgNjpyLnNldEluZm8oITApfX0sdGFibGU6W3szOjEsNDpbMSwyXX0sezE6WzNdfSx0KGUsWzIsMl0sezU6M30pLHs2OlsxLDRdLDc6NSw4OjYsOTpbMSw3XSwxMDpbMSw4XX0sezE6WzIsMV19LHQoZSxbMiwzXSksdChlLFsyLDRdKSx0KGUsWzIsNV0pLHQoZSxbMiw2XSldLGRlZmF1bHRBY3Rpb25zOns0OlsyLDFdfSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIWUucmVjb3ZlcmFibGUpe3ZhciBuPW5ldyBFcnJvcih0KTt0aHJvdyBuLmhhc2g9ZSxufXRoaXMudHJhY2UodCl9LHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj1bMF0scj1bXSxpPVtudWxsXSxhPVtdLG89dGhpcy50YWJsZSxzPSIiLGM9MCx1PTAsbD0wLGg9MixmPTEsZD1hLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHA9T2JqZWN0LmNyZWF0ZSh0aGlzLmxleGVyKSx5PXt5eTp7fX07Zm9yKHZhciBnIGluIHRoaXMueXkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMueXksZykmJih5Lnl5W2ddPXRoaXMueXlbZ10pO3Auc2V0SW5wdXQodCx5Lnl5KSx5Lnl5LmxleGVyPXAseS55eS5wYXJzZXI9dGhpcyx2b2lkIDA9PT1wLnl5bGxvYyYmKHAueXlsbG9jPXt9KTt2YXIgbT1wLnl5bGxvYzthLnB1c2gobSk7dmFyIHY9cC5vcHRpb25zJiZwLm9wdGlvbnMucmFuZ2VzO2Z1bmN0aW9uIGIoKXt2YXIgdDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mKHQ9ci5wb3AoKXx8cC5sZXgoKXx8ZikmJih0IGluc3RhbmNlb2YgQXJyYXkmJih0PShyPXQpLnBvcCgpKSx0PWUuc3ltYm9sc19bdF18fHQpLHR9ImZ1bmN0aW9uIj09dHlwZW9mIHkueXkucGFyc2VFcnJvcj90aGlzLnBhcnNlRXJyb3I9eS55eS5wYXJzZUVycm9yOnRoaXMucGFyc2VFcnJvcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykucGFyc2VFcnJvcjtmb3IodmFyIHgsXyxrLHcsVCxFLEMsUyxBLE09e307Oyl7aWYoaz1uW24ubGVuZ3RoLTFdLHRoaXMuZGVmYXVsdEFjdGlvbnNba10/dz10aGlzLmRlZmF1bHRBY3Rpb25zW2tdOihudWxsPT14JiYoeD1iKCkpLHc9b1trXSYmb1trXVt4XSksdm9pZCAwPT09d3x8IXcubGVuZ3RofHwhd1swXSl7dmFyIE89IiI7Zm9yKEUgaW4gQT1bXSxvW2tdKXRoaXMudGVybWluYWxzX1tFXSYmRT5oJiZBLnB1c2goIiciK3RoaXMudGVybWluYWxzX1tFXSsiJyIpO089cC5zaG93UG9zaXRpb24/IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOlxuIitwLnNob3dQb3NpdGlvbigpKyJcbkV4cGVjdGluZyAiK0Euam9pbigiLCAiKSsiLCBnb3QgJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciOiJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjogVW5leHBlY3RlZCAiKyh4PT1mPyJlbmQgb2YgaW5wdXQiOiInIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyIpLHRoaXMucGFyc2VFcnJvcihPLHt0ZXh0OnAubWF0Y2gsdG9rZW46dGhpcy50ZXJtaW5hbHNfW3hdfHx4LGxpbmU6cC55eWxpbmVubyxsb2M6bSxleHBlY3RlZDpBfSl9aWYod1swXWluc3RhbmNlb2YgQXJyYXkmJncubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIitrKyIsIHRva2VuOiAiK3gpO3N3aXRjaCh3WzBdKXtjYXNlIDE6bi5wdXNoKHgpLGkucHVzaChwLnl5dGV4dCksYS5wdXNoKHAueXlsbG9jKSxuLnB1c2god1sxXSkseD1udWxsLF8/KHg9XyxfPW51bGwpOih1PXAueXlsZW5nLHM9cC55eXRleHQsYz1wLnl5bGluZW5vLG09cC55eWxsb2MsbD4wJiZsLS0pO2JyZWFrO2Nhc2UgMjppZihDPXRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzFdLE0uJD1pW2kubGVuZ3RoLUNdLE0uXyQ9e2ZpcnN0X2xpbmU6YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2xpbmUsbGFzdF9saW5lOmFbYS5sZW5ndGgtMV0ubGFzdF9saW5lLGZpcnN0X2NvbHVtbjphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOmFbYS5sZW5ndGgtMV0ubGFzdF9jb2x1bW59LHYmJihNLl8kLnJhbmdlPVthW2EubGVuZ3RoLShDfHwxKV0ucmFuZ2VbMF0sYVthLmxlbmd0aC0xXS5yYW5nZVsxXV0pLHZvaWQgMCE9PShUPXRoaXMucGVyZm9ybUFjdGlvbi5hcHBseShNLFtzLHUsYyx5Lnl5LHdbMV0saSxhXS5jb25jYXQoZCkpKSlyZXR1cm4gVDtDJiYobj1uLnNsaWNlKDAsLTEqQyoyKSxpPWkuc2xpY2UoMCwtMSpDKSxhPWEuc2xpY2UoMCwtMSpDKSksbi5wdXNoKHRoaXMucHJvZHVjdGlvbnNfW3dbMV1dWzBdKSxpLnB1c2goTS4kKSxhLnB1c2goTS5fJCksUz1vW25bbi5sZW5ndGgtMl1dW25bbi5sZW5ndGgtMV1dLG4ucHVzaChTKTticmVhaztjYXNlIDM6cmV0dXJuITB9fXJldHVybiEwfX0scj17RU9GOjEscGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLnl5LnBhcnNlcil0aHJvdyBuZXcgRXJyb3IodCk7dGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcih0LGUpfSxzZXRJbnB1dDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnl5PWV8fHRoaXMueXl8fHt9LHRoaXMuX2lucHV0PXQsdGhpcy5fbW9yZT10aGlzLl9iYWNrdHJhY2s9dGhpcy5kb25lPSExLHRoaXMueXlsaW5lbm89dGhpcy55eWxlbmc9MCx0aGlzLnl5dGV4dD10aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaD0iIix0aGlzLmNvbmRpdGlvblN0YWNrPVsiSU5JVElBTCJdLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVswLDBdKSx0aGlzLm9mZnNldD0wLHRoaXN9LGlucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW5wdXRbMF07cmV0dXJuIHRoaXMueXl0ZXh0Kz10LHRoaXMueXlsZW5nKyssdGhpcy5vZmZzZXQrKyx0aGlzLm1hdGNoKz10LHRoaXMubWF0Y2hlZCs9dCx0Lm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKT8odGhpcy55eWxpbmVubysrLHRoaXMueXlsbG9jLmxhc3RfbGluZSsrKTp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrLHRoaXMub3B0aW9ucy5yYW5nZXMmJnRoaXMueXlsbG9jLnJhbmdlWzFdKyssdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UoMSksdH0sdW5wdXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsbj10LnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5faW5wdXQ9dCt0aGlzLl9pbnB1dCx0aGlzLnl5dGV4dD10aGlzLnl5dGV4dC5zdWJzdHIoMCx0aGlzLnl5dGV4dC5sZW5ndGgtZSksdGhpcy5vZmZzZXQtPWU7dmFyIHI9dGhpcy5tYXRjaC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMubWF0Y2g9dGhpcy5tYXRjaC5zdWJzdHIoMCx0aGlzLm1hdGNoLmxlbmd0aC0xKSx0aGlzLm1hdGNoZWQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtMSksbi5sZW5ndGgtMSYmKHRoaXMueXlsaW5lbm8tPW4ubGVuZ3RoLTEpO3ZhciBpPXRoaXMueXlsbG9jLnJhbmdlO3JldHVybiB0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjpuPyhuLmxlbmd0aD09PXIubGVuZ3RoP3RoaXMueXlsbG9jLmZpcnN0X2NvbHVtbjowKStyW3IubGVuZ3RoLW4ubGVuZ3RoXS5sZW5ndGgtblswXS5sZW5ndGg6dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLWV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1baVswXSxpWzBdK3RoaXMueXlsZW5nLWVdKSx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpc30sbW9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3JlPSEwLHRoaXN9LHJlamVjdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyPyh0aGlzLl9iYWNrdHJhY2s9ITAsdGhpcyk6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBZb3UgY2FuIG9ubHkgaW52b2tlIHJlamVjdCgpIGluIHRoZSBsZXhlciB3aGVuIHRoZSBsZXhlciBpcyBvZiB0aGUgYmFja3RyYWNraW5nIHBlcnN1YXNpb24gKG9wdGlvbnMuYmFja3RyYWNrX2xleGVyID0gdHJ1ZSkuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGVzczpmdW5jdGlvbih0KXt0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UodCkpfSxwYXN0SW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC10aGlzLm1hdGNoLmxlbmd0aCk7cmV0dXJuKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSt0LnN1YnN0cigtMjApLnJlcGxhY2UoL1xuL2csIiIpfSx1cGNvbWluZ0lucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaDtyZXR1cm4gdC5sZW5ndGg8MjAmJih0Kz10aGlzLl9pbnB1dC5zdWJzdHIoMCwyMC10Lmxlbmd0aCkpLCh0LnN1YnN0cigwLDIwKSsodC5sZW5ndGg+MjA/Ii4uLiI6IiIpKS5yZXBsYWNlKC9cbi9nLCIiKX0sc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXN0SW5wdXQoKSxlPW5ldyBBcnJheSh0Lmxlbmd0aCsxKS5qb2luKCItIik7cmV0dXJuIHQrdGhpcy51cGNvbWluZ0lucHV0KCkrIlxuIitlKyJeIn0sdGVzdF9tYXRjaDpmdW5jdGlvbih0LGUpe3ZhciBuLHIsaTtpZih0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyJiYoaT17eXlsaW5lbm86dGhpcy55eWxpbmVubyx5eWxsb2M6e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbn0seXl0ZXh0OnRoaXMueXl0ZXh0LG1hdGNoOnRoaXMubWF0Y2gsbWF0Y2hlczp0aGlzLm1hdGNoZXMsbWF0Y2hlZDp0aGlzLm1hdGNoZWQseXlsZW5nOnRoaXMueXlsZW5nLG9mZnNldDp0aGlzLm9mZnNldCxfbW9yZTp0aGlzLl9tb3JlLF9pbnB1dDp0aGlzLl9pbnB1dCx5eTp0aGlzLnl5LGNvbmRpdGlvblN0YWNrOnRoaXMuY29uZGl0aW9uU3RhY2suc2xpY2UoMCksZG9uZTp0aGlzLmRvbmV9LHRoaXMub3B0aW9ucy5yYW5nZXMmJihpLnl5bGxvYy5yYW5nZT10aGlzLnl5bGxvYy5yYW5nZS5zbGljZSgwKSkpLChyPXRbMF0ubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpKSYmKHRoaXMueXlsaW5lbm8rPXIubGVuZ3RoKSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5sYXN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW4sbGFzdF9jb2x1bW46cj9yW3IubGVuZ3RoLTFdLmxlbmd0aC1yW3IubGVuZ3RoLTFdLm1hdGNoKC9ccj9cbj8vKVswXS5sZW5ndGg6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rdFswXS5sZW5ndGh9LHRoaXMueXl0ZXh0Kz10WzBdLHRoaXMubWF0Y2grPXRbMF0sdGhpcy5tYXRjaGVzPXQsdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bdGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQrPXRoaXMueXlsZW5nXSksdGhpcy5fbW9yZT0hMSx0aGlzLl9iYWNrdHJhY2s9ITEsdGhpcy5faW5wdXQ9dGhpcy5faW5wdXQuc2xpY2UodFswXS5sZW5ndGgpLHRoaXMubWF0Y2hlZCs9dFswXSxuPXRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHRoaXMsdGhpcy55eSx0aGlzLGUsdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSksdGhpcy5kb25lJiZ0aGlzLl9pbnB1dCYmKHRoaXMuZG9uZT0hMSksbilyZXR1cm4gbjtpZih0aGlzLl9iYWNrdHJhY2spe2Zvcih2YXIgYSBpbiBpKXRoaXNbYV09aVthXTtyZXR1cm4hMX1yZXR1cm4hMX0sbmV4dDpmdW5jdGlvbigpe2lmKHRoaXMuZG9uZSlyZXR1cm4gdGhpcy5FT0Y7dmFyIHQsZSxuLHI7dGhpcy5faW5wdXR8fCh0aGlzLmRvbmU9ITApLHRoaXMuX21vcmV8fCh0aGlzLnl5dGV4dD0iIix0aGlzLm1hdGNoPSIiKTtmb3IodmFyIGk9dGhpcy5fY3VycmVudFJ1bGVzKCksYT0wO2E8aS5sZW5ndGg7YSsrKWlmKChuPXRoaXMuX2lucHV0Lm1hdGNoKHRoaXMucnVsZXNbaVthXV0pKSYmKCFlfHxuWzBdLmxlbmd0aD5lWzBdLmxlbmd0aCkpe2lmKGU9bixyPWEsdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcil7aWYoITEhPT0odD10aGlzLnRlc3RfbWF0Y2gobixpW2FdKSkpcmV0dXJuIHQ7aWYodGhpcy5fYmFja3RyYWNrKXtlPSExO2NvbnRpbnVlfXJldHVybiExfWlmKCF0aGlzLm9wdGlvbnMuZmxleClicmVha31yZXR1cm4gZT8hMSE9PSh0PXRoaXMudGVzdF9tYXRjaChlLGlbcl0pKSYmdDoiIj09PXRoaXMuX2lucHV0P3RoaXMuRU9GOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iK3RoaXMuc2hvd1Bvc2l0aW9uKCkse3RleHQ6IiIsdG9rZW46bnVsbCxsaW5lOnRoaXMueXlsaW5lbm99KX0sbGV4OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0KCk7cmV0dXJuIHR8fHRoaXMubGV4KCl9LGJlZ2luOmZ1bmN0aW9uKHQpe3RoaXMuY29uZGl0aW9uU3RhY2sucHVzaCh0KX0scG9wU3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMT4wP3RoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk6dGhpcy5jb25kaXRpb25TdGFja1swXX0sX2N1cnJlbnRSdWxlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCYmdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXT90aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM6dGhpcy5jb25kaXRpb25zLklOSVRJQUwucnVsZXN9LHRvcFN0YXRlOmZ1bmN0aW9uKHQpe3JldHVybih0PXRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTEtTWF0aC5hYnModHx8MCkpPj0wP3RoaXMuY29uZGl0aW9uU3RhY2tbdF06IklOSVRJQUwifSxwdXNoU3RhdGU6ZnVuY3Rpb24odCl7dGhpcy5iZWdpbih0KX0sc3RhdGVTdGFja1NpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGh9LG9wdGlvbnM6eyJjYXNlLWluc2Vuc2l0aXZlIjohMH0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyKXtzd2l0Y2gobil7Y2FzZSAwOnJldHVybiA0O2Nhc2UgMTpyZXR1cm4gOTtjYXNlIDI6cmV0dXJuInNwYWNlIjtjYXNlIDM6cmV0dXJuIDEwO2Nhc2UgNDpyZXR1cm4gNjtjYXNlIDU6cmV0dXJuIlRYVCJ9fSxydWxlczpbL14oPzppbmZvXGIpL2ksL14oPzpbXHNcblxyXSspL2ksL14oPzpbXHNdKykvaSwvXig/OnNob3dJbmZvXGIpL2ksL14oPzokKS9pLC9eKD86LikvaV0sY29uZGl0aW9uczp7SU5JVElBTDp7cnVsZXM6WzAsMSwyLDMsNCw1XSxpbmNsdXNpdmU6ITB9fX07ZnVuY3Rpb24gaSgpe3RoaXMueXk9e319cmV0dXJuIG4ubGV4ZXI9cixpLnByb3RvdHlwZT1uLG4uUGFyc2VyPWksbmV3IGl9KCk7ZS5wYXJzZXI9aSxlLlBhcnNlcj1pLlBhcnNlcixlLnBhcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2UuYXBwbHkoaSxhcmd1bWVudHMpfSxlLm1haW49ZnVuY3Rpb24ocil7clsxXXx8KGNvbnNvbGUubG9nKCJVc2FnZTogIityWzBdKyIgRklMRSIpLHQuZXhpdCgxKSk7dmFyIGk9bigxNykucmVhZEZpbGVTeW5jKG4oMTgpLm5vcm1hbGl6ZShyWzFdKSwidXRmOCIpO3JldHVybiBlLnBhcnNlci5wYXJzZShpKX0sbi5jW24uc109PT1yJiZlLm1haW4odC5hcmd2LnNsaWNlKDEpKX0pLmNhbGwodGhpcyxuKDEyKSxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0LHIpe3ZhciBpPWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24odCxlLG4scil7Zm9yKG49bnx8e30scj10Lmxlbmd0aDtyLS07blt0W3JdXT1lKTtyZXR1cm4gbn0sZT1bMSw0XSxuPVsxLDVdLHI9WzEsNl0saT1bMSw3XSxhPVsxLDldLG89WzEsMTEsMTMsMjAsMjEsMjIsMjNdLHM9WzIsNV0sYz1bMSw2LDExLDEzLDIwLDIxLDIyLDIzXSx1PVsyMCwyMSwyMl0sbD1bMiw4XSxoPVsxLDE4XSxmPVsxLDE5XSxkPVsxLDI0XSxwPVs2LDIwLDIxLDIyLDIzXSx5PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6Myxlb2w6NCxkaXJlY3RpdmU6NSxQSUU6Nixkb2N1bWVudDo3LHNob3dEYXRhOjgsbGluZTo5LHN0YXRlbWVudDoxMCx0eHQ6MTEsdmFsdWU6MTIsdGl0bGU6MTMsdGl0bGVfdmFsdWU6MTQsb3BlbkRpcmVjdGl2ZToxNSx0eXBlRGlyZWN0aXZlOjE2LGNsb3NlRGlyZWN0aXZlOjE3LCI6IjoxOCxhcmdEaXJlY3RpdmU6MTksTkVXTElORToyMCwiOyI6MjEsRU9GOjIyLG9wZW5fZGlyZWN0aXZlOjIzLHR5cGVfZGlyZWN0aXZlOjI0LGFyZ19kaXJlY3RpdmU6MjUsY2xvc2VfZGlyZWN0aXZlOjI2LCRhY2NlcHQ6MCwkZW5kOjF9LHRlcm1pbmFsc186ezI6ImVycm9yIiw2OiJQSUUiLDg6InNob3dEYXRhIiwxMToidHh0IiwxMjoidmFsdWUiLDEzOiJ0aXRsZSIsMTQ6InRpdGxlX3ZhbHVlIiwxODoiOiIsMjA6Ik5FV0xJTkUiLDIxOiI7IiwyMjoiRU9GIiwyMzoib3Blbl9kaXJlY3RpdmUiLDI0OiJ0eXBlX2RpcmVjdGl2ZSIsMjU6ImFyZ19kaXJlY3RpdmUiLDI2OiJjbG9zZV9kaXJlY3RpdmUifSxwcm9kdWN0aW9uc186WzAsWzMsMl0sWzMsMl0sWzMsMl0sWzMsM10sWzcsMF0sWzcsMl0sWzksMl0sWzEwLDBdLFsxMCwyXSxbMTAsMl0sWzEwLDFdLFs1LDNdLFs1LDVdLFs0LDFdLFs0LDFdLFs0LDFdLFsxNSwxXSxbMTYsMV0sWzE5LDFdLFsxNywxXV0scGVyZm9ybUFjdGlvbjpmdW5jdGlvbih0LGUsbixyLGksYSxvKXt2YXIgcz1hLmxlbmd0aC0xO3N3aXRjaChpKXtjYXNlIDQ6ci5zZXRTaG93RGF0YSghMCk7YnJlYWs7Y2FzZSA3OnRoaXMuJD1hW3MtMV07YnJlYWs7Y2FzZSA5OnIuYWRkU2VjdGlvbihhW3MtMV0sci5jbGVhbnVwVmFsdWUoYVtzXSkpO2JyZWFrO2Nhc2UgMTA6dGhpcy4kPWFbc10udHJpbSgpLHIuc2V0VGl0bGUodGhpcy4kKTticmVhaztjYXNlIDE3OnIucGFyc2VEaXJlY3RpdmUoIiUleyIsIm9wZW5fZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxODpyLnBhcnNlRGlyZWN0aXZlKGFbc10sInR5cGVfZGlyZWN0aXZlIik7YnJlYWs7Y2FzZSAxOTphW3NdPWFbc10udHJpbSgpLnJlcGxhY2UoLycvZywnIicpLHIucGFyc2VEaXJlY3RpdmUoYVtzXSwiYXJnX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMjA6ci5wYXJzZURpcmVjdGl2ZSgifSUlIiwiY2xvc2VfZGlyZWN0aXZlIiwicGllIil9fSx0YWJsZTpbezM6MSw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHsxOlszXX0sezM6MTAsNDoyLDU6Myw2OmUsMTU6OCwyMDpuLDIxOnIsMjI6aSwyMzphfSx7MzoxMSw0OjIsNTozLDY6ZSwxNTo4LDIwOm4sMjE6ciwyMjppLDIzOmF9LHQobyxzLHs3OjEyLDg6WzEsMTNdfSksdChjLFsyLDE0XSksdChjLFsyLDE1XSksdChjLFsyLDE2XSksezE2OjE0LDI0OlsxLDE1XX0sezI0OlsyLDE3XX0sezE6WzIsMV19LHsxOlsyLDJdfSx0KHUsbCx7MTU6OCw5OjE2LDEwOjE3LDU6MjAsMTpbMiwzXSwxMTpoLDEzOmYsMjM6YX0pLHQobyxzLHs3OjIxfSksezE3OjIyLDE4OlsxLDIzXSwyNjpkfSx0KFsxOCwyNl0sWzIsMThdKSx0KG8sWzIsNl0pLHs0OjI1LDIwOm4sMjE6ciwyMjppfSx7MTI6WzEsMjZdfSx7MTQ6WzEsMjddfSx0KHUsWzIsMTFdKSx0KHUsbCx7MTU6OCw5OjE2LDEwOjE3LDU6MjAsMTpbMiw0XSwxMTpoLDEzOmYsMjM6YX0pLHQocCxbMiwxMl0pLHsxOToyOCwyNTpbMSwyOV19LHQocCxbMiwyMF0pLHQobyxbMiw3XSksdCh1LFsyLDldKSx0KHUsWzIsMTBdKSx7MTc6MzAsMjY6ZH0sezI2OlsyLDE5XX0sdChwLFsyLDEzXSldLGRlZmF1bHRBY3Rpb25zOns5OlsyLDE3XSwxMDpbMiwxXSwxMTpbMiwyXSwyOTpbMiwxOV19LHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighZS5yZWNvdmVyYWJsZSl7dmFyIG49bmV3IEVycm9yKHQpO3Rocm93IG4uaGFzaD1lLG59dGhpcy50cmFjZSh0KX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPVswXSxyPVtdLGk9W251bGxdLGE9W10sbz10aGlzLnRhYmxlLHM9IiIsYz0wLHU9MCxsPTAsaD0yLGY9MSxkPWEuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscD1PYmplY3QuY3JlYXRlKHRoaXMubGV4ZXIpLHk9e3l5Ont9fTtmb3IodmFyIGcgaW4gdGhpcy55eSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy55eSxnKSYmKHkueXlbZ109dGhpcy55eVtnXSk7cC5zZXRJbnB1dCh0LHkueXkpLHkueXkubGV4ZXI9cCx5Lnl5LnBhcnNlcj10aGlzLHZvaWQgMD09PXAueXlsbG9jJiYocC55eWxsb2M9e30pO3ZhciBtPXAueXlsbG9jO2EucHVzaChtKTt2YXIgdj1wLm9wdGlvbnMmJnAub3B0aW9ucy5yYW5nZXM7ZnVuY3Rpb24gYigpe3ZhciB0O3JldHVybiJudW1iZXIiIT10eXBlb2YodD1yLnBvcCgpfHxwLmxleCgpfHxmKSYmKHQgaW5zdGFuY2VvZiBBcnJheSYmKHQ9KHI9dCkucG9wKCkpLHQ9ZS5zeW1ib2xzX1t0XXx8dCksdH0iZnVuY3Rpb24iPT10eXBlb2YgeS55eS5wYXJzZUVycm9yP3RoaXMucGFyc2VFcnJvcj15Lnl5LnBhcnNlRXJyb3I6dGhpcy5wYXJzZUVycm9yPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5wYXJzZUVycm9yO2Zvcih2YXIgeCxfLGssdyxULEUsQyxTLEEsTT17fTs7KXtpZihrPW5bbi5sZW5ndGgtMV0sdGhpcy5kZWZhdWx0QWN0aW9uc1trXT93PXRoaXMuZGVmYXVsdEFjdGlvbnNba106KG51bGw9PXgmJih4PWIoKSksdz1vW2tdJiZvW2tdW3hdKSx2b2lkIDA9PT13fHwhdy5sZW5ndGh8fCF3WzBdKXt2YXIgTz0iIjtmb3IoRSBpbiBBPVtdLG9ba10pdGhpcy50ZXJtaW5hbHNfW0VdJiZFPmgmJkEucHVzaCgiJyIrdGhpcy50ZXJtaW5hbHNfW0VdKyInIik7Tz1wLnNob3dQb3NpdGlvbj8iUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6XG4iK3Auc2hvd1Bvc2l0aW9uKCkrIlxuRXhwZWN0aW5nICIrQS5qb2luKCIsICIpKyIsIGdvdCAnIisodGhpcy50ZXJtaW5hbHNfW3hdfHx4KSsiJyI6IlBhcnNlIGVycm9yIG9uIGxpbmUgIisoYysxKSsiOiBVbmV4cGVjdGVkICIrKHg9PWY/ImVuZCBvZiBpbnB1dCI6IiciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIiksdGhpcy5wYXJzZUVycm9yKE8se3RleHQ6cC5tYXRjaCx0b2tlbjp0aGlzLnRlcm1pbmFsc19beF18fHgsbGluZTpwLnl5bGluZW5vLGxvYzptLGV4cGVjdGVkOkF9KX1pZih3WzBdaW5zdGFuY2VvZiBBcnJheSYmdy5sZW5ndGg+MSl0aHJvdyBuZXcgRXJyb3IoIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAiK2srIiwgdG9rZW46ICIreCk7c3dpdGNoKHdbMF0pe2Nhc2UgMTpuLnB1c2goeCksaS5wdXNoKHAueXl0ZXh0KSxhLnB1c2gocC55eWxsb2MpLG4ucHVzaCh3WzFdKSx4PW51bGwsXz8oeD1fLF89bnVsbCk6KHU9cC55eWxlbmcscz1wLnl5dGV4dCxjPXAueXlsaW5lbm8sbT1wLnl5bGxvYyxsPjAmJmwtLSk7YnJlYWs7Y2FzZSAyOmlmKEM9dGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMV0sTS4kPWlbaS5sZW5ndGgtQ10sTS5fJD17Zmlyc3RfbGluZTphW2EubGVuZ3RoLShDfHwxKV0uZmlyc3RfbGluZSxsYXN0X2xpbmU6YVthLmxlbmd0aC0xXS5sYXN0X2xpbmUsZmlyc3RfY29sdW1uOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46YVthLmxlbmd0aC0xXS5sYXN0X2NvbHVtbn0sdiYmKE0uXyQucmFuZ2U9W2FbYS5sZW5ndGgtKEN8fDEpXS5yYW5nZVswXSxhW2EubGVuZ3RoLTFdLnJhbmdlWzFdXSksdm9pZCAwIT09KFQ9dGhpcy5wZXJmb3JtQWN0aW9uLmFwcGx5KE0sW3MsdSxjLHkueXksd1sxXSxpLGFdLmNvbmNhdChkKSkpKXJldHVybiBUO0MmJihuPW4uc2xpY2UoMCwtMSpDKjIpLGk9aS5zbGljZSgwLC0xKkMpLGE9YS5zbGljZSgwLC0xKkMpKSxuLnB1c2godGhpcy5wcm9kdWN0aW9uc19bd1sxXV1bMF0pLGkucHVzaChNLiQpLGEucHVzaChNLl8kKSxTPW9bbltuLmxlbmd0aC0yXV1bbltuLmxlbmd0aC0xXV0sbi5wdXNoKFMpO2JyZWFrO2Nhc2UgMzpyZXR1cm4hMH19cmV0dXJuITB9fSxnPXtFT0Y6MSxwYXJzZUVycm9yOmZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMueXkucGFyc2VyKXRocm93IG5ldyBFcnJvcih0KTt0aGlzLnl5LnBhcnNlci5wYXJzZUVycm9yKHQsZSl9LHNldElucHV0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMueXk9ZXx8dGhpcy55eXx8e30sdGhpcy5faW5wdXQ9dCx0aGlzLl9tb3JlPXRoaXMuX2JhY2t0cmFjaz10aGlzLmRvbmU9ITEsdGhpcy55eWxpbmVubz10aGlzLnl5bGVuZz0wLHRoaXMueXl0ZXh0PXRoaXMubWF0Y2hlZD10aGlzLm1hdGNoPSIiLHRoaXMuY29uZGl0aW9uU3RhY2s9WyJJTklUSUFMIl0sdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9WzAsMF0pLHRoaXMub2Zmc2V0PTAsdGhpc30saW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9pbnB1dFswXTtyZXR1cm4gdGhpcy55eXRleHQrPXQsdGhpcy55eWxlbmcrKyx0aGlzLm9mZnNldCsrLHRoaXMubWF0Y2grPXQsdGhpcy5tYXRjaGVkKz10LHQubWF0Y2goLyg/OlxyXG4/fFxuKS4qL2cpPyh0aGlzLnl5bGluZW5vKyssdGhpcy55eWxsb2MubGFzdF9saW5lKyspOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uKyssdGhpcy5vcHRpb25zLnJhbmdlcyYmdGhpcy55eWxsb2MucmFuZ2VbMV0rKyx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSgxKSx0fSx1bnB1dDpmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aCxuPXQuc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLl9pbnB1dD10K3RoaXMuX2lucHV0LHRoaXMueXl0ZXh0PXRoaXMueXl0ZXh0LnN1YnN0cigwLHRoaXMueXl0ZXh0Lmxlbmd0aC1lKSx0aGlzLm9mZnNldC09ZTt2YXIgcj10aGlzLm1hdGNoLnNwbGl0KC8oPzpcclxuP3xcbikvZyk7dGhpcy5tYXRjaD10aGlzLm1hdGNoLnN1YnN0cigwLHRoaXMubWF0Y2gubGVuZ3RoLTEpLHRoaXMubWF0Y2hlZD10aGlzLm1hdGNoZWQuc3Vic3RyKDAsdGhpcy5tYXRjaGVkLmxlbmd0aC0xKSxuLmxlbmd0aC0xJiYodGhpcy55eWxpbmVuby09bi5sZW5ndGgtMSk7dmFyIGk9dGhpcy55eWxsb2MucmFuZ2U7cmV0dXJuIHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMueXlsaW5lbm8rMSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOm4/KG4ubGVuZ3RoPT09ci5sZW5ndGg/dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uOjApK3Jbci5sZW5ndGgtbi5sZW5ndGhdLmxlbmd0aC1uWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4tZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVtpWzBdLGlbMF0rdGhpcy55eWxlbmctZV0pLHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzfSxtb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vcmU9ITAsdGhpc30scmVqZWN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXI/KHRoaXMuX2JhY2t0cmFjaz0hMCx0aGlzKTp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFlvdSBjYW4gb25seSBpbnZva2UgcmVqZWN0KCkgaW4gdGhlIGxleGVyIHdoZW4gdGhlIGxleGVyIGlzIG9mIHRoZSBiYWNrdHJhY2tpbmcgcGVyc3Vhc2lvbiAob3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIgPSB0cnVlKS5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXNzOmZ1bmN0aW9uKHQpe3RoaXMudW5wdXQodGhpcy5tYXRjaC5zbGljZSh0KSl9LHBhc3RJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLXRoaXMubWF0Y2gubGVuZ3RoKTtyZXR1cm4odC5sZW5ndGg+MjA/Ii4uLiI6IiIpK3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywiIil9LHVwY29taW5nSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1hdGNoO3JldHVybiB0Lmxlbmd0aDwyMCYmKHQrPXRoaXMuX2lucHV0LnN1YnN0cigwLDIwLXQubGVuZ3RoKSksKHQuc3Vic3RyKDAsMjApKyh0Lmxlbmd0aD4yMD8iLi4uIjoiIikpLnJlcGxhY2UoL1xuL2csIiIpfSxzaG93UG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhc3RJbnB1dCgpLGU9bmV3IEFycmF5KHQubGVuZ3RoKzEpLmpvaW4oIi0iKTtyZXR1cm4gdCt0aGlzLnVwY29taW5nSW5wdXQoKSsiXG4iK2UrIl4ifSx0ZXN0X21hdGNoOmZ1bmN0aW9uKHQsZSl7dmFyIG4scixpO2lmKHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXImJihpPXt5eWxpbmVubzp0aGlzLnl5bGluZW5vLHl5bGxvYzp7Zmlyc3RfbGluZTp0aGlzLnl5bGxvYy5maXJzdF9saW5lLGxhc3RfbGluZTp0aGlzLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46dGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLGxhc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1ufSx5eXRleHQ6dGhpcy55eXRleHQsbWF0Y2g6dGhpcy5tYXRjaCxtYXRjaGVzOnRoaXMubWF0Y2hlcyxtYXRjaGVkOnRoaXMubWF0Y2hlZCx5eWxlbmc6dGhpcy55eWxlbmcsb2Zmc2V0OnRoaXMub2Zmc2V0LF9tb3JlOnRoaXMuX21vcmUsX2lucHV0OnRoaXMuX2lucHV0LHl5OnRoaXMueXksY29uZGl0aW9uU3RhY2s6dGhpcy5jb25kaXRpb25TdGFjay5zbGljZSgwKSxkb25lOnRoaXMuZG9uZX0sdGhpcy5vcHRpb25zLnJhbmdlcyYmKGkueXlsbG9jLnJhbmdlPXRoaXMueXlsbG9jLnJhbmdlLnNsaWNlKDApKSksKHI9dFswXS5tYXRjaCgvKD86XHJcbj98XG4pLiovZykpJiYodGhpcy55eWxpbmVubys9ci5sZW5ndGgpLHRoaXMueXlsbG9jPXtmaXJzdF9saW5lOnRoaXMueXlsbG9jLmxhc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbixsYXN0X2NvbHVtbjpyP3Jbci5sZW5ndGgtMV0ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubWF0Y2goL1xyP1xuPy8pWzBdLmxlbmd0aDp0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbit0WzBdLmxlbmd0aH0sdGhpcy55eXRleHQrPXRbMF0sdGhpcy5tYXRjaCs9dFswXSx0aGlzLm1hdGNoZXM9dCx0aGlzLnl5bGVuZz10aGlzLnl5dGV4dC5sZW5ndGgsdGhpcy5vcHRpb25zLnJhbmdlcyYmKHRoaXMueXlsbG9jLnJhbmdlPVt0aGlzLm9mZnNldCx0aGlzLm9mZnNldCs9dGhpcy55eWxlbmddKSx0aGlzLl9tb3JlPSExLHRoaXMuX2JhY2t0cmFjaz0hMSx0aGlzLl9pbnB1dD10aGlzLl9pbnB1dC5zbGljZSh0WzBdLmxlbmd0aCksdGhpcy5tYXRjaGVkKz10WzBdLG49dGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcyx0aGlzLnl5LHRoaXMsZSx0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdKSx0aGlzLmRvbmUmJnRoaXMuX2lucHV0JiYodGhpcy5kb25lPSExKSxuKXJldHVybiBuO2lmKHRoaXMuX2JhY2t0cmFjayl7Zm9yKHZhciBhIGluIGkpdGhpc1thXT1pW2FdO3JldHVybiExfXJldHVybiExfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5kb25lKXJldHVybiB0aGlzLkVPRjt2YXIgdCxlLG4scjt0aGlzLl9pbnB1dHx8KHRoaXMuZG9uZT0hMCksdGhpcy5fbW9yZXx8KHRoaXMueXl0ZXh0PSIiLHRoaXMubWF0Y2g9IiIpO2Zvcih2YXIgaT10aGlzLl9jdXJyZW50UnVsZXMoKSxhPTA7YTxpLmxlbmd0aDthKyspaWYoKG49dGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tpW2FdXSkpJiYoIWV8fG5bMF0ubGVuZ3RoPmVbMF0ubGVuZ3RoKSl7aWYoZT1uLHI9YSx0aGlzLm9wdGlvbnMuYmFja3RyYWNrX2xleGVyKXtpZighMSE9PSh0PXRoaXMudGVzdF9tYXRjaChuLGlbYV0pKSlyZXR1cm4gdDtpZih0aGlzLl9iYWNrdHJhY2spe2U9ITE7Y29udGludWV9cmV0dXJuITF9aWYoIXRoaXMub3B0aW9ucy5mbGV4KWJyZWFrfXJldHVybiBlPyExIT09KHQ9dGhpcy50ZXN0X21hdGNoKGUsaVtyXSkpJiZ0OiIiPT09dGhpcy5faW5wdXQ/dGhpcy5FT0Y6dGhpcy5wYXJzZUVycm9yKCJMZXhpY2FsIGVycm9yIG9uIGxpbmUgIisodGhpcy55eWxpbmVubysxKSsiLiBVbnJlY29nbml6ZWQgdGV4dC5cbiIrdGhpcy5zaG93UG9zaXRpb24oKSx7dGV4dDoiIix0b2tlbjpudWxsLGxpbmU6dGhpcy55eWxpbmVub30pfSxsZXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm5leHQoKTtyZXR1cm4gdHx8dGhpcy5sZXgoKX0sYmVnaW46ZnVuY3Rpb24odCl7dGhpcy5jb25kaXRpb25TdGFjay5wdXNoKHQpfSxwb3BTdGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xPjA/dGhpcy5jb25kaXRpb25TdGFjay5wb3AoKTp0aGlzLmNvbmRpdGlvblN0YWNrWzBdfSxfY3VycmVudFJ1bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoJiZ0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdP3RoaXMuY29uZGl0aW9uc1t0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTFdXS5ydWxlczp0aGlzLmNvbmRpdGlvbnMuSU5JVElBTC5ydWxlc30sdG9wU3RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9dGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMS1NYXRoLmFicyh0fHwwKSk+PTA/dGhpcy5jb25kaXRpb25TdGFja1t0XToiSU5JVElBTCJ9LHB1c2hTdGF0ZTpmdW5jdGlvbih0KXt0aGlzLmJlZ2luKHQpfSxzdGF0ZVN0YWNrU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aH0sb3B0aW9uczp7ImNhc2UtaW5zZW5zaXRpdmUiOiEwfSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIpe3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHRoaXMuYmVnaW4oIm9wZW5fZGlyZWN0aXZlIiksMjM7Y2FzZSAxOnJldHVybiB0aGlzLmJlZ2luKCJ0eXBlX2RpcmVjdGl2ZSIpLDI0O2Nhc2UgMjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMuYmVnaW4oImFyZ19kaXJlY3RpdmUiKSwxODtjYXNlIDM6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSx0aGlzLnBvcFN0YXRlKCksMjY7Y2FzZSA0OnJldHVybiAyNTtjYXNlIDU6Y2FzZSA2OmJyZWFrO2Nhc2UgNzpyZXR1cm4gMjA7Y2FzZSA4OmNhc2UgOTpicmVhaztjYXNlIDEwOnJldHVybiB0aGlzLmJlZ2luKCJ0aXRsZSIpLDEzO2Nhc2UgMTE6cmV0dXJuIHRoaXMucG9wU3RhdGUoKSwidGl0bGVfdmFsdWUiO2Nhc2UgMTI6dGhpcy5iZWdpbigic3RyaW5nIik7YnJlYWs7Y2FzZSAxMzp0aGlzLnBvcFN0YXRlKCk7YnJlYWs7Y2FzZSAxNDpyZXR1cm4idHh0IjtjYXNlIDE1OnJldHVybiA2O2Nhc2UgMTY6cmV0dXJuIDg7Y2FzZSAxNzpyZXR1cm4idmFsdWUiO2Nhc2UgMTg6cmV0dXJuIDIyfX0scnVsZXM6Wy9eKD86JSVceykvaSwvXig/OigoPzooPyFcfSUlKVteOi5dKSopKS9pLC9eKD86OikvaSwvXig/Olx9JSUpL2ksL14oPzooKD86KD8hXH0lJSkufFxuKSopKS9pLC9eKD86JSUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXHJdKykvaSwvXig/OiUlW15cbl0qKS9pLC9eKD86W1xzXSspL2ksL14oPzp0aXRsZVxiKS9pLC9eKD86KD8hXG58fCkqW15cbl0qKS9pLC9eKD86WyJdKS9pLC9eKD86WyJdKS9pLC9eKD86W14iXSopL2ksL14oPzpwaWVcYikvaSwvXig/OnNob3dEYXRhXGIpL2ksL14oPzo6W1xzXSpbXGRdKyg/OlwuW1xkXSspPykvaSwvXig/OiQpL2ldLGNvbmRpdGlvbnM6e2Nsb3NlX2RpcmVjdGl2ZTp7cnVsZXM6W10saW5jbHVzaXZlOiExfSxhcmdfZGlyZWN0aXZlOntydWxlczpbMyw0XSxpbmNsdXNpdmU6ITF9LHR5cGVfZGlyZWN0aXZlOntydWxlczpbMiwzXSxpbmNsdXNpdmU6ITF9LG9wZW5fZGlyZWN0aXZlOntydWxlczpbMV0saW5jbHVzaXZlOiExfSx0aXRsZTp7cnVsZXM6WzExXSxpbmNsdXNpdmU6ITF9LHN0cmluZzp7cnVsZXM6WzEzLDE0XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMiwxNSwxNiwxNywxOF0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIG0oKXt0aGlzLnl5PXt9fXJldHVybiB5LmxleGVyPWcsbS5wcm90b3R5cGU9eSx5LlBhcnNlcj1tLG5ldyBtfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsoZnVuY3Rpb24odCxyKXt2YXIgaT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKHQsZSxuLHIpe2ZvcihuPW58fHt9LHI9dC5sZW5ndGg7ci0tO25bdFtyXV09ZSk7cmV0dXJuIG59LGU9WzEsMl0sbj1bMSw1XSxyPVs2LDksMTEsMjMsMzddLGk9WzEsMTddLGE9WzEsMjBdLG89WzEsMjVdLHM9WzEsMjZdLGM9WzEsMjddLHU9WzEsMjhdLGw9WzEsMzddLGg9WzIzLDM0LDM1XSxmPVs0LDYsOSwxMSwyMywzN10sZD1bMzAsMzEsMzIsMzNdLHA9WzIyLDI3XSx5PXt0cmFjZTpmdW5jdGlvbigpe30seXk6e30sc3ltYm9sc186e2Vycm9yOjIsc3RhcnQ6MyxFUl9ESUFHUkFNOjQsZG9jdW1lbnQ6NSxFT0Y6NixkaXJlY3RpdmU6NyxsaW5lOjgsU1BBQ0U6OSxzdGF0ZW1lbnQ6MTAsTkVXTElORToxMSxvcGVuRGlyZWN0aXZlOjEyLHR5cGVEaXJlY3RpdmU6MTMsY2xvc2VEaXJlY3RpdmU6MTQsIjoiOjE1LGFyZ0RpcmVjdGl2ZToxNixlbnRpdHlOYW1lOjE3LHJlbFNwZWM6MTgscm9sZToxOSxCTE9DS19TVEFSVDoyMCxhdHRyaWJ1dGVzOjIxLEJMT0NLX1NUT1A6MjIsQUxQSEFOVU06MjMsYXR0cmlidXRlOjI0LGF0dHJpYnV0ZVR5cGU6MjUsYXR0cmlidXRlTmFtZToyNixBVFRSSUJVVEVfV09SRDoyNyxjYXJkaW5hbGl0eToyOCxyZWxUeXBlOjI5LFpFUk9fT1JfT05FOjMwLFpFUk9fT1JfTU9SRTozMSxPTkVfT1JfTU9SRTozMixPTkxZX09ORTozMyxOT05fSURFTlRJRllJTkc6MzQsSURFTlRJRllJTkc6MzUsV09SRDozNixvcGVuX2RpcmVjdGl2ZTozNyx0eXBlX2RpcmVjdGl2ZTozOCxhcmdfZGlyZWN0aXZlOjM5LGNsb3NlX2RpcmVjdGl2ZTo0MCwkYWNjZXB0OjAsJGVuZDoxfSx0ZXJtaW5hbHNfOnsyOiJlcnJvciIsNDoiRVJfRElBR1JBTSIsNjoiRU9GIiw5OiJTUEFDRSIsMTE6Ik5FV0xJTkUiLDE1OiI6IiwyMDoiQkxPQ0tfU1RBUlQiLDIyOiJCTE9DS19TVE9QIiwyMzoiQUxQSEFOVU0iLDI3OiJBVFRSSUJVVEVfV09SRCIsMzA6IlpFUk9fT1JfT05FIiwzMToiWkVST19PUl9NT1JFIiwzMjoiT05FX09SX01PUkUiLDMzOiJPTkxZX09ORSIsMzQ6Ik5PTl9JREVOVElGWUlORyIsMzU6IklERU5USUZZSU5HIiwzNjoiV09SRCIsMzc6Im9wZW5fZGlyZWN0aXZlIiwzODoidHlwZV9kaXJlY3RpdmUiLDM5OiJhcmdfZGlyZWN0aXZlIiw0MDoiY2xvc2VfZGlyZWN0aXZlIn0scHJvZHVjdGlvbnNfOlswLFszLDNdLFszLDJdLFs1LDBdLFs1LDJdLFs4LDJdLFs4LDFdLFs4LDFdLFs4LDFdLFs3LDRdLFs3LDZdLFsxMCwxXSxbMTAsNV0sWzEwLDRdLFsxMCwzXSxbMTAsMV0sWzE3LDFdLFsyMSwxXSxbMjEsMl0sWzI0LDJdLFsyNSwxXSxbMjYsMV0sWzE4LDNdLFsyOCwxXSxbMjgsMV0sWzI4LDFdLFsyOCwxXSxbMjksMV0sWzI5LDFdLFsxOSwxXSxbMTksMV0sWzEyLDFdLFsxMywxXSxbMTYsMV0sWzE0LDFdXSxwZXJmb3JtQWN0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSxhLG8pe3ZhciBzPWEubGVuZ3RoLTE7c3dpdGNoKGkpe2Nhc2UgMTpicmVhaztjYXNlIDM6dGhpcy4kPVtdO2JyZWFrO2Nhc2UgNDphW3MtMV0ucHVzaChhW3NdKSx0aGlzLiQ9YVtzLTFdO2JyZWFrO2Nhc2UgNTpjYXNlIDY6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSA3OmNhc2UgODp0aGlzLiQ9W107YnJlYWs7Y2FzZSAxMjpyLmFkZEVudGl0eShhW3MtNF0pLHIuYWRkRW50aXR5KGFbcy0yXSksci5hZGRSZWxhdGlvbnNoaXAoYVtzLTRdLGFbc10sYVtzLTJdLGFbcy0zXSk7YnJlYWs7Y2FzZSAxMzpyLmFkZEVudGl0eShhW3MtM10pLHIuYWRkQXR0cmlidXRlcyhhW3MtM10sYVtzLTFdKTticmVhaztjYXNlIDE0OnIuYWRkRW50aXR5KGFbcy0yXSk7YnJlYWs7Y2FzZSAxNTpyLmFkZEVudGl0eShhW3NdKTticmVhaztjYXNlIDE2OnRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTc6dGhpcy4kPVthW3NdXTticmVhaztjYXNlIDE4OmFbc10ucHVzaChhW3MtMV0pLHRoaXMuJD1hW3NdO2JyZWFrO2Nhc2UgMTk6dGhpcy4kPXthdHRyaWJ1dGVUeXBlOmFbcy0xXSxhdHRyaWJ1dGVOYW1lOmFbc119O2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp0aGlzLiQ9YVtzXTticmVhaztjYXNlIDIyOnRoaXMuJD17Y2FyZEE6YVtzXSxyZWxUeXBlOmFbcy0xXSxjYXJkQjphW3MtMl19O2JyZWFrO2Nhc2UgMjM6dGhpcy4kPXIuQ2FyZGluYWxpdHkuWkVST19PUl9PTkU7YnJlYWs7Y2FzZSAyNDp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU7YnJlYWs7Y2FzZSAyNTp0aGlzLiQ9ci5DYXJkaW5hbGl0eS5PTkVfT1JfTU9SRTticmVhaztjYXNlIDI2OnRoaXMuJD1yLkNhcmRpbmFsaXR5Lk9OTFlfT05FO2JyZWFrO2Nhc2UgMjc6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HO2JyZWFrO2Nhc2UgMjg6dGhpcy4kPXIuSWRlbnRpZmljYXRpb24uSURFTlRJRllJTkc7YnJlYWs7Y2FzZSAyOTp0aGlzLiQ9YVtzXS5yZXBsYWNlKC8iL2csIiIpO2JyZWFrO2Nhc2UgMzA6dGhpcy4kPWFbc107YnJlYWs7Y2FzZSAzMTpyLnBhcnNlRGlyZWN0aXZlKCIlJXsiLCJvcGVuX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzI6ci5wYXJzZURpcmVjdGl2ZShhW3NdLCJ0eXBlX2RpcmVjdGl2ZSIpO2JyZWFrO2Nhc2UgMzM6YVtzXT1hW3NdLnRyaW0oKS5yZXBsYWNlKC8nL2csJyInKSxyLnBhcnNlRGlyZWN0aXZlKGFbc10sImFyZ19kaXJlY3RpdmUiKTticmVhaztjYXNlIDM0OnIucGFyc2VEaXJlY3RpdmUoIn0lJSIsImNsb3NlX2RpcmVjdGl2ZSIsImVyIil9fSx0YWJsZTpbezM6MSw0OmUsNzozLDEyOjQsMzc6bn0sezE6WzNdfSx0KHIsWzIsM10sezU6Nn0pLHszOjcsNDplLDc6MywxMjo0LDM3Om59LHsxMzo4LDM4OlsxLDldfSx7Mzg6WzIsMzFdfSx7NjpbMSwxMF0sNzoxNSw4OjExLDk6WzEsMTJdLDEwOjEzLDExOlsxLDE0XSwxMjo0LDE3OjE2LDIzOmksMzc6bn0sezE6WzIsMl19LHsxNDoxOCwxNTpbMSwxOV0sNDA6YX0sdChbMTUsNDBdLFsyLDMyXSksdChyLFsyLDhdLHsxOlsyLDFdfSksdChyLFsyLDRdKSx7NzoxNSwxMDoyMSwxMjo0LDE3OjE2LDIzOmksMzc6bn0sdChyLFsyLDZdKSx0KHIsWzIsN10pLHQocixbMiwxMV0pLHQocixbMiwxNV0sezE4OjIyLDI4OjI0LDIwOlsxLDIzXSwzMDpvLDMxOnMsMzI6YywzMzp1fSksdChbNiw5LDExLDE1LDIwLDIzLDMwLDMxLDMyLDMzLDM3XSxbMiwxNl0pLHsxMTpbMSwyOV19LHsxNjozMCwzOTpbMSwzMV19LHsxMTpbMiwzNF19LHQocixbMiw1XSksezE3OjMyLDIzOml9LHsyMTozMywyMjpbMSwzNF0sMjQ6MzUsMjU6MzYsMjc6bH0sezI5OjM4LDM0OlsxLDM5XSwzNTpbMSw0MF19LHQoaCxbMiwyM10pLHQoaCxbMiwyNF0pLHQoaCxbMiwyNV0pLHQoaCxbMiwyNl0pLHQoZixbMiw5XSksezE0OjQxLDQwOmF9LHs0MDpbMiwzM119LHsxNTpbMSw0Ml19LHsyMjpbMSw0M119LHQocixbMiwxNF0pLHsyMTo0NCwyMjpbMiwxN10sMjQ6MzUsMjU6MzYsMjc6bH0sezI2OjQ1LDI3OlsxLDQ2XX0sezI3OlsyLDIwXX0sezI4OjQ3LDMwOm8sMzE6cywzMjpjLDMzOnV9LHQoZCxbMiwyN10pLHQoZCxbMiwyOF0pLHsxMTpbMSw0OF19LHsxOTo0OSwyMzpbMSw1MV0sMzY6WzEsNTBdfSx0KHIsWzIsMTNdKSx7MjI6WzIsMThdfSx0KHAsWzIsMTldKSx0KHAsWzIsMjFdKSx7MjM6WzIsMjJdfSx0KGYsWzIsMTBdKSx0KHIsWzIsMTJdKSx0KHIsWzIsMjldKSx0KHIsWzIsMzBdKV0sZGVmYXVsdEFjdGlvbnM6ezU6WzIsMzFdLDc6WzIsMl0sMjA6WzIsMzRdLDMxOlsyLDMzXSwzNzpbMiwyMF0sNDQ6WzIsMThdLDQ3OlsyLDIyXX0scGFyc2VFcnJvcjpmdW5jdGlvbih0LGUpe2lmKCFlLnJlY292ZXJhYmxlKXt2YXIgbj1uZXcgRXJyb3IodCk7dGhyb3cgbi5oYXNoPWUsbn10aGlzLnRyYWNlKHQpfSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLG49WzBdLHI9W10saT1bbnVsbF0sYT1bXSxvPXRoaXMudGFibGUscz0iIixjPTAsdT0wLGw9MCxoPTIsZj0xLGQ9YS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxwPU9iamVjdC5jcmVhdGUodGhpcy5sZXhlcikseT17eXk6e319O2Zvcih2YXIgZyBpbiB0aGlzLnl5KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnl5LGcpJiYoeS55eVtnXT10aGlzLnl5W2ddKTtwLnNldElucHV0KHQseS55eSkseS55eS5sZXhlcj1wLHkueXkucGFyc2VyPXRoaXMsdm9pZCAwPT09cC55eWxsb2MmJihwLnl5bGxvYz17fSk7dmFyIG09cC55eWxsb2M7YS5wdXNoKG0pO3ZhciB2PXAub3B0aW9ucyYmcC5vcHRpb25zLnJhbmdlcztmdW5jdGlvbiBiKCl7dmFyIHQ7cmV0dXJuIm51bWJlciIhPXR5cGVvZih0PXIucG9wKCl8fHAubGV4KCl8fGYpJiYodCBpbnN0YW5jZW9mIEFycmF5JiYodD0ocj10KS5wb3AoKSksdD1lLnN5bWJvbHNfW3RdfHx0KSx0fSJmdW5jdGlvbiI9PXR5cGVvZiB5Lnl5LnBhcnNlRXJyb3I/dGhpcy5wYXJzZUVycm9yPXkueXkucGFyc2VFcnJvcjp0aGlzLnBhcnNlRXJyb3I9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLnBhcnNlRXJyb3I7Zm9yKHZhciB4LF8sayx3LFQsRSxDLFMsQSxNPXt9Ozspe2lmKGs9bltuLmxlbmd0aC0xXSx0aGlzLmRlZmF1bHRBY3Rpb25zW2tdP3c9dGhpcy5kZWZhdWx0QWN0aW9uc1trXToobnVsbD09eCYmKHg9YigpKSx3PW9ba10mJm9ba11beF0pLHZvaWQgMD09PXd8fCF3Lmxlbmd0aHx8IXdbMF0pe3ZhciBPPSIiO2ZvcihFIGluIEE9W10sb1trXSl0aGlzLnRlcm1pbmFsc19bRV0mJkU+aCYmQS5wdXNoKCInIit0aGlzLnRlcm1pbmFsc19bRV0rIiciKTtPPXAuc2hvd1Bvc2l0aW9uPyJQYXJzZSBlcnJvciBvbiBsaW5lICIrKGMrMSkrIjpcbiIrcC5zaG93UG9zaXRpb24oKSsiXG5FeHBlY3RpbmcgIitBLmpvaW4oIiwgIikrIiwgZ290ICciKyh0aGlzLnRlcm1pbmFsc19beF18fHgpKyInIjoiUGFyc2UgZXJyb3Igb24gbGluZSAiKyhjKzEpKyI6IFVuZXhwZWN0ZWQgIisoeD09Zj8iZW5kIG9mIGlucHV0IjoiJyIrKHRoaXMudGVybWluYWxzX1t4XXx8eCkrIiciKSx0aGlzLnBhcnNlRXJyb3IoTyx7dGV4dDpwLm1hdGNoLHRva2VuOnRoaXMudGVybWluYWxzX1t4XXx8eCxsaW5lOnAueXlsaW5lbm8sbG9jOm0sZXhwZWN0ZWQ6QX0pfWlmKHdbMF1pbnN0YW5jZW9mIEFycmF5JiZ3Lmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiUGFyc2UgRXJyb3I6IG11bHRpcGxlIGFjdGlvbnMgcG9zc2libGUgYXQgc3RhdGU6ICIraysiLCB0b2tlbjogIit4KTtzd2l0Y2god1swXSl7Y2FzZSAxOm4ucHVzaCh4KSxpLnB1c2gocC55eXRleHQpLGEucHVzaChwLnl5bGxvYyksbi5wdXNoKHdbMV0pLHg9bnVsbCxfPyh4PV8sXz1udWxsKToodT1wLnl5bGVuZyxzPXAueXl0ZXh0LGM9cC55eWxpbmVubyxtPXAueXlsbG9jLGw+MCYmbC0tKTticmVhaztjYXNlIDI6aWYoQz10aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVsxXSxNLiQ9aVtpLmxlbmd0aC1DXSxNLl8kPXtmaXJzdF9saW5lOmFbYS5sZW5ndGgtKEN8fDEpXS5maXJzdF9saW5lLGxhc3RfbGluZTphW2EubGVuZ3RoLTFdLmxhc3RfbGluZSxmaXJzdF9jb2x1bW46YVthLmxlbmd0aC0oQ3x8MSldLmZpcnN0X2NvbHVtbixsYXN0X2NvbHVtbjphW2EubGVuZ3RoLTFdLmxhc3RfY29sdW1ufSx2JiYoTS5fJC5yYW5nZT1bYVthLmxlbmd0aC0oQ3x8MSldLnJhbmdlWzBdLGFbYS5sZW5ndGgtMV0ucmFuZ2VbMV1dKSx2b2lkIDAhPT0oVD10aGlzLnBlcmZvcm1BY3Rpb24uYXBwbHkoTSxbcyx1LGMseS55eSx3WzFdLGksYV0uY29uY2F0KGQpKSkpcmV0dXJuIFQ7QyYmKG49bi5zbGljZSgwLC0xKkMqMiksaT1pLnNsaWNlKDAsLTEqQyksYT1hLnNsaWNlKDAsLTEqQykpLG4ucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1t3WzFdXVswXSksaS5wdXNoKE0uJCksYS5wdXNoKE0uXyQpLFM9b1tuW24ubGVuZ3RoLTJdXVtuW24ubGVuZ3RoLTFdXSxuLnB1c2goUyk7YnJlYWs7Y2FzZSAzOnJldHVybiEwfX1yZXR1cm4hMH19LGc9e0VPRjoxLHBhcnNlRXJyb3I6ZnVuY3Rpb24odCxlKXtpZighdGhpcy55eS5wYXJzZXIpdGhyb3cgbmV3IEVycm9yKHQpO3RoaXMueXkucGFyc2VyLnBhcnNlRXJyb3IodCxlKX0sc2V0SW5wdXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy55eT1lfHx0aGlzLnl5fHx7fSx0aGlzLl9pbnB1dD10LHRoaXMuX21vcmU9dGhpcy5fYmFja3RyYWNrPXRoaXMuZG9uZT0hMSx0aGlzLnl5bGluZW5vPXRoaXMueXlsZW5nPTAsdGhpcy55eXRleHQ9dGhpcy5tYXRjaGVkPXRoaXMubWF0Y2g9IiIsdGhpcy5jb25kaXRpb25TdGFjaz1bIklOSVRJQUwiXSx0aGlzLnl5bGxvYz17Zmlyc3RfbGluZToxLGZpcnN0X2NvbHVtbjowLGxhc3RfbGluZToxLGxhc3RfY29sdW1uOjB9LHRoaXMub3B0aW9ucy5yYW5nZXMmJih0aGlzLnl5bGxvYy5yYW5nZT1bMCwwXSksdGhpcy5vZmZzZXQ9MCx0aGlzfSxpbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2lucHV0WzBdO3JldHVybiB0aGlzLnl5dGV4dCs9dCx0aGlzLnl5bGVuZysrLHRoaXMub2Zmc2V0KyssdGhpcy5tYXRjaCs9dCx0aGlzLm1hdGNoZWQrPXQsdC5tYXRjaCgvKD86XHJcbj98XG4pLiovZyk/KHRoaXMueXlsaW5lbm8rKyx0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKyk6dGhpcy55eWxsb2MubGFzdF9jb2x1bW4rKyx0aGlzLm9wdGlvbnMucmFuZ2VzJiZ0aGlzLnl5bGxvYy5yYW5nZVsxXSsrLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKDEpLHR9LHVucHV0OmZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLG49dC5zcGxpdCgvKD86XHJcbj98XG4pL2cpO3RoaXMuX2lucHV0PXQrdGhpcy5faW5wdXQsdGhpcy55eXRleHQ9dGhpcy55eXRleHQuc3Vic3RyKDAsdGhpcy55eXRleHQubGVuZ3RoLWUpLHRoaXMub2Zmc2V0LT1lO3ZhciByPXRoaXMubWF0Y2guc3BsaXQoLyg/OlxyXG4/fFxuKS9nKTt0aGlzLm1hdGNoPXRoaXMubWF0Y2guc3Vic3RyKDAsdGhpcy5tYXRjaC5sZW5ndGgtMSksdGhpcy5tYXRjaGVkPXRoaXMubWF0Y2hlZC5zdWJzdHIoMCx0aGlzLm1hdGNoZWQubGVuZ3RoLTEpLG4ubGVuZ3RoLTEmJih0aGlzLnl5bGluZW5vLT1uLmxlbmd0aC0xKTt2YXIgaT10aGlzLnl5bGxvYy5yYW5nZTtyZXR1cm4gdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MuZmlyc3RfbGluZSxsYXN0X2xpbmU6dGhpcy55eWxpbmVubysxLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46bj8obi5sZW5ndGg9PT1yLmxlbmd0aD90aGlzLnl5bGxvYy5maXJzdF9jb2x1bW46MCkrcltyLmxlbmd0aC1uLmxlbmd0aF0ubGVuZ3RoLW5bMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbi1lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W2lbMF0saVswXSt0aGlzLnl5bGVuZy1lXSksdGhpcy55eWxlbmc9dGhpcy55eXRleHQubGVuZ3RoLHRoaXN9LG1vcmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW9yZT0hMCx0aGlzfSxyZWplY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlcj8odGhpcy5fYmFja3RyYWNrPSEwLHRoaXMpOnRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIrKHRoaXMueXlsaW5lbm8rMSkrIi4gWW91IGNhbiBvbmx5IGludm9rZSByZWplY3QoKSBpbiB0aGUgbGV4ZXIgd2hlbiB0aGUgbGV4ZXIgaXMgb2YgdGhlIGJhY2t0cmFja2luZyBwZXJzdWFzaW9uIChvcHRpb25zLmJhY2t0cmFja19sZXhlciA9IHRydWUpLlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxlc3M6ZnVuY3Rpb24odCl7dGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKHQpKX0scGFzdElucHV0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXRjaGVkLnN1YnN0cigwLHRoaXMubWF0Y2hlZC5sZW5ndGgtdGhpcy5tYXRjaC5sZW5ndGgpO3JldHVybih0Lmxlbmd0aD4yMD8iLi4uIjoiIikrdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cbi9nLCIiKX0sdXBjb21pbmdJbnB1dDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWF0Y2g7cmV0dXJuIHQubGVuZ3RoPDIwJiYodCs9dGhpcy5faW5wdXQuc3Vic3RyKDAsMjAtdC5sZW5ndGgpKSwodC5zdWJzdHIoMCwyMCkrKHQubGVuZ3RoPjIwPyIuLi4iOiIiKSkucmVwbGFjZSgvXG4vZywiIil9LHNob3dQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucGFzdElucHV0KCksZT1uZXcgQXJyYXkodC5sZW5ndGgrMSkuam9pbigiLSIpO3JldHVybiB0K3RoaXMudXBjb21pbmdJbnB1dCgpKyJcbiIrZSsiXiJ9LHRlc3RfbWF0Y2g6ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk7aWYodGhpcy5vcHRpb25zLmJhY2t0cmFja19sZXhlciYmKGk9e3l5bGluZW5vOnRoaXMueXlsaW5lbm8seXlsbG9jOntmaXJzdF9saW5lOnRoaXMueXlsbG9jLmZpcnN0X2xpbmUsbGFzdF9saW5lOnRoaXMubGFzdF9saW5lLGZpcnN0X2NvbHVtbjp0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sbGFzdF9jb2x1bW46dGhpcy55eWxsb2MubGFzdF9jb2x1bW59LHl5dGV4dDp0aGlzLnl5dGV4dCxtYXRjaDp0aGlzLm1hdGNoLG1hdGNoZXM6dGhpcy5tYXRjaGVzLG1hdGNoZWQ6dGhpcy5tYXRjaGVkLHl5bGVuZzp0aGlzLnl5bGVuZyxvZmZzZXQ6dGhpcy5vZmZzZXQsX21vcmU6dGhpcy5fbW9yZSxfaW5wdXQ6dGhpcy5faW5wdXQseXk6dGhpcy55eSxjb25kaXRpb25TdGFjazp0aGlzLmNvbmRpdGlvblN0YWNrLnNsaWNlKDApLGRvbmU6dGhpcy5kb25lfSx0aGlzLm9wdGlvbnMucmFuZ2VzJiYoaS55eWxsb2MucmFuZ2U9dGhpcy55eWxsb2MucmFuZ2Uuc2xpY2UoMCkpKSwocj10WzBdLm1hdGNoKC8oPzpcclxuP3xcbikuKi9nKSkmJih0aGlzLnl5bGluZW5vKz1yLmxlbmd0aCksdGhpcy55eWxsb2M9e2ZpcnN0X2xpbmU6dGhpcy55eWxsb2MubGFzdF9saW5lLGxhc3RfbGluZTp0aGlzLnl5bGluZW5vKzEsZmlyc3RfY29sdW1uOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uLGxhc3RfY29sdW1uOnI/cltyLmxlbmd0aC0xXS5sZW5ndGgtcltyLmxlbmd0aC0xXS5tYXRjaCgvXHI/XG4/LylbMF0ubGVuZ3RoOnRoaXMueXlsbG9jLmxhc3RfY29sdW1uK3RbMF0ubGVuZ3RofSx0aGlzLnl5dGV4dCs9dFswXSx0aGlzLm1hdGNoKz10WzBdLHRoaXMubWF0Y2hlcz10LHRoaXMueXlsZW5nPXRoaXMueXl0ZXh0Lmxlbmd0aCx0aGlzLm9wdGlvbnMucmFuZ2VzJiYodGhpcy55eWxsb2MucmFuZ2U9W3RoaXMub2Zmc2V0LHRoaXMub2Zmc2V0Kz10aGlzLnl5bGVuZ10pLHRoaXMuX21vcmU9ITEsdGhpcy5fYmFja3RyYWNrPSExLHRoaXMuX2lucHV0PXRoaXMuX2lucHV0LnNsaWNlKHRbMF0ubGVuZ3RoKSx0aGlzLm1hdGNoZWQrPXRbMF0sbj10aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLHRoaXMueXksdGhpcyxlLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pLHRoaXMuZG9uZSYmdGhpcy5faW5wdXQmJih0aGlzLmRvbmU9ITEpLG4pcmV0dXJuIG47aWYodGhpcy5fYmFja3RyYWNrKXtmb3IodmFyIGEgaW4gaSl0aGlzW2FdPWlbYV07cmV0dXJuITF9cmV0dXJuITF9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLmRvbmUpcmV0dXJuIHRoaXMuRU9GO3ZhciB0LGUsbixyO3RoaXMuX2lucHV0fHwodGhpcy5kb25lPSEwKSx0aGlzLl9tb3JlfHwodGhpcy55eXRleHQ9IiIsdGhpcy5tYXRjaD0iIik7Zm9yKHZhciBpPXRoaXMuX2N1cnJlbnRSdWxlcygpLGE9MDthPGkubGVuZ3RoO2ErKylpZigobj10aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW2lbYV1dKSkmJighZXx8blswXS5sZW5ndGg+ZVswXS5sZW5ndGgpKXtpZihlPW4scj1hLHRoaXMub3B0aW9ucy5iYWNrdHJhY2tfbGV4ZXIpe2lmKCExIT09KHQ9dGhpcy50ZXN0X21hdGNoKG4saVthXSkpKXJldHVybiB0O2lmKHRoaXMuX2JhY2t0cmFjayl7ZT0hMTtjb250aW51ZX1yZXR1cm4hMX1pZighdGhpcy5vcHRpb25zLmZsZXgpYnJlYWt9cmV0dXJuIGU/ITEhPT0odD10aGlzLnRlc3RfbWF0Y2goZSxpW3JdKSkmJnQ6IiI9PT10aGlzLl9pbnB1dD90aGlzLkVPRjp0aGlzLnBhcnNlRXJyb3IoIkxleGljYWwgZXJyb3Igb24gbGluZSAiKyh0aGlzLnl5bGluZW5vKzEpKyIuIFVucmVjb2duaXplZCB0ZXh0LlxuIit0aGlzLnNob3dQb3NpdGlvbigpLHt0ZXh0OiIiLHRva2VuOm51bGwsbGluZTp0aGlzLnl5bGluZW5vfSl9LGxleDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubmV4dCgpO3JldHVybiB0fHx0aGlzLmxleCgpfSxiZWdpbjpmdW5jdGlvbih0KXt0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2godCl9LHBvcFN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoLTE+MD90aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOnRoaXMuY29uZGl0aW9uU3RhY2tbMF19LF9jdXJyZW50UnVsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgmJnRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0/dGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV1dLnJ1bGVzOnRoaXMuY29uZGl0aW9ucy5JTklUSUFMLnJ1bGVzfSx0b3BTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4odD10aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xLU1hdGguYWJzKHR8fDApKT49MD90aGlzLmNvbmRpdGlvblN0YWNrW3RdOiJJTklUSUFMIn0scHVzaFN0YXRlOmZ1bmN0aW9uKHQpe3RoaXMuYmVnaW4odCl9LHN0YXRlU3RhY2tTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RofSxvcHRpb25zOnsiY2FzZS1pbnNlbnNpdGl2ZSI6ITB9LHBlcmZvcm1BY3Rpb246ZnVuY3Rpb24odCxlLG4scil7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gdGhpcy5iZWdpbigib3Blbl9kaXJlY3RpdmUiKSwzNztjYXNlIDE6cmV0dXJuIHRoaXMuYmVnaW4oInR5cGVfZGlyZWN0aXZlIiksMzg7Y2FzZSAyOnJldHVybiB0aGlzLnBvcFN0YXRlKCksdGhpcy5iZWdpbigiYXJnX2RpcmVjdGl2ZSIpLDE1O2Nhc2UgMzpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLHRoaXMucG9wU3RhdGUoKSw0MDtjYXNlIDQ6cmV0dXJuIDM5O2Nhc2UgNTpjYXNlIDY6YnJlYWs7Y2FzZSA3OnJldHVybiAxMTtjYXNlIDg6YnJlYWs7Y2FzZSA5OnJldHVybiA5O2Nhc2UgMTA6cmV0dXJuIDM2O2Nhc2UgMTE6cmV0dXJuIDQ7Y2FzZSAxMjpyZXR1cm4gdGhpcy5iZWdpbigiYmxvY2siKSwyMDtjYXNlIDEzOmJyZWFrO2Nhc2UgMTQ6cmV0dXJuIDI3O2Nhc2UgMTU6YnJlYWs7Y2FzZSAxNjpyZXR1cm4gdGhpcy5wb3BTdGF0ZSgpLDIyO2Nhc2UgMTc6cmV0dXJuIGUueXl0ZXh0WzBdO2Nhc2UgMTg6cmV0dXJuIDMwO2Nhc2UgMTk6cmV0dXJuIDMxO2Nhc2UgMjA6cmV0dXJuIDMyO2Nhc2UgMjE6cmV0dXJuIDMzO2Nhc2UgMjI6cmV0dXJuIDMwO2Nhc2UgMjM6cmV0dXJuIDMxO2Nhc2UgMjQ6cmV0dXJuIDMyO2Nhc2UgMjU6cmV0dXJuIDM0O2Nhc2UgMjY6cmV0dXJuIDM1O2Nhc2UgMjc6Y2FzZSAyODpyZXR1cm4gMzQ7Y2FzZSAyOTpyZXR1cm4gMjM7Y2FzZSAzMDpyZXR1cm4gZS55eXRleHRbMF07Y2FzZSAzMTpyZXR1cm4gNn19LHJ1bGVzOlsvXig/OiUlXHspL2ksL14oPzooKD86KD8hXH0lJSlbXjouXSkqKSkvaSwvXig/OjopL2ksL14oPzpcfSUlKS9pLC9eKD86KCg/Oig/IVx9JSUpLnxcbikqKSkvaSwvXig/OiUoPyFceylbXlxuXSopL2ksL14oPzpbXlx9XSUlW15cbl0qKS9pLC9eKD86W1xuXSspL2ksL14oPzpccyspL2ksL14oPzpbXHNdKykvaSwvXig/OiJbXiJdKiIpL2ksL14oPzplckRpYWdyYW1cYikvaSwvXig/Olx7KS9pLC9eKD86XHMrKS9pLC9eKD86W0EtWmEtel1bQS1aYS16MC05XC1fXSopL2ksL14oPzpbXG5dKykvaSwvXig/Olx9KS9pLC9eKD86LikvaSwvXig/Olx8b1xiKS9pLC9eKD86XH1vXGIpL2ksL14oPzpcfVx8KS9pLC9eKD86XHxcfCkvaSwvXig/Om9cfCkvaSwvXig/Om9ceykvaSwvXig/Olx8XHspL2ksL14oPzpcLlwuKS9pLC9eKD86LS0pL2ksL14oPzpcLi0pL2ksL14oPzotXC4pL2ksL14oPzpbQS1aYS16XVtBLVphLXowLTlcLV9dKikvaSwvXig/Oi4pL2ksL14oPzokKS9pXSxjb25kaXRpb25zOntvcGVuX2RpcmVjdGl2ZTp7cnVsZXM6WzFdLGluY2x1c2l2ZTohMX0sdHlwZV9kaXJlY3RpdmU6e3J1bGVzOlsyLDNdLGluY2x1c2l2ZTohMX0sYXJnX2RpcmVjdGl2ZTp7cnVsZXM6WzMsNF0saW5jbHVzaXZlOiExfSxibG9jazp7cnVsZXM6WzEzLDE0LDE1LDE2LDE3XSxpbmNsdXNpdmU6ITF9LElOSVRJQUw6e3J1bGVzOlswLDUsNiw3LDgsOSwxMCwxMSwxMiwxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMV0saW5jbHVzaXZlOiEwfX19O2Z1bmN0aW9uIG0oKXt0aGlzLnl5PXt9fXJldHVybiB5LmxleGVyPWcsbS5wcm90b3R5cGU9eSx5LlBhcnNlcj1tLG5ldyBtfSgpO2UucGFyc2VyPWksZS5QYXJzZXI9aS5QYXJzZXIsZS5wYXJzZT1mdW5jdGlvbigpe3JldHVybiBpLnBhcnNlLmFwcGx5KGksYXJndW1lbnRzKX0sZS5tYWluPWZ1bmN0aW9uKHIpe3JbMV18fChjb25zb2xlLmxvZygiVXNhZ2U6ICIrclswXSsiIEZJTEUiKSx0LmV4aXQoMSkpO3ZhciBpPW4oMTcpLnJlYWRGaWxlU3luYyhuKDE4KS5ub3JtYWxpemUoclsxXSksInV0ZjgiKTtyZXR1cm4gZS5wYXJzZXIucGFyc2UoaSl9LG4uY1tuLnNdPT09ciYmZS5tYWluKHQuYXJndi5zbGljZSgxKSl9KS5jYWxsKHRoaXMsbigxMiksbig3KSh0KSl9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9aS5kZWZhdWx0LnBhcnNlKHQpLG49ZS5yLGE9ZS5nLG89ZS5iLHM9LjIxMjYqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobikrLjcxNTIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIoYSkrLjA3MjIqci5kZWZhdWx0LmNoYW5uZWwudG9MaW5lYXIobyk7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHMpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEzKTt0LmV4cG9ydHM9aTtmdW5jdGlvbiBpKHQpe3RoaXMuX2lzRGlyZWN0ZWQ9IXIuaGFzKHQsImRpcmVjdGVkIil8fHQuZGlyZWN0ZWQsdGhpcy5faXNNdWx0aWdyYXBoPSEhci5oYXModCwibXVsdGlncmFwaCIpJiZ0Lm11bHRpZ3JhcGgsdGhpcy5faXNDb21wb3VuZD0hIXIuaGFzKHQsImNvbXBvdW5kIikmJnQuY29tcG91bmQsdGhpcy5fbGFiZWw9dm9pZCAwLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1yLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXIuY29uc3RhbnQodm9pZCAwKSx0aGlzLl9ub2Rlcz17fSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50PXt9LHRoaXMuX2NoaWxkcmVuPXt9LHRoaXMuX2NoaWxkcmVuWyJcMCJdPXt9KSx0aGlzLl9pbj17fSx0aGlzLl9wcmVkcz17fSx0aGlzLl9vdXQ9e30sdGhpcy5fc3Vjcz17fSx0aGlzLl9lZGdlT2Jqcz17fSx0aGlzLl9lZGdlTGFiZWxzPXt9fWZ1bmN0aW9uIGEodCxlKXt0W2VdP3RbZV0rKzp0W2VdPTF9ZnVuY3Rpb24gbyh0LGUpey0tdFtlXXx8ZGVsZXRlIHRbZV19ZnVuY3Rpb24gcyh0LGUsbixpKXt2YXIgYT0iIitlLG89IiIrbjtpZighdCYmYT5vKXt2YXIgcz1hO2E9byxvPXN9cmV0dXJuIGErIgEiK28rIgEiKyhyLmlzVW5kZWZpbmVkKGkpPyJcMCI6aSl9ZnVuY3Rpb24gYyh0LGUsbixyKXt2YXIgaT0iIitlLGE9IiIrbjtpZighdCYmaT5hKXt2YXIgbz1pO2k9YSxhPW99dmFyIHM9e3Y6aSx3OmF9O3JldHVybiByJiYocy5uYW1lPXIpLHN9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBzKHQsZS52LGUudyxlLm5hbWUpfWkucHJvdG90eXBlLl9ub2RlQ291bnQ9MCxpLnByb3RvdHlwZS5fZWRnZUNvdW50PTAsaS5wcm90b3R5cGUuaXNEaXJlY3RlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0RpcmVjdGVkfSxpLnByb3RvdHlwZS5pc011bHRpZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNdWx0aWdyYXBofSxpLnByb3RvdHlwZS5pc0NvbXBvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzQ29tcG91bmR9LGkucHJvdG90eXBlLnNldEdyYXBoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9sYWJlbD10LHRoaXN9LGkucHJvdG90eXBlLmdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhYmVsfSxpLnByb3RvdHlwZS5zZXREZWZhdWx0Tm9kZUxhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiByLmlzRnVuY3Rpb24odCl8fCh0PXIuY29uc3RhbnQodCkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj10LHRoaXN9LGkucHJvdG90eXBlLm5vZGVDb3VudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ub2RlQ291bnR9LGkucHJvdG90eXBlLm5vZGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIua2V5cyh0aGlzLl9ub2Rlcyl9LGkucHJvdG90eXBlLnNvdXJjZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiByLmZpbHRlcih0aGlzLm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiByLmlzRW1wdHkodC5faW5bZV0pfSkpfSxpLnByb3RvdHlwZS5zaW5rcz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIHIuZmlsdGVyKHRoaXMubm9kZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuaXNFbXB0eSh0Ll9vdXRbZV0pfSkpfSxpLnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cyxpPXRoaXM7cmV0dXJuIHIuZWFjaCh0LChmdW5jdGlvbih0KXtuLmxlbmd0aD4xP2kuc2V0Tm9kZSh0LGUpOmkuc2V0Tm9kZSh0KX0pKSx0aGlzfSxpLnByb3RvdHlwZS5zZXROb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuaGFzKHRoaXMuX25vZGVzLHQpPyhhcmd1bWVudHMubGVuZ3RoPjEmJih0aGlzLl9ub2Rlc1t0XT1lKSx0aGlzKToodGhpcy5fbm9kZXNbdF09YXJndW1lbnRzLmxlbmd0aD4xP2U6dGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuKHQpLHRoaXMuX2lzQ29tcG91bmQmJih0aGlzLl9wYXJlbnRbdF09IlwwIix0aGlzLl9jaGlsZHJlblt0XT17fSx0aGlzLl9jaGlsZHJlblsiXDAiXVt0XT0hMCksdGhpcy5faW5bdF09e30sdGhpcy5fcHJlZHNbdF09e30sdGhpcy5fb3V0W3RdPXt9LHRoaXMuX3N1Y3NbdF09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9LGkucHJvdG90eXBlLm5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25vZGVzW3RdfSxpLnByb3RvdHlwZS5oYXNOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0aGlzLl9ub2Rlcyx0KX0saS5wcm90b3R5cGUucmVtb3ZlTm9kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHIuaGFzKHRoaXMuX25vZGVzLHQpKXt2YXIgbj1mdW5jdGlvbih0KXtlLnJlbW92ZUVkZ2UoZS5fZWRnZU9ianNbdF0pfTtkZWxldGUgdGhpcy5fbm9kZXNbdF0sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLGRlbGV0ZSB0aGlzLl9wYXJlbnRbdF0sci5lYWNoKHRoaXMuY2hpbGRyZW4odCksKGZ1bmN0aW9uKHQpe2Uuc2V0UGFyZW50KHQpfSkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlblt0XSksci5lYWNoKHIua2V5cyh0aGlzLl9pblt0XSksbiksZGVsZXRlIHRoaXMuX2luW3RdLGRlbGV0ZSB0aGlzLl9wcmVkc1t0XSxyLmVhY2goci5rZXlzKHRoaXMuX291dFt0XSksbiksZGVsZXRlIHRoaXMuX291dFt0XSxkZWxldGUgdGhpcy5fc3Vjc1t0XSwtLXRoaXMuX25vZGVDb3VudH1yZXR1cm4gdGhpc30saS5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKHIuaXNVbmRlZmluZWQoZSkpZT0iXDAiO2Vsc2V7Zm9yKHZhciBuPWUrPSIiOyFyLmlzVW5kZWZpbmVkKG4pO249dGhpcy5wYXJlbnQobikpaWYobj09PXQpdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nICIrZSsiIGFzIHBhcmVudCBvZiAiK3QrIiB3b3VsZCBjcmVhdGUgYSBjeWNsZSIpO3RoaXMuc2V0Tm9kZShlKX1yZXR1cm4gdGhpcy5zZXROb2RlKHQpLHRoaXMuX3JlbW92ZUZyb21QYXJlbnRzQ2hpbGRMaXN0KHQpLHRoaXMuX3BhcmVudFt0XT1lLHRoaXMuX2NoaWxkcmVuW2VdW3RdPSEwLHRoaXN9LGkucHJvdG90eXBlLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdD1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W3RdXVt0XX0saS5wcm90b3R5cGUucGFyZW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX3BhcmVudFt0XTtpZigiXDAiIT09ZSlyZXR1cm4gZX19LGkucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe2lmKHIuaXNVbmRlZmluZWQodCkmJih0PSJcMCIpLHRoaXMuX2lzQ29tcG91bmQpe3ZhciBlPXRoaXMuX2NoaWxkcmVuW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX1lbHNle2lmKCJcMCI9PT10KXJldHVybiB0aGlzLm5vZGVzKCk7aWYodGhpcy5oYXNOb2RlKHQpKXJldHVybltdfX0saS5wcm90b3R5cGUucHJlZGVjZXNzb3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ByZWRzW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX0saS5wcm90b3R5cGUuc3VjY2Vzc29ycz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdWNzW3RdO2lmKGUpcmV0dXJuIHIua2V5cyhlKX0saS5wcm90b3R5cGUubmVpZ2hib3JzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucHJlZGVjZXNzb3JzKHQpO2lmKGUpcmV0dXJuIHIudW5pb24oZSx0aGlzLnN1Y2Nlc3NvcnModCkpfSxpLnByb3RvdHlwZS5pc0xlYWY9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT0odGhpcy5pc0RpcmVjdGVkKCk/dGhpcy5zdWNjZXNzb3JzKHQpOnRoaXMubmVpZ2hib3JzKHQpKS5sZW5ndGh9LGkucHJvdG90eXBlLmZpbHRlck5vZGVzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHtkaXJlY3RlZDp0aGlzLl9pc0RpcmVjdGVkLG11bHRpZ3JhcGg6dGhpcy5faXNNdWx0aWdyYXBoLGNvbXBvdW5kOnRoaXMuX2lzQ29tcG91bmR9KTtlLnNldEdyYXBoKHRoaXMuZ3JhcGgoKSk7dmFyIG49dGhpcztyLmVhY2godGhpcy5fbm9kZXMsKGZ1bmN0aW9uKG4scil7dChyKSYmZS5zZXROb2RlKHIsbil9KSksci5lYWNoKHRoaXMuX2VkZ2VPYmpzLChmdW5jdGlvbih0KXtlLmhhc05vZGUodC52KSYmZS5oYXNOb2RlKHQudykmJmUuc2V0RWRnZSh0LG4uZWRnZSh0KSl9KSk7dmFyIGk9e307cmV0dXJuIHRoaXMuX2lzQ29tcG91bmQmJnIuZWFjaChlLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2Uuc2V0UGFyZW50KHQsZnVuY3Rpb24gdChyKXt2YXIgYT1uLnBhcmVudChyKTtyZXR1cm4gdm9pZCAwPT09YXx8ZS5oYXNOb2RlKGEpPyhpW3JdPWEsYSk6YSBpbiBpP2lbYV06dChhKX0odCkpfSkpLGV9LGkucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHIuaXNGdW5jdGlvbih0KXx8KHQ9ci5jb25zdGFudCh0KSksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPXQsdGhpc30saS5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH0saS5wcm90b3R5cGUuZWRnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gci52YWx1ZXModGhpcy5fZWRnZU9ianMpfSxpLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxpPWFyZ3VtZW50cztyZXR1cm4gci5yZWR1Y2UodCwoZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5sZW5ndGg+MT9uLnNldEVkZ2UodCxyLGUpOm4uc2V0RWRnZSh0LHIpLHJ9KSksdGhpc30saS5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciB0LGUsbixpLG89ITEsdT1hcmd1bWVudHNbMF07Im9iamVjdCI9PXR5cGVvZiB1JiZudWxsIT09dSYmInYiaW4gdT8odD11LnYsZT11Lncsbj11Lm5hbWUsMj09PWFyZ3VtZW50cy5sZW5ndGgmJihpPWFyZ3VtZW50c1sxXSxvPSEwKSk6KHQ9dSxlPWFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihpPWFyZ3VtZW50c1syXSxvPSEwKSksdD0iIit0LGU9IiIrZSxyLmlzVW5kZWZpbmVkKG4pfHwobj0iIituKTt2YXIgbD1zKHRoaXMuX2lzRGlyZWN0ZWQsdCxlLG4pO2lmKHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsbCkpcmV0dXJuIG8mJih0aGlzLl9lZGdlTGFiZWxzW2xdPWkpLHRoaXM7aWYoIXIuaXNVbmRlZmluZWQobikmJiF0aGlzLl9pc011bHRpZ3JhcGgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IGEgbmFtZWQgZWRnZSB3aGVuIGlzTXVsdGlncmFwaCA9IGZhbHNlIik7dGhpcy5zZXROb2RlKHQpLHRoaXMuc2V0Tm9kZShlKSx0aGlzLl9lZGdlTGFiZWxzW2xdPW8/aTp0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm4odCxlLG4pO3ZhciBoPWModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHQ9aC52LGU9aC53LE9iamVjdC5mcmVlemUoaCksdGhpcy5fZWRnZU9ianNbbF09aCxhKHRoaXMuX3ByZWRzW2VdLHQpLGEodGhpcy5fc3Vjc1t0XSxlKSx0aGlzLl9pbltlXVtsXT1oLHRoaXMuX291dFt0XVtsXT1oLHRoaXMuX2VkZ2VDb3VudCsrLHRoaXN9LGkucHJvdG90eXBlLmVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHRoaXMuX2VkZ2VMYWJlbHNbcl19LGkucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbik7cmV0dXJuIHIuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsaSl9LGkucHJvdG90eXBlLnJlbW92ZUVkZ2U9ZnVuY3Rpb24odCxlLG4pe3ZhciByPTE9PT1hcmd1bWVudHMubGVuZ3RoP3UodGhpcy5faXNEaXJlY3RlZCxhcmd1bWVudHNbMF0pOnModGhpcy5faXNEaXJlY3RlZCx0LGUsbiksaT10aGlzLl9lZGdlT2Jqc1tyXTtyZXR1cm4gaSYmKHQ9aS52LGU9aS53LGRlbGV0ZSB0aGlzLl9lZGdlTGFiZWxzW3JdLGRlbGV0ZSB0aGlzLl9lZGdlT2Jqc1tyXSxvKHRoaXMuX3ByZWRzW2VdLHQpLG8odGhpcy5fc3Vjc1t0XSxlKSxkZWxldGUgdGhpcy5faW5bZV1bcl0sZGVsZXRlIHRoaXMuX291dFt0XVtyXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc30saS5wcm90b3R5cGUuaW5FZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2luW3RdO2lmKG4pe3ZhciBpPXIudmFsdWVzKG4pO3JldHVybiBlP3IuZmlsdGVyKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnY9PT1lfSkpOml9fSxpLnByb3RvdHlwZS5vdXRFZGdlcz1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX291dFt0XTtpZihuKXt2YXIgaT1yLnZhbHVlcyhuKTtyZXR1cm4gZT9yLmZpbHRlcihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC53PT09ZX0pKTppfX0saS5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5pbkVkZ2VzKHQsZSk7aWYobilyZXR1cm4gbi5jb25jYXQodGhpcy5vdXRFZGdlcyh0LGUpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiTWFwIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIyMiksaT1uKDIyOSksYT1uKDIzMSksbz1uKDIzMikscz1uKDIzMyk7ZnVuY3Rpb24gYyh0KXt2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrZTxuOyl7dmFyIHI9dFtlXTt0aGlzLnNldChyWzBdLHJbMV0pfX1jLnByb3RvdHlwZS5jbGVhcj1yLGMucHJvdG90eXBlLmRlbGV0ZT1pLGMucHJvdG90eXBlLmdldD1hLGMucHJvdG90eXBlLmhhcz1vLGMucHJvdG90eXBlLnNldD1zLHQuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248ciYmITEhPT1lKHRbbl0sbix0KTspO3JldHVybiB0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pi0xJiZ0JTE9PTAmJnQ8PTkwMDcxOTkyNTQ3NDA5OTF9fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKHQpe3ZhciByPW4oMTA5KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWkmJnIucHJvY2VzcyxzPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PWEmJmEucmVxdWlyZSYmYS5yZXF1aXJlKCJ1dGlsIikudHlwZXM7cmV0dXJuIHR8fG8mJm8uYmluZGluZyYmby5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2godCl7fX0oKTt0LmV4cG9ydHM9c30pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjMpLGk9bigyMzkpLGE9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpcmV0dXJuIGkodCk7dmFyIGU9W107Zm9yKHZhciBuIGluIE9iamVjdCh0KSlhLmNhbGwodCxuKSYmImNvbnN0cnVjdG9yIiE9biYmZS5wdXNoKG4pO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE2KSxpPW4oMTE3KSxhPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHM9bz9mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXToodD1PYmplY3QodCkscihvKHQpLChmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKHQsZSl9KSkpfTppO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPWUubGVuZ3RoLGk9dC5sZW5ndGg7KytuPHI7KXRbaStuXT1lW25dO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHQuY29uc3RydWN0b3IodC5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IHIoZSkuc2V0KG5ldyByKHQpKSxlfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz1uKDEyNil9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDkxKSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZyKHQsZSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1OCkoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9LTEsbj1BcnJheSh0LnNpemUpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe25bKytlXT10fSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1KSxpPW4oNDMpLGE9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sbz0vXlx3KiQvO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIodCkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHQ7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9dCYmIWkodCkpfHwoby50ZXN0KHQpfHwhYS50ZXN0KHQpfHxudWxsIT1lJiZ0IGluIE9iamVjdChlKSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODApLGk9bigxMzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZpKHQsZSxyKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2KSxpPW4oMjkyKTt0LmV4cG9ydHM9ZnVuY3Rpb24gdChlLG4sYSxvLHMpe3ZhciBjPS0xLHU9ZS5sZW5ndGg7Zm9yKGF8fChhPWkpLHN8fChzPVtdKTsrK2M8dTspe3ZhciBsPWVbY107bj4wJiZhKGwpP24+MT90KGwsbi0xLGEsbyxzKTpyKHMsbCk6b3x8KHNbcy5sZW5ndGhdPWwpfXJldHVybiBzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXt2YXIgbz10W2ldLHM9ZShvKTtpZihudWxsIT1zJiYodm9pZCAwPT09Yz9zPT1zJiYhcihzKTpuKHMsYykpKXZhciBjPXMsdT1vfXJldHVybiB1fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC54LGE9dC55LG89aS1yLngscz1hLXIueSxjPU1hdGguc3FydChlKmUqcypzK24qbipvKm8pLHU9TWF0aC5hYnMoZSpuKm8vYyk7ci54PGkmJih1PS11KTt2YXIgbD1NYXRoLmFicyhlKm4qcy9jKTtyLnk8YSYmKGw9LWwpO3JldHVybnt4OmkrdSx5OmErbH19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzkpLGk9big1MSksYT1uKDM4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgbz1lLmxhYmVsLHM9dC5hcHBlbmQoImciKTsic3ZnIj09PWUubGFiZWxUeXBlP2EocyxlKToic3RyaW5nIiE9dHlwZW9mIG98fCJodG1sIj09PWUubGFiZWxUeXBlP2kocyxlKTpyKHMsZSk7dmFyIGMsdT1zLm5vZGUoKS5nZXRCQm94KCk7c3dpdGNoKG4pe2Nhc2UidG9wIjpjPS1lLmhlaWdodC8yO2JyZWFrO2Nhc2UiYm90dG9tIjpjPWUuaGVpZ2h0LzItdS5oZWlnaHQ7YnJlYWs7ZGVmYXVsdDpjPS11LmhlaWdodC8yfXJldHVybiBzLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy11LndpZHRoLzIrIiwiK2MrIikiKSxzfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big0NiksaT1uKDE3NyksYT17cmU6L14jKCg/OlthLWYwLTldezJ9KXsyLDR9fFthLWYwLTldezN9KSQvaSxwYXJzZTpmdW5jdGlvbih0KXtpZigzNT09PXQuY2hhckNvZGVBdCgwKSl7dmFyIGU9dC5tYXRjaChhLnJlKTtpZihlKXt2YXIgbj1lWzFdLGk9cGFyc2VJbnQobiwxNiksbz1uLmxlbmd0aCxzPW8lND09MCxjPW8+NCx1PWM/MToxNyxsPWM/ODo0LGg9cz8wOi0xLGY9Yz8yNTU6MTU7cmV0dXJuIHIuZGVmYXVsdC5zZXQoe3I6KGk+PmwqKGgrMykmZikqdSxnOihpPj5sKihoKzIpJmYpKnUsYjooaT4+bCooaCsxKSZmKSp1LGE6cz8oaSZmKSp1LzI1NToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5yLG49dC5nLHI9dC5iLGE9dC5hO3JldHVybiBhPDE/IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildK2kuREVDMkhFWFtNYXRoLnJvdW5kKDI1NSphKV06IiMiK2kuREVDMkhFWFtNYXRoLnJvdW5kKGUpXStpLkRFQzJIRVhbTWF0aC5yb3VuZChuKV0raS5ERUMySEVYW01hdGgucm91bmQocildfX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big0NiksYT1uKDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUsbixvKXt2b2lkIDA9PT1vJiYobz0xKTt2YXIgcz1pLmRlZmF1bHQuc2V0KHtoOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgodCksczpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5zKGUpLGw6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAubChuKSxhOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEobyl9KTtyZXR1cm4gYS5kZWZhdWx0LnN0cmluZ2lmeShzKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMjkpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQsImEiKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNzcpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQpPj0uNX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwiYSIsZSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDMyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gci5kZWZhdWx0KHQsImEiLC1lKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNiksaT1uKDUzKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1yLmRlZmF1bHQucGFyc2UodCksYT17fTtmb3IodmFyIG8gaW4gZSllW29dJiYoYVtvXT1uW29dK2Vbb10pO3JldHVybiBpLmRlZmF1bHQodCxhKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNiksaT1uKDUyKTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlLG4pe3ZvaWQgMD09PW4mJihuPTUwKTt2YXIgYT1yLmRlZmF1bHQucGFyc2UodCksbz1hLnIscz1hLmcsYz1hLmIsdT1hLmEsbD1yLmRlZmF1bHQucGFyc2UoZSksaD1sLnIsZj1sLmcsZD1sLmIscD1sLmEseT1uLzEwMCxnPTIqeS0xLG09dS1wLHY9KChnKm09PS0xP2c6KGcrbSkvKDErZyptKSkrMSkvMixiPTEtdix4PW8qditoKmIsXz1zKnYrZipiLGs9Yyp2K2QqYix3PXUqeStwKigxLXkpO3JldHVybiBpLmRlZmF1bHQoeCxfLGssdyl9fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTQpLGk9big4MSksYT1uKDU5KSxvPW4oMjM0KSxzPW4oMjQwKSxjPW4oMTE0KSx1PW4oMTE1KSxsPW4oMjQzKSxoPW4oMjQ0KSxmPW4oMTE5KSxkPW4oMjQ1KSxwPW4oNDIpLHk9bigyNDkpLGc9bigyNTApLG09bigxMjQpLHY9big1KSxiPW4oNDEpLHg9bigyNTQpLF89bigxNCksaz1uKDI1Niksdz1uKDMwKSxUPW4oMzUpLEU9e307RVsiW29iamVjdCBBcmd1bWVudHNdIl09RVsiW29iamVjdCBBcnJheV0iXT1FWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPUVbIltvYmplY3QgRGF0YVZpZXddIl09RVsiW29iamVjdCBCb29sZWFuXSJdPUVbIltvYmplY3QgRGF0ZV0iXT1FWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1FWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1FWyJbb2JqZWN0IEludDhBcnJheV0iXT1FWyJbb2JqZWN0IEludDE2QXJyYXldIl09RVsiW29iamVjdCBJbnQzMkFycmF5XSJdPUVbIltvYmplY3QgTWFwXSJdPUVbIltvYmplY3QgTnVtYmVyXSJdPUVbIltvYmplY3QgT2JqZWN0XSJdPUVbIltvYmplY3QgUmVnRXhwXSJdPUVbIltvYmplY3QgU2V0XSJdPUVbIltvYmplY3QgU3RyaW5nXSJdPUVbIltvYmplY3QgU3ltYm9sXSJdPUVbIltvYmplY3QgVWludDhBcnJheV0iXT1FWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUVbIltvYmplY3QgVWludDE2QXJyYXldIl09RVsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxFWyJbb2JqZWN0IEVycm9yXSJdPUVbIltvYmplY3QgRnVuY3Rpb25dIl09RVsiW29iamVjdCBXZWFrTWFwXSJdPSExLHQuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixDLFMsQSxNKXt2YXIgTyxOPTEmbixCPTImbixEPTQmbjtpZihDJiYoTz1BP0MoZSxTLEEsTSk6QyhlKSksdm9pZCAwIT09TylyZXR1cm4gTztpZighXyhlKSlyZXR1cm4gZTt2YXIgTD12KGUpO2lmKEwpe2lmKE89eShlKSwhTilyZXR1cm4gdShlLE8pfWVsc2V7dmFyIEk9cChlKSxSPSJbb2JqZWN0IEZ1bmN0aW9uXSI9PUl8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PUk7aWYoYihlKSlyZXR1cm4gYyhlLE4pO2lmKCJbb2JqZWN0IE9iamVjdF0iPT1JfHwiW29iamVjdCBBcmd1bWVudHNdIj09SXx8UiYmIUEpe2lmKE89Qnx8Uj97fTptKGUpLCFOKXJldHVybiBCP2goZSxzKE8sZSkpOmwoZSxvKE8sZSkpfWVsc2V7aWYoIUVbSV0pcmV0dXJuIEE/ZTp7fTtPPWcoZSxJLE4pfX1NfHwoTT1uZXcgcik7dmFyIEY9TS5nZXQoZSk7aWYoRilyZXR1cm4gRjtNLnNldChlLE8pLGsoZSk/ZS5mb3JFYWNoKChmdW5jdGlvbihyKXtPLmFkZCh0KHIsbixDLHIsZSxNKSl9KSk6eChlKSYmZS5mb3JFYWNoKChmdW5jdGlvbihyLGkpe08uc2V0KGksdChyLG4sQyxpLGUsTSkpfSkpO3ZhciBQPUw/dm9pZCAwOihEP0I/ZDpmOkI/VDp3KShlKTtyZXR1cm4gaShQfHxlLChmdW5jdGlvbihyLGkpe1AmJihyPWVbaT1yXSksYShPLGksdChyLG4sQyxpLGUsTSkpfSkpLE99fSxmdW5jdGlvbih0LGUsbil7KGZ1bmN0aW9uKGUpe3ZhciBuPSJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmU7dC5leHBvcnRzPW59KS5jYWxsKHRoaXMsbigyMTYpKX0sZnVuY3Rpb24odCxlKXt2YXIgbj1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4gbi5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKSxpPWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PXIoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiB0KHt9LCIiLHt9KSx0fWNhdGNoKHQpe319KCk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDIzNSksaT1uKDQ4KSxhPW4oNSksbz1uKDQxKSxzPW4oNjEpLGM9big0OSksdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWEodCksbD0hbiYmaSh0KSxoPSFuJiYhbCYmbyh0KSxmPSFuJiYhbCYmIWgmJmModCksZD1ufHxsfHxofHxmLHA9ZD9yKHQubGVuZ3RoLFN0cmluZyk6W10seT1wLmxlbmd0aDtmb3IodmFyIGcgaW4gdCkhZSYmIXUuY2FsbCh0LGcpfHxkJiYoImxlbmd0aCI9PWd8fGgmJigib2Zmc2V0Ij09Z3x8InBhcmVudCI9PWcpfHxmJiYoImJ1ZmZlciI9PWd8fCJieXRlTGVuZ3RoIj09Z3x8ImJ5dGVPZmZzZXQiPT1nKXx8cyhnLHkpKXx8cC5wdXNoKGcpO3JldHVybiBwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZShuKSl9fX0sZnVuY3Rpb24odCxlLG4peyhmdW5jdGlvbih0KXt2YXIgcj1uKDE5KSxpPWUmJiFlLm5vZGVUeXBlJiZlLGE9aSYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0JiYhdC5ub2RlVHlwZSYmdCxvPWEmJmEuZXhwb3J0cz09PWk/ci5CdWZmZXI6dm9pZCAwLHM9bz9vLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihlKXJldHVybiB0LnNsaWNlKCk7dmFyIG49dC5sZW5ndGgscj1zP3Mobik6bmV3IHQuY29uc3RydWN0b3Iobik7cmV0dXJuIHQuY29weShyKSxyfX0pLmNhbGwodGhpcyxuKDcpKHQpKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj0tMSxyPXQubGVuZ3RoO2ZvcihlfHwoZT1BcnJheShyKSk7KytuPHI7KWVbbl09dFtuXTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPS0xLHI9bnVsbD09dD8wOnQubGVuZ3RoLGk9MCxhPVtdOysrbjxyOyl7dmFyIG89dFtuXTtlKG8sbix0KSYmKGFbaSsrXT1vKX1yZXR1cm4gYX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuW119fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NiksaT1uKDY0KSxhPW4oODUpLG89bigxMTcpLHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbih0KXtmb3IodmFyIGU9W107dDspcihlLGEodCkpLHQ9aSh0KTtyZXR1cm4gZX06bzt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTIwKSxpPW4oODUpLGE9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg2KSxpPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYT1lKHQpO3JldHVybiBpKHQpP2E6cihhLG4odCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTkpLCJTZXQiKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTkpLlVpbnQ4QXJyYXk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0Lmxlbmd0aCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjUpLGk9big2NCksYT1uKDYzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIHQuY29uc3RydWN0b3J8fGEodCk/e306cihpKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KSxpPU9iamVjdC5jcmVhdGUsYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCFyKGUpKXJldHVybnt9O2lmKGkpcmV0dXJuIGkoZSk7dC5wcm90b3R5cGU9ZTt2YXIgbj1uZXcgdDtyZXR1cm4gdC5wcm90b3R5cGU9dm9pZCAwLG59fSgpO3QuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MSksaT1uKDY1KSxhPW4oMTI3KSxvPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKG8odCk/cjppKSh0LGEoZSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OnJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMTYpLGk9bigyNjApLGE9bigyNiksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6aSkodCxhKGUsMykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjYzKSxpPW4oMjEpO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUsbixhLG8scyl7cmV0dXJuIGU9PT1ufHwobnVsbD09ZXx8bnVsbD09bnx8IWkoZSkmJiFpKG4pP2UhPWUmJm4hPW46cihlLG4sYSxvLHQscykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMxKSxpPW4oMjY2KSxhPW4oMTMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sbyxzLGMpe3ZhciB1PTEmbixsPXQubGVuZ3RoLGg9ZS5sZW5ndGg7aWYobCE9aCYmISh1JiZoPmwpKXJldHVybiExO3ZhciBmPWMuZ2V0KHQpLGQ9Yy5nZXQoZSk7aWYoZiYmZClyZXR1cm4gZj09ZSYmZD09dDt2YXIgcD0tMSx5PSEwLGc9MiZuP25ldyByOnZvaWQgMDtmb3IoYy5zZXQodCxlKSxjLnNldChlLHQpOysrcDxsOyl7dmFyIG09dFtwXSx2PWVbcF07aWYobyl2YXIgYj11P28odixtLHAsZSx0LGMpOm8obSx2LHAsdCxlLGMpO2lmKHZvaWQgMCE9PWIpe2lmKGIpY29udGludWU7eT0hMTticmVha31pZihnKXtpZighaShlLChmdW5jdGlvbih0LGUpe2lmKCFhKGcsZSkmJihtPT09dHx8cyhtLHQsbixvLGMpKSlyZXR1cm4gZy5wdXNoKGUpfSkpKXt5PSExO2JyZWFrfX1lbHNlIGlmKG0hPT12JiYhcyhtLHYsbixvLGMpKXt5PSExO2JyZWFrfX1yZXR1cm4gYy5kZWxldGUodCksYy5kZWxldGUoZSkseX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDgwKSxpPW4oMjY0KSxhPW4oMjY1KTtmdW5jdGlvbiBvKHQpe3ZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyByOysrZTxuOyl0aGlzLmFkZCh0W2VdKX1vLnByb3RvdHlwZS5hZGQ9by5wcm90b3R5cGUucHVzaD1pLG8ucHJvdG90eXBlLmhhcz1hLHQuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0LmhhcyhlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFyKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJihuW3RdPT09ZSYmKHZvaWQgMCE9PWV8fHQgaW4gT2JqZWN0KG4pKSl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjc2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI3NyksaT1uKDEzNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGwhPXQmJmkodCxlLHIpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjcpLGk9big0OCksYT1uKDUpLG89big2MSkscz1uKDgyKSxjPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciB1PS0xLGw9KGU9cihlLHQpKS5sZW5ndGgsaD0hMTsrK3U8bDspe3ZhciBmPWMoZVt1XSk7aWYoIShoPW51bGwhPXQmJm4odCxmKSkpYnJlYWs7dD10W2ZdfXJldHVybiBofHwrK3UhPWw/aDohIShsPW51bGw9PXQ/MDp0Lmxlbmd0aCkmJnMobCkmJm8oZixsKSYmKGEodCl8fGkodCkpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjgpLGk9bigyNiksYT1uKDE0MSksbz1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybihvKHQpP3I6YSkodCxpKGUsMykpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjUpLGk9bigyNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49LTEsYT1pKHQpP0FycmF5KHQubGVuZ3RoKTpbXTtyZXR1cm4gcih0LChmdW5jdGlvbih0LHIsaSl7YVsrK25dPWUodCxyLGkpfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyODIpLGk9big2NSksYT1uKDI2KSxvPW4oMjgzKSxzPW4oNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgYz1zKHQpP3I6byx1PWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gYyh0LGEoZSw0KSxuLHUsaSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyOTMpLGk9TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1pKHZvaWQgMD09PWU/dC5sZW5ndGgtMTplLDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cyxvPS0xLHM9aShhLmxlbmd0aC1lLDApLGM9QXJyYXkocyk7KytvPHM7KWNbb109YVtlK29dO289LTE7Zm9yKHZhciB1PUFycmF5KGUrMSk7KytvPGU7KXVbb109YVtvXTtyZXR1cm4gdVtlXT1uKGMpLHIodCx0aGlzLHUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI5NCksaT1uKDI5NSkocik7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT10Lmxlbmd0aCxhPW4rKHI/MTotMSk7cj9hLS06KythPGk7KWlmKGUodFthXSxhLHQpKXJldHVybiBhO3JldHVybi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjUpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzA0KSxpPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9bXTpyKHQsaSh0KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyksaT1uKDE0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiBmdW5jdGlvbih0LGUsbixyKXt2YXIgYSxvLHM9e30sYz1uZXcgaSx1PWZ1bmN0aW9uKHQpe3ZhciBlPXQudiE9PWE/dC52OnQudyxyPXNbZV0saT1uKHQpLHU9by5kaXN0YW5jZStpO2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoImRpamtzdHJhIGRvZXMgbm90IGFsbG93IG5lZ2F0aXZlIGVkZ2Ugd2VpZ2h0cy4gQmFkIGVkZ2U6ICIrdCsiIFdlaWdodDogIitpKTt1PHIuZGlzdGFuY2UmJihyLmRpc3RhbmNlPXUsci5wcmVkZWNlc3Nvcj1hLGMuZGVjcmVhc2UoZSx1KSl9O3Qubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj10PT09ZT8wOk51bWJlci5QT1NJVElWRV9JTkZJTklUWTtzW3RdPXtkaXN0YW5jZTpufSxjLmFkZCh0LG4pfSkpO2Zvcig7Yy5zaXplKCk+MCYmKGE9Yy5yZW1vdmVNaW4oKSwobz1zW2FdKS5kaXN0YW5jZSE9PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7KXIoYSkuZm9yRWFjaCh1KTtyZXR1cm4gc30odCxTdHJpbmcoZSksbnx8YSxyfHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgYT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyk7ZnVuY3Rpb24gaSgpe3RoaXMuX2Fycj1bXSx0aGlzLl9rZXlJbmRpY2VzPXt9fXQuZXhwb3J0cz1pLGkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXJyLmxlbmd0aH0saS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9KSl9LGkucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gci5oYXModGhpcy5fa2V5SW5kaWNlcyx0KX0saS5wcm90b3R5cGUucHJpb3JpdHk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fa2V5SW5kaWNlc1t0XTtpZih2b2lkIDAhPT1lKXJldHVybiB0aGlzLl9hcnJbZV0ucHJpb3JpdHl9LGkucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKDA9PT10aGlzLnNpemUoKSl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9rZXlJbmRpY2VzO2lmKHQ9U3RyaW5nKHQpLCFyLmhhcyhuLHQpKXt2YXIgaT10aGlzLl9hcnIsYT1pLmxlbmd0aDtyZXR1cm4gblt0XT1hLGkucHVzaCh7a2V5OnQscHJpb3JpdHk6ZX0pLHRoaXMuX2RlY3JlYXNlKGEpLCEwfXJldHVybiExfSxpLnByb3RvdHlwZS5yZW1vdmVNaW49ZnVuY3Rpb24oKXt0aGlzLl9zd2FwKDAsdGhpcy5fYXJyLmxlbmd0aC0xKTt2YXIgdD10aGlzLl9hcnIucG9wKCk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9rZXlJbmRpY2VzW3Qua2V5XSx0aGlzLl9oZWFwaWZ5KDApLHQua2V5fSxpLnByb3RvdHlwZS5kZWNyZWFzZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2tleUluZGljZXNbdF07aWYoZT50aGlzLl9hcnJbbl0ucHJpb3JpdHkpdGhyb3cgbmV3IEVycm9yKCJOZXcgcHJpb3JpdHkgaXMgZ3JlYXRlciB0aGFuIGN1cnJlbnQgcHJpb3JpdHkuIEtleTogIit0KyIgT2xkOiAiK3RoaXMuX2FycltuXS5wcmlvcml0eSsiIE5ldzogIitlKTt0aGlzLl9hcnJbbl0ucHJpb3JpdHk9ZSx0aGlzLl9kZWNyZWFzZShuKX0saS5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYXJyLG49Mip0LHI9bisxLGk9dDtuPGUubGVuZ3RoJiYoaT1lW25dLnByaW9yaXR5PGVbaV0ucHJpb3JpdHk/bjppLHI8ZS5sZW5ndGgmJihpPWVbcl0ucHJpb3JpdHk8ZVtpXS5wcmlvcml0eT9yOmkpLGkhPT10JiYodGhpcy5fc3dhcCh0LGkpLHRoaXMuX2hlYXBpZnkoaSkpKX0saS5wcm90b3R5cGUuX2RlY3JlYXNlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPXRoaXMuX2FycixyPW5bdF0ucHJpb3JpdHk7MCE9PXQmJiEobltlPXQ+PjFdLnByaW9yaXR5PHIpOyl0aGlzLl9zd2FwKHQsZSksdD1lfSxpLnByb3RvdHlwZS5fc3dhcD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMuX2FycixyPXRoaXMuX2tleUluZGljZXMsaT1uW3RdLGE9bltlXTtuW3RdPWEsbltlXT1pLHJbYS5rZXldPXQscltpLmtleV09ZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9MCxuPVtdLGk9e30sYT1bXTtyZXR1cm4gdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKG8pe3IuaGFzKGksbyl8fGZ1bmN0aW9uIG8ocyl7dmFyIGM9aVtzXT17b25TdGFjazohMCxsb3dsaW5rOmUsaW5kZXg6ZSsrfTtpZihuLnB1c2gocyksdC5zdWNjZXNzb3JzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuaGFzKGksdCk/aVt0XS5vblN0YWNrJiYoYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmluZGV4KSk6KG8odCksYy5sb3dsaW5rPU1hdGgubWluKGMubG93bGluayxpW3RdLmxvd2xpbmspKX0pKSxjLmxvd2xpbms9PT1jLmluZGV4KXt2YXIgdSxsPVtdO2Rve3U9bi5wb3AoKSxpW3VdLm9uU3RhY2s9ITEsbC5wdXNoKHUpfXdoaWxlKHMhPT11KTthLnB1c2gobCl9fShvKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMpO2Z1bmN0aW9uIGkodCl7dmFyIGU9e30sbj17fSxpPVtdO2lmKHIuZWFjaCh0LnNpbmtzKCksKGZ1bmN0aW9uIG8ocyl7aWYoci5oYXMobixzKSl0aHJvdyBuZXcgYTtyLmhhcyhlLHMpfHwobltzXT0hMCxlW3NdPSEwLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhzKSxvKSxkZWxldGUgbltzXSxpLnB1c2gocykpfSkpLHIuc2l6ZShlKSE9PXQubm9kZUNvdW50KCkpdGhyb3cgbmV3IGE7cmV0dXJuIGl9ZnVuY3Rpb24gYSgpe310LmV4cG9ydHM9aSxpLkN5Y2xlRXhjZXB0aW9uPWEsYS5wcm90b3R5cGU9bmV3IEVycm9yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyLmlzQXJyYXkoZSl8fChlPVtlXSk7dmFyIGk9KHQuaXNEaXJlY3RlZCgpP3Quc3VjY2Vzc29yczp0Lm5laWdoYm9ycykuYmluZCh0KSxhPVtdLG89e307cmV0dXJuIHIuZWFjaChlLChmdW5jdGlvbihlKXtpZighdC5oYXNOb2RlKGUpKXRocm93IG5ldyBFcnJvcigiR3JhcGggZG9lcyBub3QgaGF2ZSBub2RlOiAiK2UpOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtyLmhhcyhhLG4pfHwoYVtuXT0hMCxpfHxzLnB1c2gobiksci5lYWNoKG8obiksKGZ1bmN0aW9uKG4pe3QoZSxuLGksYSxvLHMpfSkpLGkmJnMucHVzaChuKSl9KHQsZSwicG9zdCI9PT1uLG8saSxhKX0pKSxhfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMTApfWNhdGNoKHQpe31yfHwocj13aW5kb3cuZGFncmUpLHQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2OSksaT1uKDM4KSxhPW4oNzApLG89bigzNSkscz1PYmplY3QucHJvdG90eXBlLGM9cy5oYXNPd25Qcm9wZXJ0eSx1PXIoKGZ1bmN0aW9uKHQsZSl7dD1PYmplY3QodCk7dmFyIG49LTEscj1lLmxlbmd0aCx1PXI+Mj9lWzJdOnZvaWQgMDtmb3IodSYmYShlWzBdLGVbMV0sdSkmJihyPTEpOysrbjxyOylmb3IodmFyIGw9ZVtuXSxoPW8obCksZj0tMSxkPWgubGVuZ3RoOysrZjxkOyl7dmFyIHA9aFtmXSx5PXRbcF07KHZvaWQgMD09PXl8fGkoeSxzW3BdKSYmIWMuY2FsbCh0LHApKSYmKHRbcF09bFtwXSl9cmV0dXJuIHR9KSk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0PXIodCkpPT09MS8wfHx0PT09LTEvMD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKHQ8MD8tMToxKTp0PT10P3Q6MDowPT09dD90OjB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybihudWxsPT10PzA6dC5sZW5ndGgpP3IodCwxKTpbXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDYwKSxpPW4oMzgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7KHZvaWQgMCE9PW4mJiFpKHRbZV0sbil8fHZvaWQgMD09PW4mJiEoZSBpbiB0KSkmJnIodCxlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQpLGk9big2NCksYT1uKDIxKSxvPUZ1bmN0aW9uLnByb3RvdHlwZSxzPU9iamVjdC5wcm90b3R5cGUsYz1vLnRvU3RyaW5nLHU9cy5oYXNPd25Qcm9wZXJ0eSxsPWMuY2FsbChPYmplY3QpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighYSh0KXx8IltvYmplY3QgT2JqZWN0XSIhPXIodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtpZihudWxsPT09ZSlyZXR1cm4hMDt2YXIgbj11LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIG4mJmMuY2FsbChuKT09bH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoKCJjb25zdHJ1Y3RvciIhPT1lfHwiZnVuY3Rpb24iIT10eXBlb2YgdFtlXSkmJiJfX3Byb3RvX18iIT1lKXJldHVybiB0W2VdfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzM5KSxpPW4oMzQyKSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD97fTpyKHQsZSl9KSk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0MykoKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM1KSxpPTA7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSsraTtyZXR1cm4gcih0KStlfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDcxKS5zbGFjaztmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uIG4oaSl7ci5mb3JFYWNoKGUubm9kZUVkZ2VzKGkpLChmdW5jdGlvbihyKXt2YXIgbz1yLnYscz1pPT09bz9yLnc6bzt0Lmhhc05vZGUocyl8fGEoZSxyKXx8KHQuc2V0Tm9kZShzLHt9KSx0LnNldEVkZ2UoaSxzLHt9KSxuKHMpKX0pKX0pKSx0Lm5vZGVDb3VudCgpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gci5taW5CeShlLmVkZ2VzKCksKGZ1bmN0aW9uKG4pe2lmKHQuaGFzTm9kZShuLnYpIT09dC5oYXNOb2RlKG4udykpcmV0dXJuIGEoZSxuKX0pKX1mdW5jdGlvbiBjKHQsZSxuKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtlLm5vZGUodCkucmFuays9bn0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUsbixyPW5ldyBpKHtkaXJlY3RlZDohMX0pLHU9dC5ub2RlcygpWzBdLGw9dC5ub2RlQ291bnQoKTtyLnNldE5vZGUodSx7fSk7Zm9yKDtvKHIsdCk8bDspZT1zKHIsdCksbj1yLmhhc05vZGUoZS52KT9hKHQsZSk6LWEodCxlKSxjKHIsdCxuKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHIodCxlLGUsbil9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC54LGE9dC55LG89W10scz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ZS5mb3JFYWNoKChmdW5jdGlvbih0KXtzPU1hdGgubWluKHMsdC54KSxjPU1hdGgubWluKGMsdC55KX0pKTtmb3IodmFyIHU9aS10LndpZHRoLzItcyxsPWEtdC5oZWlnaHQvMi1jLGg9MDtoPGUubGVuZ3RoO2grKyl7dmFyIGY9ZVtoXSxkPWVbaDxlLmxlbmd0aC0xP2grMTowXSxwPXIodCxuLHt4OnUrZi54LHk6bCtmLnl9LHt4OnUrZC54LHk6bCtkLnl9KTtwJiZvLnB1c2gocCl9aWYoIW8ubGVuZ3RoKXJldHVybiBjb25zb2xlLmxvZygiTk8gSU5URVJTRUNUSU9OIEZPVU5ELCBSRVRVUk4gTk9ERSBDRU5URVIiLHQpLHQ7by5sZW5ndGg+MSYmby5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIG9bMF19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtNYXRoLmFicyhzKSpjPk1hdGguYWJzKG8pKnU/KHM8MCYmKHU9LXUpLG49MD09PXM/MDp1Km8vcyxyPXUpOihvPDAmJihjPS1jKSxuPWMscj0wPT09bz8wOmMqcy9vKTtyZXR1cm57eDppK24seTphK3J9fX0sZnVuY3Rpb24odCxlLG4pewovKiEgQGxpY2Vuc2UgRE9NUHVyaWZ5IDIuMy4xIHwgKGMpIEN1cmU1MyBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwgUmVsZWFzZWQgdW5kZXIgdGhlIEFwYWNoZSBsaWNlbnNlIDIuMCBhbmQgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAyLjAgfCBnaXRodWIuY29tL2N1cmU1My9ET01QdXJpZnkvYmxvYi8yLjMuMS9MSUNFTlNFICovCnQuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1PYmplY3QuaGFzT3duUHJvcGVydHksZT1PYmplY3Quc2V0UHJvdG90eXBlT2Ysbj1PYmplY3QuaXNGcm96ZW4scj1PYmplY3QuZ2V0UHJvdG90eXBlT2YsaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGE9T2JqZWN0LmZyZWV6ZSxvPU9iamVjdC5zZWFsLHM9T2JqZWN0LmNyZWF0ZSxjPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdCx1PWMuYXBwbHksbD1jLmNvbnN0cnVjdDt1fHwodT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuYXBwbHkoZSxuKX0pLGF8fChhPWZ1bmN0aW9uKHQpe3JldHVybiB0fSksb3x8KG89ZnVuY3Rpb24odCl7cmV0dXJuIHR9KSxsfHwobD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkodCxbbnVsbF0uY29uY2F0KGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49QXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn1yZXR1cm4gQXJyYXkuZnJvbSh0KX0oZSkpKSl9KTt2YXIgaCxmPWsoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLGQ9ayhBcnJheS5wcm90b3R5cGUucG9wKSxwPWsoQXJyYXkucHJvdG90eXBlLnB1c2gpLHk9ayhTdHJpbmcucHJvdG90eXBlLnRvTG93ZXJDYXNlKSxnPWsoU3RyaW5nLnByb3RvdHlwZS5tYXRjaCksbT1rKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksdj1rKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiksYj1rKFN0cmluZy5wcm90b3R5cGUudHJpbSkseD1rKFJlZ0V4cC5wcm90b3R5cGUudGVzdCksXz0oaD1UeXBlRXJyb3IsZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPUFycmF5KHQpLG49MDtuPHQ7bisrKWVbbl09YXJndW1lbnRzW25dO3JldHVybiBsKGgsZSl9KTtmdW5jdGlvbiBrKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxyPUFycmF5KG4+MT9uLTE6MCksaT0xO2k8bjtpKyspcltpLTFdPWFyZ3VtZW50c1tpXTtyZXR1cm4gdSh0LGUscil9fWZ1bmN0aW9uIHcodCxyKXtlJiZlKHQsbnVsbCk7Zm9yKHZhciBpPXIubGVuZ3RoO2ktLTspe3ZhciBhPXJbaV07aWYoInN0cmluZyI9PXR5cGVvZiBhKXt2YXIgbz15KGEpO28hPT1hJiYobihyKXx8KHJbaV09byksYT1vKX10W2FdPSEwfXJldHVybiB0fWZ1bmN0aW9uIFQoZSl7dmFyIG49cyhudWxsKSxyPXZvaWQgMDtmb3IociBpbiBlKXUodCxlLFtyXSkmJihuW3JdPWVbcl0pO3JldHVybiBufWZ1bmN0aW9uIEUodCxlKXtmb3IoO251bGwhPT10Oyl7dmFyIG49aSh0LGUpO2lmKG4pe2lmKG4uZ2V0KXJldHVybiBrKG4uZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbi52YWx1ZSlyZXR1cm4gayhuLnZhbHVlKX10PXIodCl9cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBjb25zb2xlLndhcm4oImZhbGxiYWNrIHZhbHVlIGZvciIsdCksbnVsbH19dmFyIEM9YShbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwiYXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJkZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9wdGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9uZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksUz1hKFsic3ZnIiwiYSIsImFsdGdseXBoIiwiYWx0Z2x5cGhkZWYiLCJhbHRnbHlwaGl0ZW0iLCJhbmltYXRlY29sb3IiLCJhbmltYXRlbW90aW9uIiwiYW5pbWF0ZXRyYW5zZm9ybSIsImNpcmNsZSIsImNsaXBwYXRoIiwiZGVmcyIsImRlc2MiLCJlbGxpcHNlIiwiZmlsdGVyIiwiZm9udCIsImciLCJnbHlwaCIsImdseXBocmVmIiwiaGtlcm4iLCJpbWFnZSIsImxpbmUiLCJsaW5lYXJncmFkaWVudCIsIm1hcmtlciIsIm1hc2siLCJtZXRhZGF0YSIsIm1wYXRoIiwicGF0aCIsInBhdHRlcm4iLCJwb2x5Z29uIiwicG9seWxpbmUiLCJyYWRpYWxncmFkaWVudCIsInJlY3QiLCJzdG9wIiwic3R5bGUiLCJzd2l0Y2giLCJzeW1ib2wiLCJ0ZXh0IiwidGV4dHBhdGgiLCJ0aXRsZSIsInRyZWYiLCJ0c3BhbiIsInZpZXciLCJ2a2VybiJdKSxBPWEoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVNZXJnZSIsImZlTWVyZ2VOb2RlIiwiZmVNb3JwaG9sb2d5IiwiZmVPZmZzZXQiLCJmZVBvaW50TGlnaHQiLCJmZVNwZWN1bGFyTGlnaHRpbmciLCJmZVNwb3RMaWdodCIsImZlVGlsZSIsImZlVHVyYnVsZW5jZSJdKSxNPWEoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmZWRyb3BzaGFkb3ciLCJmZWltYWdlIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIsImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxPPWEoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciJdKSxOPWEoWyJtYWN0aW9uIiwibWFsaWduZ3JvdXAiLCJtYWxpZ25tYXJrIiwibWxvbmdkaXYiLCJtc2NhcnJpZXMiLCJtc2NhcnJ5IiwibXNncm91cCIsIm1zdGFjayIsIm1zbGluZSIsIm1zcm93Iiwic2VtYW50aWNzIiwiYW5ub3RhdGlvbiIsImFubm90YXRpb24teG1sIiwibXByZXNjcmlwdHMiLCJub25lIl0pLEI9YShbIiN0ZXh0Il0pLEQ9YShbImFjY2VwdCIsImFjdGlvbiIsImFsaWduIiwiYWx0IiwiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29tcGxldGUiLCJhdXRvcGljdHVyZWlucGljdHVyZSIsImF1dG9wbGF5IiwiYmFja2dyb3VuZCIsImJnY29sb3IiLCJib3JkZXIiLCJjYXB0dXJlIiwiY2VsbHBhZGRpbmciLCJjZWxsc3BhY2luZyIsImNoZWNrZWQiLCJjaXRlIiwiY2xhc3MiLCJjbGVhciIsImNvbG9yIiwiY29scyIsImNvbHNwYW4iLCJjb250cm9scyIsImNvbnRyb2xzbGlzdCIsImNvb3JkcyIsImNyb3Nzb3JpZ2luIiwiZGF0ZXRpbWUiLCJkZWNvZGluZyIsImRlZmF1bHQiLCJkaXIiLCJkaXNhYmxlZCIsImRpc2FibGVwaWN0dXJlaW5waWN0dXJlIiwiZGlzYWJsZXJlbW90ZXBsYXliYWNrIiwiZG93bmxvYWQiLCJkcmFnZ2FibGUiLCJlbmN0eXBlIiwiZW50ZXJrZXloaW50IiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZsYW5nIiwiaWQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxlbmd0aCIsIm11bHRpcGxlIiwibXV0ZWQiLCJuYW1lIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUiLCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHkiLCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwieG1sbnMiLCJzbG90Il0pLEw9YShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0ZXh0LWFuY2hvciIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtcmVuZGVyaW5nIiwidGV4dGxlbmd0aCIsInR5cGUiLCJ1MSIsInUyIiwidW5pY29kZSIsInZhbHVlcyIsInZpZXdib3giLCJ2aXNpYmlsaXR5IiwidmVyc2lvbiIsInZlcnQtYWR2LXkiLCJ2ZXJ0LW9yaWdpbi14IiwidmVydC1vcmlnaW4teSIsIndpZHRoIiwid29yZC1zcGFjaW5nIiwid3JhcCIsIndyaXRpbmctbW9kZSIsInhjaGFubmVsc2VsZWN0b3IiLCJ5Y2hhbm5lbHNlbGVjdG9yIiwieCIsIngxIiwieDIiLCJ4bWxucyIsInkiLCJ5MSIsInkyIiwieiIsInpvb21hbmRwYW4iXSksST1hKFsiYWNjZW50IiwiYWNjZW50dW5kZXIiLCJhbGlnbiIsImJldmVsbGVkIiwiY2xvc2UiLCJjb2x1bW5zYWxpZ24iLCJjb2x1bW5saW5lcyIsImNvbHVtbnNwYW4iLCJkZW5vbWFsaWduIiwiZGVwdGgiLCJkaXIiLCJkaXNwbGF5IiwiZGlzcGxheXN0eWxlIiwiZW5jb2RpbmciLCJmZW5jZSIsImZyYW1lIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwibGFyZ2VvcCIsImxlbmd0aCIsImxpbmV0aGlja25lc3MiLCJsc3BhY2UiLCJscXVvdGUiLCJtYXRoYmFja2dyb3VuZCIsIm1hdGhjb2xvciIsIm1hdGhzaXplIiwibWF0aHZhcmlhbnQiLCJtYXhzaXplIiwibWluc2l6ZSIsIm1vdmFibGVsaW1pdHMiLCJub3RhdGlvbiIsIm51bWFsaWduIiwib3BlbiIsInJvd2FsaWduIiwicm93bGluZXMiLCJyb3dzcGFjaW5nIiwicm93c3BhbiIsInJzcGFjZSIsInJxdW90ZSIsInNjcmlwdGxldmVsIiwic2NyaXB0bWluc2l6ZSIsInNjcmlwdHNpemVtdWx0aXBsaWVyIiwic2VsZWN0aW9uIiwic2VwYXJhdG9yIiwic2VwYXJhdG9ycyIsInN0cmV0Y2h5Iiwic3Vic2NyaXB0c2hpZnQiLCJzdXBzY3JpcHRzaGlmdCIsInN5bW1ldHJpYyIsInZvZmZzZXQiLCJ3aWR0aCIsInhtbG5zIl0pLFI9YShbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLEY9bygvXHtce1tcc1xTXSp8W1xzXFNdKlx9XH0vZ20pLFA9bygvPCVbXHNcU10qfFtcc1xTXSolPi9nbSksaj1vKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXS8pLFk9bygvXmFyaWEtW1wtXHddKyQvKSx6PW8oL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98Y2lkfHhtcHApOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSxVPW8oL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLCQ9bygvW1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2ODBcdTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxxPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtmdW5jdGlvbiBXKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgZT0wLG49QXJyYXkodC5sZW5ndGgpO2U8dC5sZW5ndGg7ZSsrKW5bZV09dFtlXTtyZXR1cm4gbn1yZXR1cm4gQXJyYXkuZnJvbSh0KX12YXIgSD1mdW5jdGlvbigpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P251bGw6d2luZG93fSxWPWZ1bmN0aW9uKHQsZSl7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpxKHQpKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHQuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO3ZhciBuPW51bGw7ZS5jdXJyZW50U2NyaXB0JiZlLmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKCJkYXRhLXR0LXBvbGljeS1zdWZmaXgiKSYmKG49ZS5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZSgiZGF0YS10dC1wb2xpY3ktc3VmZml4IikpO3ZhciByPSJkb21wdXJpZnkiKyhuPyIjIituOiIiKTt0cnl7cmV0dXJuIHQuY3JlYXRlUG9saWN5KHIse2NyZWF0ZUhUTUw6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSl9Y2F0Y2godCl7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK3IrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4iKSxudWxsfX07cmV0dXJuIGZ1bmN0aW9uIHQoKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06SCgpLG49ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSl9O2lmKG4udmVyc2lvbj0iMi4zLjEiLG4ucmVtb3ZlZD1bXSwhZXx8IWUuZG9jdW1lbnR8fDkhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBuLmlzU3VwcG9ydGVkPSExLG47dmFyIHI9ZS5kb2N1bWVudCxpPWUuZG9jdW1lbnQsbz1lLkRvY3VtZW50RnJhZ21lbnQscz1lLkhUTUxUZW1wbGF0ZUVsZW1lbnQsYz1lLk5vZGUsdT1lLkVsZW1lbnQsbD1lLk5vZGVGaWx0ZXIsaD1lLk5hbWVkTm9kZU1hcCxrPXZvaWQgMD09PWg/ZS5OYW1lZE5vZGVNYXB8fGUuTW96TmFtZWRBdHRyTWFwOmgsRz1lLlRleHQsWD1lLkNvbW1lbnQsWj1lLkRPTVBhcnNlcixLPWUudHJ1c3RlZFR5cGVzLFE9dS5wcm90b3R5cGUsSj1FKFEsImNsb25lTm9kZSIpLHR0PUUoUSwibmV4dFNpYmxpbmciKSxldD1FKFEsImNoaWxkTm9kZXMiKSxudD1FKFEsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygcyl7dmFyIHJ0PWkuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtydC5jb250ZW50JiZydC5jb250ZW50Lm93bmVyRG9jdW1lbnQmJihpPXJ0LmNvbnRlbnQub3duZXJEb2N1bWVudCl9dmFyIGl0PVYoSyxyKSxhdD1pdCYmRnQ/aXQuY3JlYXRlSFRNTCgiIik6IiIsb3Q9aSxzdD1vdC5pbXBsZW1lbnRhdGlvbixjdD1vdC5jcmVhdGVOb2RlSXRlcmF0b3IsdXQ9b3QuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxsdD1vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSxodD1yLmltcG9ydE5vZGUsZnQ9e307dHJ5e2Z0PVQoaSkuZG9jdW1lbnRNb2RlP2kuZG9jdW1lbnRNb2RlOnt9fWNhdGNoKHQpe312YXIgZHQ9e307bi5pc1N1cHBvcnRlZD0iZnVuY3Rpb24iPT10eXBlb2YgbnQmJnN0JiZ2b2lkIDAhPT1zdC5jcmVhdGVIVE1MRG9jdW1lbnQmJjkhPT1mdDt2YXIgcHQ9Rix5dD1QLGd0PWosbXQ9WSx2dD1VLGJ0PSQseHQ9eixfdD1udWxsLGt0PXcoe30sW10uY29uY2F0KFcoQyksVyhTKSxXKEEpLFcoTyksVyhCKSkpLHd0PW51bGwsVHQ9dyh7fSxbXS5jb25jYXQoVyhEKSxXKEwpLFcoSSksVyhSKSkpLEV0PW51bGwsQ3Q9bnVsbCxTdD0hMCxBdD0hMCxNdD0hMSxPdD0hMSxOdD0hMSxCdD0hMSxEdD0hMSxMdD0hMSxJdD0hMSxSdD0hMCxGdD0hMSxQdD0hMCxqdD0hMCxZdD0hMSx6dD17fSxVdD1udWxsLCR0PXcoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKSxxdD1udWxsLFd0PXcoe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKSxIdD1udWxsLFZ0PXcoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSxHdD0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsWHQ9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixadD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsS3Q9WnQsUXQ9ITEsSnQ9bnVsbCx0ZT1pLmNyZWF0ZUVsZW1lbnQoImZvcm0iKSxlZT1mdW5jdGlvbih0KXtKdCYmSnQ9PT10fHwodCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpxKHQpKXx8KHQ9e30pLHQ9VCh0KSxfdD0iQUxMT1dFRF9UQUdTImluIHQ/dyh7fSx0LkFMTE9XRURfVEFHUyk6a3Qsd3Q9IkFMTE9XRURfQVRUUiJpbiB0P3coe30sdC5BTExPV0VEX0FUVFIpOlR0LEh0PSJBRERfVVJJX1NBRkVfQVRUUiJpbiB0P3coVChWdCksdC5BRERfVVJJX1NBRkVfQVRUUik6VnQscXQ9IkFERF9EQVRBX1VSSV9UQUdTImluIHQ/dyhUKFd0KSx0LkFERF9EQVRBX1VSSV9UQUdTKTpXdCxVdD0iRk9SQklEX0NPTlRFTlRTImluIHQ/dyh7fSx0LkZPUkJJRF9DT05URU5UUyk6JHQsRXQ9IkZPUkJJRF9UQUdTImluIHQ/dyh7fSx0LkZPUkJJRF9UQUdTKTp7fSxDdD0iRk9SQklEX0FUVFIiaW4gdD93KHt9LHQuRk9SQklEX0FUVFIpOnt9LHp0PSJVU0VfUFJPRklMRVMiaW4gdCYmdC5VU0VfUFJPRklMRVMsU3Q9ITEhPT10LkFMTE9XX0FSSUFfQVRUUixBdD0hMSE9PXQuQUxMT1dfREFUQV9BVFRSLE10PXQuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFN8fCExLE90PXQuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxOdD10LldIT0xFX0RPQ1VNRU5UfHwhMSxMdD10LlJFVFVSTl9ET018fCExLEl0PXQuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsUnQ9ITEhPT10LlJFVFVSTl9ET01fSU1QT1JULEZ0PXQuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsRHQ9dC5GT1JDRV9CT0RZfHwhMSxQdD0hMSE9PXQuU0FOSVRJWkVfRE9NLGp0PSExIT09dC5LRUVQX0NPTlRFTlQsWXQ9dC5JTl9QTEFDRXx8ITEseHQ9dC5BTExPV0VEX1VSSV9SRUdFWFB8fHh0LEt0PXQuTkFNRVNQQUNFfHxadCxPdCYmKEF0PSExKSxJdCYmKEx0PSEwKSx6dCYmKF90PXcoe30sW10uY29uY2F0KFcoQikpKSx3dD1bXSwhMD09PXp0Lmh0bWwmJih3KF90LEMpLHcod3QsRCkpLCEwPT09enQuc3ZnJiYodyhfdCxTKSx3KHd0LEwpLHcod3QsUikpLCEwPT09enQuc3ZnRmlsdGVycyYmKHcoX3QsQSksdyh3dCxMKSx3KHd0LFIpKSwhMD09PXp0Lm1hdGhNbCYmKHcoX3QsTyksdyh3dCxJKSx3KHd0LFIpKSksdC5BRERfVEFHUyYmKF90PT09a3QmJihfdD1UKF90KSksdyhfdCx0LkFERF9UQUdTKSksdC5BRERfQVRUUiYmKHd0PT09VHQmJih3dD1UKHd0KSksdyh3dCx0LkFERF9BVFRSKSksdC5BRERfVVJJX1NBRkVfQVRUUiYmdyhIdCx0LkFERF9VUklfU0FGRV9BVFRSKSx0LkZPUkJJRF9DT05URU5UUyYmKFV0PT09JHQmJihVdD1UKFV0KSksdyhVdCx0LkZPUkJJRF9DT05URU5UUykpLGp0JiYoX3RbIiN0ZXh0Il09ITApLE50JiZ3KF90LFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLF90LnRhYmxlJiYodyhfdCxbInRib2R5Il0pLGRlbGV0ZSBFdC50Ym9keSksYSYmYSh0KSxKdD10KX0sbmU9dyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSkscmU9dyh7fSxbImZvcmVpZ25vYmplY3QiLCJkZXNjIiwidGl0bGUiLCJhbm5vdGF0aW9uLXhtbCJdKSxpZT13KHt9LFMpO3coaWUsQSksdyhpZSxNKTt2YXIgYWU9dyh7fSxPKTt3KGFlLE4pO3ZhciBvZT1mdW5jdGlvbih0KXt2YXIgZT1udCh0KTtlJiZlLnRhZ05hbWV8fChlPXtuYW1lc3BhY2VVUkk6WnQsdGFnTmFtZToidGVtcGxhdGUifSk7dmFyIG49eSh0LnRhZ05hbWUpLHI9eShlLnRhZ05hbWUpO2lmKHQubmFtZXNwYWNlVVJJPT09WHQpcmV0dXJuIGUubmFtZXNwYWNlVVJJPT09WnQ/InN2ZyI9PT1uOmUubmFtZXNwYWNlVVJJPT09R3Q/InN2ZyI9PT1uJiYoImFubm90YXRpb24teG1sIj09PXJ8fG5lW3JdKTpCb29sZWFuKGllW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PUd0KXJldHVybiBlLm5hbWVzcGFjZVVSST09PVp0PyJtYXRoIj09PW46ZS5uYW1lc3BhY2VVUkk9PT1YdD8ibWF0aCI9PT1uJiZyZVtyXTpCb29sZWFuKGFlW25dKTtpZih0Lm5hbWVzcGFjZVVSST09PVp0KXtpZihlLm5hbWVzcGFjZVVSST09PVh0JiYhcmVbcl0pcmV0dXJuITE7aWYoZS5uYW1lc3BhY2VVUkk9PT1HdCYmIW5lW3JdKXJldHVybiExO3ZhciBpPXcoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSk7cmV0dXJuIWFlW25dJiYoaVtuXXx8IWllW25dKX1yZXR1cm4hMX0sc2U9ZnVuY3Rpb24odCl7cChuLnJlbW92ZWQse2VsZW1lbnQ6dH0pO3RyeXt0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y2F0Y2goZSl7dHJ5e3Qub3V0ZXJIVE1MPWF0fWNhdGNoKGUpe3QucmVtb3ZlKCl9fX0sY2U9ZnVuY3Rpb24odCxlKXt0cnl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTplLmdldEF0dHJpYnV0ZU5vZGUodCksZnJvbTplfSl9Y2F0Y2godCl7cChuLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206ZX0pfWlmKGUucmVtb3ZlQXR0cmlidXRlKHQpLCJpcyI9PT10JiYhd3RbdF0paWYoTHR8fEl0KXRyeXtzZShlKX1jYXRjaCh0KXt9ZWxzZSB0cnl7ZS5zZXRBdHRyaWJ1dGUodCwiIil9Y2F0Y2godCl7fX0sdWU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwLG49dm9pZCAwO2lmKER0KXQ9IjxyZW1vdmU+PC9yZW1vdmU+Iit0O2Vsc2V7dmFyIHI9Zyh0LC9eW1xyXG5cdCBdKy8pO249ciYmclswXX12YXIgYT1pdD9pdC5jcmVhdGVIVE1MKHQpOnQ7aWYoS3Q9PT1adCl0cnl7ZT0obmV3IFopLnBhcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L2h0bWwiKX1jYXRjaCh0KXt9aWYoIWV8fCFlLmRvY3VtZW50RWxlbWVudCl7ZT1zdC5jcmVhdGVEb2N1bWVudChLdCwidGVtcGxhdGUiLG51bGwpO3RyeXtlLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUw9UXQ/IiI6YX1jYXRjaCh0KXt9fXZhciBvPWUuYm9keXx8ZS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQmJm4mJm8uaW5zZXJ0QmVmb3JlKGkuY3JlYXRlVGV4dE5vZGUobiksby5jaGlsZE5vZGVzWzBdfHxudWxsKSxLdD09PVp0P2x0LmNhbGwoZSxOdD8iaHRtbCI6ImJvZHkiKVswXTpOdD9lLmRvY3VtZW50RWxlbWVudDpvfSxsZT1mdW5jdGlvbih0KXtyZXR1cm4gY3QuY2FsbCh0Lm93bmVyRG9jdW1lbnR8fHQsdCxsLlNIT1dfRUxFTUVOVHxsLlNIT1dfQ09NTUVOVHxsLlNIT1dfVEVYVCxudWxsLCExKX0saGU9ZnVuY3Rpb24odCl7cmV0dXJuISh0IGluc3RhbmNlb2YgR3x8dCBpbnN0YW5jZW9mIFh8fCJzdHJpbmciPT10eXBlb2YgdC5ub2RlTmFtZSYmInN0cmluZyI9PXR5cGVvZiB0LnRleHRDb250ZW50JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZW1vdmVDaGlsZCYmdC5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgayYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVtb3ZlQXR0cmlidXRlJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zZXRBdHRyaWJ1dGUmJiJzdHJpbmciPT10eXBlb2YgdC5uYW1lc3BhY2VVUkkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0Lmluc2VydEJlZm9yZSl9LGZlPWZ1bmN0aW9uKHQpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PWM/InVuZGVmaW5lZCI6cShjKSk/dCBpbnN0YW5jZW9mIGM6dCYmIm9iamVjdCI9PT0odm9pZCAwPT09dD8idW5kZWZpbmVkIjpxKHQpKSYmIm51bWJlciI9PXR5cGVvZiB0Lm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mIHQubm9kZU5hbWV9LGRlPWZ1bmN0aW9uKHQsZSxyKXtkdFt0XSYmZihkdFt0XSwoZnVuY3Rpb24odCl7dC5jYWxsKG4sZSxyLEp0KX0pKX0scGU9ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwO2lmKGRlKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIix0LG51bGwpLGhlKHQpKXJldHVybiBzZSh0KSwhMDtpZihnKHQubm9kZU5hbWUsL1tcdTAwODAtXHVGRkZGXS8pKXJldHVybiBzZSh0KSwhMDt2YXIgcj15KHQubm9kZU5hbWUpO2lmKGRlKCJ1cG9uU2FuaXRpemVFbGVtZW50Iix0LHt0YWdOYW1lOnIsYWxsb3dlZFRhZ3M6X3R9KSwhZmUodC5maXJzdEVsZW1lbnRDaGlsZCkmJighZmUodC5jb250ZW50KXx8IWZlKHQuY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkpJiZ4KC88Wy9cd10vZyx0LmlubmVySFRNTCkmJngoLzxbL1x3XS9nLHQudGV4dENvbnRlbnQpKXJldHVybiBzZSh0KSwhMDtpZigic2VsZWN0Ij09PXImJngoLzx0ZW1wbGF0ZS9pLHQuaW5uZXJIVE1MKSlyZXR1cm4gc2UodCksITA7aWYoIV90W3JdfHxFdFtyXSl7aWYoanQmJiFVdFtyXSl7dmFyIGk9bnQodCl8fHQucGFyZW50Tm9kZSxhPWV0KHQpfHx0LmNoaWxkTm9kZXM7aWYoYSYmaSlmb3IodmFyIG89YS5sZW5ndGgtMTtvPj0wOy0tbylpLmluc2VydEJlZm9yZShKKGFbb10sITApLHR0KHQpKX1yZXR1cm4gc2UodCksITB9cmV0dXJuIHQgaW5zdGFuY2VvZiB1JiYhb2UodCk/KHNlKHQpLCEwKToibm9zY3JpcHQiIT09ciYmIm5vZW1iZWQiIT09cnx8IXgoLzxcL25vKHNjcmlwdHxlbWJlZCkvaSx0LmlubmVySFRNTCk/KE90JiYzPT09dC5ub2RlVHlwZSYmKGU9dC50ZXh0Q29udGVudCxlPW0oZSxwdCwiICIpLGU9bShlLHl0LCIgIiksdC50ZXh0Q29udGVudCE9PWUmJihwKG4ucmVtb3ZlZCx7ZWxlbWVudDp0LmNsb25lTm9kZSgpfSksdC50ZXh0Q29udGVudD1lKSksZGUoImFmdGVyU2FuaXRpemVFbGVtZW50cyIsdCxudWxsKSwhMSk6KHNlKHQpLCEwKX0seWU9ZnVuY3Rpb24odCxlLG4pe2lmKFB0JiYoImlkIj09PWV8fCJuYW1lIj09PWUpJiYobiBpbiBpfHxuIGluIHRlKSlyZXR1cm4hMTtpZihBdCYmIUN0W2VdJiZ4KGd0LGUpKTtlbHNlIGlmKFN0JiZ4KG10LGUpKTtlbHNle2lmKCF3dFtlXXx8Q3RbZV0pcmV0dXJuITE7aWYoSHRbZV0pO2Vsc2UgaWYoeCh4dCxtKG4sYnQsIiIpKSk7ZWxzZSBpZigic3JjIiE9PWUmJiJ4bGluazpocmVmIiE9PWUmJiJocmVmIiE9PWV8fCJzY3JpcHQiPT09dHx8MCE9PXYobiwiZGF0YToiKXx8IXF0W3RdKWlmKE10JiYheCh2dCxtKG4sYnQsIiIpKSk7ZWxzZSBpZihuKXJldHVybiExfXJldHVybiEwfSxnZT1mdW5jdGlvbih0KXt2YXIgZT12b2lkIDAscj12b2lkIDAsaT12b2lkIDAsYT12b2lkIDA7ZGUoImJlZm9yZVNhbml0aXplQXR0cmlidXRlcyIsdCxudWxsKTt2YXIgbz10LmF0dHJpYnV0ZXM7aWYobyl7dmFyIHM9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczp3dH07Zm9yKGE9by5sZW5ndGg7YS0tOyl7dmFyIGM9ZT1vW2FdLHU9Yy5uYW1lLGw9Yy5uYW1lc3BhY2VVUkk7aWYocj1iKGUudmFsdWUpLGk9eSh1KSxzLmF0dHJOYW1lPWkscy5hdHRyVmFsdWU9cixzLmtlZXBBdHRyPSEwLHMuZm9yY2VLZWVwQXR0cj12b2lkIDAsZGUoInVwb25TYW5pdGl6ZUF0dHJpYnV0ZSIsdCxzKSxyPXMuYXR0clZhbHVlLCFzLmZvcmNlS2VlcEF0dHImJihjZSh1LHQpLHMua2VlcEF0dHIpKWlmKHgoL1wvPi9pLHIpKWNlKHUsdCk7ZWxzZXtPdCYmKHI9bShyLHB0LCIgIikscj1tKHIseXQsIiAiKSk7dmFyIGg9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHllKGgsaSxyKSl0cnl7bD90LnNldEF0dHJpYnV0ZU5TKGwsdSxyKTp0LnNldEF0dHJpYnV0ZSh1LHIpLGQobi5yZW1vdmVkKX1jYXRjaCh0KXt9fX1kZSgiYWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXMiLHQsbnVsbCl9fSxtZT1mdW5jdGlvbiB0KGUpe3ZhciBuPXZvaWQgMCxyPWxlKGUpO2ZvcihkZSgiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLGUsbnVsbCk7bj1yLm5leHROb2RlKCk7KWRlKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixuLG51bGwpLHBlKG4pfHwobi5jb250ZW50IGluc3RhbmNlb2YgbyYmdChuLmNvbnRlbnQpLGdlKG4pKTtkZSgiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsZSxudWxsKX07cmV0dXJuIG4uc2FuaXRpemU9ZnVuY3Rpb24odCxpKXt2YXIgYT12b2lkIDAscz12b2lkIDAsdT12b2lkIDAsbD12b2lkIDAsaD12b2lkIDA7aWYoKFF0PSF0KSYmKHQ9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiB0JiYhZmUodCkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0LnRvU3RyaW5nKXRocm93IF8oInRvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoInN0cmluZyIhPXR5cGVvZih0PXQudG9TdHJpbmcoKSkpdGhyb3cgXygiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFuLmlzU3VwcG9ydGVkKXtpZigib2JqZWN0Ij09PXEoZS50b1N0YXRpY0hUTUwpfHwiZnVuY3Rpb24iPT10eXBlb2YgZS50b1N0YXRpY0hUTUwpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZS50b1N0YXRpY0hUTUwodCk7aWYoZmUodCkpcmV0dXJuIGUudG9TdGF0aWNIVE1MKHQub3V0ZXJIVE1MKX1yZXR1cm4gdH1pZihCdHx8ZWUoaSksbi5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgdCYmKFl0PSExKSxZdCk7ZWxzZSBpZih0IGluc3RhbmNlb2YgYykxPT09KHM9KGE9dWUoIlx4M2MhLS0tLVx4M2UiKSkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHQsITApKS5ub2RlVHlwZSYmIkJPRFkiPT09cy5ub2RlTmFtZXx8IkhUTUwiPT09cy5ub2RlTmFtZT9hPXM6YS5hcHBlbmRDaGlsZChzKTtlbHNle2lmKCFMdCYmIU90JiYhTnQmJi0xPT09dC5pbmRleE9mKCI8IikpcmV0dXJuIGl0JiZGdD9pdC5jcmVhdGVIVE1MKHQpOnQ7aWYoIShhPXVlKHQpKSlyZXR1cm4gTHQ/bnVsbDphdH1hJiZEdCYmc2UoYS5maXJzdENoaWxkKTtmb3IodmFyIGY9bGUoWXQ/dDphKTt1PWYubmV4dE5vZGUoKTspMz09PXUubm9kZVR5cGUmJnU9PT1sfHxwZSh1KXx8KHUuY29udGVudCBpbnN0YW5jZW9mIG8mJm1lKHUuY29udGVudCksZ2UodSksbD11KTtpZihsPW51bGwsWXQpcmV0dXJuIHQ7aWYoTHQpe2lmKEl0KWZvcihoPXV0LmNhbGwoYS5vd25lckRvY3VtZW50KTthLmZpcnN0Q2hpbGQ7KWguYXBwZW5kQ2hpbGQoYS5maXJzdENoaWxkKTtlbHNlIGg9YTtyZXR1cm4gUnQmJihoPWh0LmNhbGwocixoLCEwKSksaH12YXIgZD1OdD9hLm91dGVySFRNTDphLmlubmVySFRNTDtyZXR1cm4gT3QmJihkPW0oZCxwdCwiICIpLGQ9bShkLHl0LCIgIikpLGl0JiZGdD9pdC5jcmVhdGVIVE1MKGQpOmR9LG4uc2V0Q29uZmlnPWZ1bmN0aW9uKHQpe2VlKHQpLEJ0PSEwfSxuLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7SnQ9bnVsbCxCdD0hMX0sbi5pc1ZhbGlkQXR0cmlidXRlPWZ1bmN0aW9uKHQsZSxuKXtKdHx8ZWUoe30pO3ZhciByPXkodCksaT15KGUpO3JldHVybiB5ZShyLGksbil9LG4uYWRkSG9vaz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZHRbdF09ZHRbdF18fFtdLHAoZHRbdF0sZSkpfSxuLnJlbW92ZUhvb2s9ZnVuY3Rpb24odCl7ZHRbdF0mJmQoZHRbdF0pfSxuLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKHQpe2R0W3RdJiYoZHRbdF09W10pfSxuLnJlbW92ZUFsbEhvb2tzPWZ1bmN0aW9uKCl7ZHQ9e319LG59KCl9KCl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW50ZXJzZWN0KGUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big1Mik7ZS5oZXg9ci5kZWZhdWx0O3ZhciBpPW4oNTIpO2UucmdiPWkuZGVmYXVsdDt2YXIgYT1uKDUyKTtlLnJnYmE9YS5kZWZhdWx0O3ZhciBvPW4oMTAwKTtlLmhzbD1vLmRlZmF1bHQ7dmFyIHM9bigxMDApO2UuaHNsYT1zLmRlZmF1bHQ7dmFyIGM9bigxODEpO2UudG9LZXl3b3JkPWMuZGVmYXVsdDt2YXIgdT1uKDE4Mik7ZS50b0hleD11LmRlZmF1bHQ7dmFyIGw9bigxODMpO2UudG9SZ2JhPWwuZGVmYXVsdDt2YXIgaD1uKDE4NCk7ZS50b0hzbGE9aC5kZWZhdWx0O3ZhciBmPW4oMjkpO2UuY2hhbm5lbD1mLmRlZmF1bHQ7dmFyIGQ9bigxODUpO2UucmVkPWQuZGVmYXVsdDt2YXIgcD1uKDE4Nik7ZS5ncmVlbj1wLmRlZmF1bHQ7dmFyIHk9bigxODcpO2UuYmx1ZT15LmRlZmF1bHQ7dmFyIGc9bigxODgpO2UuaHVlPWcuZGVmYXVsdDt2YXIgbT1uKDE4OSk7ZS5zYXR1cmF0aW9uPW0uZGVmYXVsdDt2YXIgdj1uKDE5MCk7ZS5saWdodG5lc3M9di5kZWZhdWx0O3ZhciBiPW4oMTAxKTtlLmFscGhhPWIuZGVmYXVsdDt2YXIgeD1uKDEwMSk7ZS5vcGFjaXR5PXguZGVmYXVsdDt2YXIgXz1uKDE5MSk7ZS5jb250cmFzdD1fLmRlZmF1bHQ7dmFyIGs9big3Nyk7ZS5sdW1pbmFuY2U9ay5kZWZhdWx0O3ZhciB3PW4oMTkyKTtlLmlzRGFyaz13LmRlZmF1bHQ7dmFyIFQ9bigxMDIpO2UuaXNMaWdodD1ULmRlZmF1bHQ7dmFyIEU9bigxOTMpO2UuaXNWYWxpZD1FLmRlZmF1bHQ7dmFyIEM9bigxOTQpO2Uuc2F0dXJhdGU9Qy5kZWZhdWx0O3ZhciBTPW4oMTk1KTtlLmRlc2F0dXJhdGU9Uy5kZWZhdWx0O3ZhciBBPW4oMTk2KTtlLmxpZ2h0ZW49QS5kZWZhdWx0O3ZhciBNPW4oMTk3KTtlLmRhcmtlbj1NLmRlZmF1bHQ7dmFyIE89bigxMDMpO2Uub3BhY2lmeT1PLmRlZmF1bHQ7dmFyIE49bigxMDMpO2UuZmFkZUluPU4uZGVmYXVsdDt2YXIgQj1uKDEwNCk7ZS50cmFuc3BhcmVudGl6ZT1CLmRlZmF1bHQ7dmFyIEQ9bigxMDQpO2UuZmFkZU91dD1ELmRlZmF1bHQ7dmFyIEw9bigxOTgpO2UuY29tcGxlbWVudD1MLmRlZmF1bHQ7dmFyIEk9bigxOTkpO2UuZ3JheXNjYWxlPUkuZGVmYXVsdDt2YXIgUj1uKDEwNSk7ZS5hZGp1c3Q9Ui5kZWZhdWx0O3ZhciBGPW4oNTMpO2UuY2hhbmdlPUYuZGVmYXVsdDt2YXIgUD1uKDIwMCk7ZS5pbnZlcnQ9UC5kZWZhdWx0O3ZhciBqPW4oMTA2KTtlLm1peD1qLmRlZmF1bHQ7dmFyIFk9bigyMDEpO2Uuc2NhbGU9WS5kZWZhdWx0fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17bWluOntyOjAsZzowLGI6MCxzOjAsbDowLGE6MH0sbWF4OntyOjI1NSxnOjI1NSxiOjI1NSxoOjM2MCxzOjEwMCxsOjEwMCxhOjF9LGNsYW1wOntyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yNTU/MjU1OnQ8MD8wOnR9LGc6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTI1NT8yNTU6dDwwPzA6dH0sYjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjU1PzI1NTp0PDA/MDp0fSxoOmZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MH0sczpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTAwPzEwMDp0PDA/MDp0fSxsOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMDA/MTAwOnQ8MD8wOnR9LGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE/MTp0PDA/MDp0fX0sdG9MaW5lYXI6ZnVuY3Rpb24odCl7dmFyIGU9dC8yNTU7cmV0dXJuIHQ+LjAzOTI4P01hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCk6ZS8xMi45Mn0saHVlMnJnYjpmdW5jdGlvbih0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG48MS82P3QrNiooZS10KSpuOm48LjU/ZTpuPDIvMz90KyhlLXQpKigyLzMtbikqNjp0fSxoc2wycmdiOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5oLGk9dC5zLGE9dC5sO2lmKCFpKXJldHVybiAyLjU1KmE7bi89MzYwLGkvPTEwMDt2YXIgbz0oYS89MTAwKTwuNT9hKigxK2kpOmEraS1hKmkscz0yKmEtbztzd2l0Y2goZSl7Y2FzZSJyIjpyZXR1cm4gMjU1KnIuaHVlMnJnYihzLG8sbisxLzMpO2Nhc2UiZyI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4pO2Nhc2UiYiI6cmV0dXJuIDI1NSpyLmh1ZTJyZ2IocyxvLG4tMS8zKX19LHJnYjJoc2w6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnIscj10LmcsaT10LmI7bi89MjU1LHIvPTI1NSxpLz0yNTU7dmFyIGE9TWF0aC5tYXgobixyLGkpLG89TWF0aC5taW4obixyLGkpLHM9KGErbykvMjtpZigibCI9PT1lKXJldHVybiAxMDAqcztpZihhPT09bylyZXR1cm4gMDt2YXIgYz1hLW87aWYoInMiPT09ZSlyZXR1cm4gMTAwKihzPi41P2MvKDItYS1vKTpjLyhhK28pKTtzd2l0Y2goYSl7Y2FzZSBuOnJldHVybiA2MCooKHItaSkvYysocjxpPzY6MCkpO2Nhc2UgcjpyZXR1cm4gNjAqKChpLW4pL2MrMik7Y2FzZSBpOnJldHVybiA2MCooKG4tcikvYys0KTtkZWZhdWx0OnJldHVybi0xfX19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj17Y2xhbXA6ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPm4/TWF0aC5taW4oZSxNYXRoLm1heChuLHQpKTpNYXRoLm1pbihuLE1hdGgubWF4KGUsdCkpfSxyb3VuZDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgxZTEwKnQpLzFlMTB9fTtlLmRlZmF1bHQ9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9e2RlYzJoZXg6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCh0KS50b1N0cmluZygxNik7cmV0dXJuIGUubGVuZ3RoPjE/ZToiMCIrZX19O2UuZGVmYXVsdD1yfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDExKSxpPW4oMTc2KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuY29sb3I9ZSx0aGlzLmNoYW5nZWQ9ITEsdGhpcy5kYXRhPXQsdGhpcy50eXBlPW5ldyBpLmRlZmF1bHR9cmV0dXJuIHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbG9yPWUsdGhpcy5jaGFuZ2VkPSExLHRoaXMuZGF0YT10LHRoaXMudHlwZS50eXBlPTAsdGhpc30sdC5wcm90b3R5cGUuX2Vuc3VyZUhTTD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuaCxuPXQucyxpPXQubDt2b2lkIDA9PT1lJiYodC5oPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwiaCIpKSx2b2lkIDA9PT1uJiYodC5zPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwicyIpKSx2b2lkIDA9PT1pJiYodC5sPXIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwibCIpKX0sdC5wcm90b3R5cGUuX2Vuc3VyZVJHQj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQucixuPXQuZyxpPXQuYjt2b2lkIDA9PT1lJiYodC5yPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiciIpKSx2b2lkIDA9PT1uJiYodC5nPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiZyIpKSx2b2lkIDA9PT1pJiYodC5iPXIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiYiIpKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJyIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5yO3JldHVybiB0aGlzLnR5cGUuaXMoMil8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZUhTTCgpLHIuZGVmYXVsdC5jaGFubmVsLmhzbDJyZ2IodCwiciIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgxKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLnI9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsImciLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10Lmc7cmV0dXJuIHRoaXMudHlwZS5pcygyKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlSFNMKCksci5kZWZhdWx0LmNoYW5uZWwuaHNsMnJnYih0LCJnIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDEpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEuZz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiYiIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQuYjtyZXR1cm4gdGhpcy50eXBlLmlzKDIpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVIU0woKSxyLmRlZmF1bHQuY2hhbm5lbC5oc2wycmdiKHQsImIiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMSksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5iPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJoIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5kYXRhLGU9dC5oO3JldHVybiB0aGlzLnR5cGUuaXMoMSl8fHZvaWQgMD09PWU/KHRoaXMuX2Vuc3VyZVJHQigpLHIuZGVmYXVsdC5jaGFubmVsLnJnYjJoc2wodCwiaCIpKTplfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy50eXBlLnNldCgyKSx0aGlzLmNoYW5nZWQ9ITAsdGhpcy5kYXRhLmg9dH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInMiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRhdGEsZT10LnM7cmV0dXJuIHRoaXMudHlwZS5pcygxKXx8dm9pZCAwPT09ZT8odGhpcy5fZW5zdXJlUkdCKCksci5kZWZhdWx0LmNoYW5uZWwucmdiMmhzbCh0LCJzIikpOmV9LHNldDpmdW5jdGlvbih0KXt0aGlzLnR5cGUuc2V0KDIpLHRoaXMuY2hhbmdlZD0hMCx0aGlzLmRhdGEucz10fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwibCIse2dldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZGF0YSxlPXQubDtyZXR1cm4gdGhpcy50eXBlLmlzKDEpfHx2b2lkIDA9PT1lPyh0aGlzLl9lbnN1cmVSR0IoKSxyLmRlZmF1bHQuY2hhbm5lbC5yZ2IyaHNsKHQsImwiKSk6ZX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMudHlwZS5zZXQoMiksdGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5sPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5hfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5jaGFuZ2VkPSEwLHRoaXMuZGF0YS5hPXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdH0oKTtlLmRlZmF1bHQ9YX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy50eXBlPTB9cmV0dXJuIHQucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnR5cGV9LHQucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0aGlzLnR5cGUmJnRoaXMudHlwZSE9PXQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2hhbmdlIGJvdGggUkdCIGFuZCBIU0wgY2hhbm5lbHMgYXQgdGhlIHNhbWUgdGltZSIpO3RoaXMudHlwZT10fSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMudHlwZT0wfSx0LnByb3RvdHlwZS5pcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50eXBlPT09dH0sdH0oKTtlLmRlZmF1bHQ9cn0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMSksaT17fTtlLkRFQzJIRVg9aTtmb3IodmFyIGE9MDthPD0yNTU7YSsrKWlbYV09ci5kZWZhdWx0LnVuaXQuZGVjMmhleChhKX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big5OSksaT17Y29sb3JzOnthbGljZWJsdWU6IiNmMGY4ZmYiLGFudGlxdWV3aGl0ZToiI2ZhZWJkNyIsYXF1YToiIzAwZmZmZiIsYXF1YW1hcmluZToiIzdmZmZkNCIsYXp1cmU6IiNmMGZmZmYiLGJlaWdlOiIjZjVmNWRjIixiaXNxdWU6IiNmZmU0YzQiLGJsYWNrOiIjMDAwMDAwIixibGFuY2hlZGFsbW9uZDoiI2ZmZWJjZCIsYmx1ZToiIzAwMDBmZiIsYmx1ZXZpb2xldDoiIzhhMmJlMiIsYnJvd246IiNhNTJhMmEiLGJ1cmx5d29vZDoiI2RlYjg4NyIsY2FkZXRibHVlOiIjNWY5ZWEwIixjaGFydHJldXNlOiIjN2ZmZjAwIixjaG9jb2xhdGU6IiNkMjY5MWUiLGNvcmFsOiIjZmY3ZjUwIixjb3JuZmxvd2VyYmx1ZToiIzY0OTVlZCIsY29ybnNpbGs6IiNmZmY4ZGMiLGNyaW1zb246IiNkYzE0M2MiLGN5YW5hcXVhOiIjMDBmZmZmIixkYXJrYmx1ZToiIzAwMDA4YiIsZGFya2N5YW46IiMwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6IiNiODg2MGIiLGRhcmtncmF5OiIjYTlhOWE5IixkYXJrZ3JlZW46IiMwMDY0MDAiLGRhcmtncmV5OiIjYTlhOWE5IixkYXJra2hha2k6IiNiZGI3NmIiLGRhcmttYWdlbnRhOiIjOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiIzU1NmIyZiIsZGFya29yYW5nZToiI2ZmOGMwMCIsZGFya29yY2hpZDoiIzk5MzJjYyIsZGFya3JlZDoiIzhiMDAwMCIsZGFya3NhbG1vbjoiI2U5OTY3YSIsZGFya3NlYWdyZWVuOiIjOGZiYzhmIixkYXJrc2xhdGVibHVlOiIjNDgzZDhiIixkYXJrc2xhdGVncmF5OiIjMmY0ZjRmIixkYXJrc2xhdGVncmV5OiIjMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIjMDBjZWQxIixkYXJrdmlvbGV0OiIjOTQwMGQzIixkZWVwcGluazoiI2ZmMTQ5MyIsZGVlcHNreWJsdWU6IiMwMGJmZmYiLGRpbWdyYXk6IiM2OTY5NjkiLGRpbWdyZXk6IiM2OTY5NjkiLGRvZGdlcmJsdWU6IiMxZTkwZmYiLGZpcmVicmljazoiI2IyMjIyMiIsZmxvcmFsd2hpdGU6IiNmZmZhZjAiLGZvcmVzdGdyZWVuOiIjMjI4YjIyIixmdWNoc2lhOiIjZmYwMGZmIixnYWluc2Jvcm86IiNkY2RjZGMiLGdob3N0d2hpdGU6IiNmOGY4ZmYiLGdvbGQ6IiNmZmQ3MDAiLGdvbGRlbnJvZDoiI2RhYTUyMCIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGdyZWVueWVsbG93OiIjYWRmZjJmIixncmV5OiIjODA4MDgwIixob25leWRldzoiI2YwZmZmMCIsaG90cGluazoiI2ZmNjliNCIsaW5kaWFucmVkOiIjY2Q1YzVjIixpbmRpZ286IiM0YjAwODIiLGl2b3J5OiIjZmZmZmYwIixraGFraToiI2YwZTY4YyIsbGF2ZW5kZXI6IiNlNmU2ZmEiLGxhdmVuZGVyYmx1c2g6IiNmZmYwZjUiLGxhd25ncmVlbjoiIzdjZmMwMCIsbGVtb25jaGlmZm9uOiIjZmZmYWNkIixsaWdodGJsdWU6IiNhZGQ4ZTYiLGxpZ2h0Y29yYWw6IiNmMDgwODAiLGxpZ2h0Y3lhbjoiI2UwZmZmZiIsbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IiNmYWZhZDIiLGxpZ2h0Z3JheToiI2QzZDNkMyIsbGlnaHRncmVlbjoiIzkwZWU5MCIsbGlnaHRncmV5OiIjZDNkM2QzIixsaWdodHBpbms6IiNmZmI2YzEiLGxpZ2h0c2FsbW9uOiIjZmZhMDdhIixsaWdodHNlYWdyZWVuOiIjMjBiMmFhIixsaWdodHNreWJsdWU6IiM4N2NlZmEiLGxpZ2h0c2xhdGVncmF5OiIjNzc4ODk5IixsaWdodHNsYXRlZ3JleToiIzc3ODg5OSIsbGlnaHRzdGVlbGJsdWU6IiNiMGM0ZGUiLGxpZ2h0eWVsbG93OiIjZmZmZmUwIixsaW1lOiIjMDBmZjAwIixsaW1lZ3JlZW46IiMzMmNkMzIiLGxpbmVuOiIjZmFmMGU2IixtYWdlbnRhOiIjZmYwMGZmIixtYXJvb246IiM4MDAwMDAiLG1lZGl1bWFxdWFtYXJpbmU6IiM2NmNkYWEiLG1lZGl1bWJsdWU6IiMwMDAwY2QiLG1lZGl1bW9yY2hpZDoiI2JhNTVkMyIsbWVkaXVtcHVycGxlOiIjOTM3MGRiIixtZWRpdW1zZWFncmVlbjoiIzNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiIjN2I2OGVlIixtZWRpdW1zcHJpbmdncmVlbjoiIzAwZmE5YSIsbWVkaXVtdHVycXVvaXNlOiIjNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6IiNjNzE1ODUiLG1pZG5pZ2h0Ymx1ZToiIzE5MTk3MCIsbWludGNyZWFtOiIjZjVmZmZhIixtaXN0eXJvc2U6IiNmZmU0ZTEiLG1vY2Nhc2luOiIjZmZlNGI1IixuYXZham93aGl0ZToiI2ZmZGVhZCIsbmF2eToiIzAwMDA4MCIsb2xkbGFjZToiI2ZkZjVlNiIsb2xpdmU6IiM4MDgwMDAiLG9saXZlZHJhYjoiIzZiOGUyMyIsb3JhbmdlOiIjZmZhNTAwIixvcmFuZ2VyZWQ6IiNmZjQ1MDAiLG9yY2hpZDoiI2RhNzBkNiIscGFsZWdvbGRlbnJvZDoiI2VlZThhYSIscGFsZWdyZWVuOiIjOThmYjk4IixwYWxldHVycXVvaXNlOiIjYWZlZWVlIixwYWxldmlvbGV0cmVkOiIjZGI3MDkzIixwYXBheWF3aGlwOiIjZmZlZmQ1IixwZWFjaHB1ZmY6IiNmZmRhYjkiLHBlcnU6IiNjZDg1M2YiLHBpbms6IiNmZmMwY2IiLHBsdW06IiNkZGEwZGQiLHBvd2RlcmJsdWU6IiNiMGUwZTYiLHB1cnBsZToiIzgwMDA4MCIscmViZWNjYXB1cnBsZToiIzY2MzM5OSIscmVkOiIjZmYwMDAwIixyb3N5YnJvd246IiNiYzhmOGYiLHJveWFsYmx1ZToiIzQxNjllMSIsc2FkZGxlYnJvd246IiM4YjQ1MTMiLHNhbG1vbjoiI2ZhODA3MiIsc2FuZHlicm93bjoiI2Y0YTQ2MCIsc2VhZ3JlZW46IiMyZThiNTciLHNlYXNoZWxsOiIjZmZmNWVlIixzaWVubmE6IiNhMDUyMmQiLHNpbHZlcjoiI2MwYzBjMCIsc2t5Ymx1ZToiIzg3Y2VlYiIsc2xhdGVibHVlOiIjNmE1YWNkIixzbGF0ZWdyYXk6IiM3MDgwOTAiLHNsYXRlZ3JleToiIzcwODA5MCIsc25vdzoiI2ZmZmFmYSIsc3ByaW5nZ3JlZW46IiMwMGZmN2YiLHRhbjoiI2QyYjQ4YyIsdGVhbDoiIzAwODA4MCIsdGhpc3RsZToiI2Q4YmZkOCIsdHJhbnNwYXJlbnQ6IiMwMDAwMDAwMCIsdHVycXVvaXNlOiIjNDBlMGQwIix2aW9sZXQ6IiNlZTgyZWUiLHdoZWF0OiIjZjVkZWIzIix3aGl0ZToiI2ZmZmZmZiIsd2hpdGVzbW9rZToiI2Y1ZjVmNSIseWVsbG93OiIjZmZmZjAwIix5ZWxsb3dncmVlbjoiIzlhY2QzMiJ9LHBhcnNlOmZ1bmN0aW9uKHQpe3Q9dC50b0xvd2VyQ2FzZSgpO3ZhciBlPWkuY29sb3JzW3RdO2lmKGUpcmV0dXJuIHIuZGVmYXVsdC5wYXJzZShlKX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXIuZGVmYXVsdC5zdHJpbmdpZnkodCk7Zm9yKHZhciBuIGluIGkuY29sb3JzKWlmKGkuY29sb3JzW25dPT09ZSlyZXR1cm4gbn19O2UuZGVmYXVsdD1pfSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDExKSxpPW4oNDYpLGE9e3JlOi9ecmdiYT9cKFxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSg/OlxzKj8oPzosfFwvKVxzKj9cKz8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplXGQrKT8oJT8pKSk/XHMqP1wpJC9pLHBhcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKTtpZigxMTQ9PT1lfHw4Mj09PWUpe3ZhciBuPXQubWF0Y2goYS5yZSk7aWYobil7dmFyIG89blsxXSxzPW5bMl0sYz1uWzNdLHU9bls0XSxsPW5bNV0saD1uWzZdLGY9bls3XSxkPW5bOF07cmV0dXJuIGkuZGVmYXVsdC5zZXQoe3I6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucihzPzIuNTUqcGFyc2VGbG9hdChvKTpwYXJzZUZsb2F0KG8pKSxnOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmcodT8yLjU1KnBhcnNlRmxvYXQoYyk6cGFyc2VGbG9hdChjKSksYjpyLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5iKGg/Mi41NSpwYXJzZUZsb2F0KGwpOnBhcnNlRmxvYXQobCkpLGE6Zj9yLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5hKGQ/cGFyc2VGbG9hdChmKS8xMDA6cGFyc2VGbG9hdChmKSk6MX0sdCl9fX0sc3RyaW5naWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQucixuPXQuZyxpPXQuYixhPXQuYTtyZXR1cm4gYTwxPyJyZ2JhKCIrci5kZWZhdWx0Lmxhbmcucm91bmQoZSkrIiwgIityLmRlZmF1bHQubGFuZy5yb3VuZChuKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoYSkrIikiOiJyZ2IoIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIsICIrci5kZWZhdWx0Lmxhbmcucm91bmQoaSkrIikifX07ZS5kZWZhdWx0PWF9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big0NiksYT17cmU6L15oc2xhP1woXHMqPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KD86ZGVnfGdyYWR8cmFkfHR1cm4pPylccyo/KD86LHxccylccyo/KC0/KD86XGQrKD86XC5cZCspP3woPzpcLlxkKykpKD86ZS0/XGQrKT8lKVxzKj8oPzosfFxzKVxzKj8oLT8oPzpcZCsoPzpcLlxkKyk/fCg/OlwuXGQrKSkoPzplLT9cZCspPyUpKD86XHMqPyg/Oix8XC8pXHMqP1wrPygtPyg/OlxkKyg/OlwuXGQrKT98KD86XC5cZCspKSg/OmUtP1xkKyk/KCUpPykpP1xzKj9cKSQvaSxodWVSZTovXiguKz8pKGRlZ3xncmFkfHJhZHx0dXJuKSQvaSxfaHVlMmRlZzpmdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKGEuaHVlUmUpO2lmKGUpe3ZhciBuPWVbMV07c3dpdGNoKGVbMl0pe2Nhc2UiZ3JhZCI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoLjkqcGFyc2VGbG9hdChuKSk7Y2FzZSJyYWQiOnJldHVybiByLmRlZmF1bHQuY2hhbm5lbC5jbGFtcC5oKDE4MCpwYXJzZUZsb2F0KG4pL01hdGguUEkpO2Nhc2UidHVybiI6cmV0dXJuIHIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmgoMzYwKnBhcnNlRmxvYXQobikpfX1yZXR1cm4gci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAuaChwYXJzZUZsb2F0KHQpKX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9dC5jaGFyQ29kZUF0KDApO2lmKDEwND09PWV8fDcyPT09ZSl7dmFyIG49dC5tYXRjaChhLnJlKTtpZihuKXt2YXIgbz1uWzFdLHM9blsyXSxjPW5bM10sdT1uWzRdLGw9bls1XTtyZXR1cm4gaS5kZWZhdWx0LnNldCh7aDphLl9odWUyZGVnKG8pLHM6ci5kZWZhdWx0LmNoYW5uZWwuY2xhbXAucyhwYXJzZUZsb2F0KHMpKSxsOnIuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmwocGFyc2VGbG9hdChjKSksYTp1P3IuZGVmYXVsdC5jaGFubmVsLmNsYW1wLmEobD9wYXJzZUZsb2F0KHUpLzEwMDpwYXJzZUZsb2F0KHUpKToxfSx0KX19fSxzdHJpbmdpZnk6ZnVuY3Rpb24odCl7dmFyIGU9dC5oLG49dC5zLGk9dC5sLGE9dC5hO3JldHVybiBhPDE/ImhzbGEoIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlLCAiK2ErIikiOiJoc2woIityLmRlZmF1bHQubGFuZy5yb3VuZChlKSsiLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKG4pKyIlLCAiK3IuZGVmYXVsdC5sYW5nLnJvdW5kKGkpKyIlKSJ9fTtlLmRlZmF1bHQ9YX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmYXVsdC5mb3JtYXQua2V5d29yZC5zdHJpbmdpZnkoci5kZWZhdWx0LnBhcnNlKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQuZm9ybWF0LmhleC5zdHJpbmdpZnkoci5kZWZhdWx0LnBhcnNlKHQpKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQuZm9ybWF0LnJnYmEuc3RyaW5naWZ5KHIuZGVmYXVsdC5wYXJzZSh0KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1uKDYpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0LmZvcm1hdC5oc2xhLnN0cmluZ2lmeShyLmRlZmF1bHQucGFyc2UodCkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiciIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiZyIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiYiIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwicyIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigyOSk7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwibCIpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMSksaT1uKDc3KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbj1pLmRlZmF1bHQodCksYT1pLmRlZmF1bHQoZSksbz1NYXRoLm1heChuLGEpLHM9TWF0aC5taW4obixhKSxjPShvK051bWJlci5FUFNJTE9OKS8ocytOdW1iZXIuRVBTSUxPTik7cmV0dXJuIHIuZGVmYXVsdC5sYW5nLnJvdW5kKHIuZGVmYXVsdC5sYW5nLmNsYW1wKGMsMSwxMCkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigxMDIpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4hci5kZWZhdWx0KHQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiByLmRlZmF1bHQucGFyc2UodCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJzIixlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwicyIsLWUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGVmYXVsdCh0LCJsIixlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMzIpO2UuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3JldHVybiByLmRlZmF1bHQodCwibCIsLWUpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9bigzMik7ZS5kZWZhdWx0PWZ1bmN0aW9uKHQpe3JldHVybiByLmRlZmF1bHQodCwiaCIsMTgwKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oNTMpO2UuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gci5kZWZhdWx0KHQse3M6MH0pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9big2KSxpPW4oMTA2KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0xMDApO3ZhciBuPXIuZGVmYXVsdC5wYXJzZSh0KTtyZXR1cm4gbi5yPTI1NS1uLnIsbi5nPTI1NS1uLmcsbi5iPTI1NS1uLmIsaS5kZWZhdWx0KG4sdCxlKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW4oMTEpLGk9big2KSxhPW4oMTA1KTtlLmRlZmF1bHQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvLHMsYz1pLmRlZmF1bHQucGFyc2UodCksdT17fTtmb3IodmFyIGwgaW4gZSl1W2xdPShuPWNbbF0sbz1lW2xdLHM9ci5kZWZhdWx0LmNoYW5uZWwubWF4W2xdLG8+MD8ocy1uKSpvLzEwMDpuKm8vMTAwKTtyZXR1cm4gYS5kZWZhdWx0KHQsdSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9eyIuL2xvY2FsZSI6MTA3LCIuL2xvY2FsZS5qcyI6MTA3fTtmdW5jdGlvbiBpKHQpe3ZhciBlPWEodCk7cmV0dXJuIG4oZSl9ZnVuY3Rpb24gYSh0KXtpZighbi5vKHIsdCkpe3ZhciBlPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK3QrIiciKTt0aHJvdyBlLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGV9cmV0dXJuIHJbdF19aS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHIpfSxpLnJlc29sdmU9YSx0LmV4cG9ydHM9aSxpLmlkPTIwMn0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17R3JhcGg6big3OCksdmVyc2lvbjpuKDMwNSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LDQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTYpLGk9QXJyYXkucHJvdG90eXBlLnNwbGljZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPXIoZSx0KTtyZXR1cm4hKG48MCkmJihuPT1lLmxlbmd0aC0xP2UucG9wKCk6aS5jYWxsKGUsbiwxKSwtLXRoaXMuc2l6ZSwhMCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX19kYXRhX18sbj1yKGUsdCk7cmV0dXJuIG48MD92b2lkIDA6ZVtuXVsxXX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIodGhpcy5fX2RhdGFfXyx0KT4tMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLl9fZGF0YV9fLGk9cihuLHQpO3JldHVybiBpPDA/KCsrdGhpcy5zaXplLG4ucHVzaChbdCxlXSkpOm5baV1bMV09ZSx0aGlzfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTUpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IHIsdGhpcy5zaXplPTB9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fLG49ZS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZT1lLnNpemUsbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldCh0KX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU1KSxpPW4oNzkpLGE9big4MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztpZihuIGluc3RhbmNlb2Ygcil7dmFyIG89bi5fX2RhdGFfXztpZighaXx8by5sZW5ndGg8MTk5KXJldHVybiBvLnB1c2goW3QsZV0pLHRoaXMuc2l6ZT0rK24uc2l6ZSx0aGlzO249dGhpcy5fX2RhdGFfXz1uZXcgYShvKX1yZXR1cm4gbi5zZXQodCxlKSx0aGlzLnNpemU9bi5zaXplLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzOSksaT1uKDIxOSksYT1uKDE0KSxvPW4oMTEwKSxzPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLGM9RnVuY3Rpb24ucHJvdG90eXBlLHU9T2JqZWN0LnByb3RvdHlwZSxsPWMudG9TdHJpbmcsaD11Lmhhc093blByb3BlcnR5LGY9UmVnRXhwKCJeIitsLmNhbGwoaCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEoIWEodCl8fGkodCkpJiYocih0KT9mOnMpLnRlc3Qobyh0KSl9fSxmdW5jdGlvbih0LGUpe3ZhciBuO249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7bj1ufHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaCh0KXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKG49d2luZG93KX10LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDApLGk9T2JqZWN0LnByb3RvdHlwZSxhPWkuaGFzT3duUHJvcGVydHksbz1pLnRvU3RyaW5nLHM9cj9yLnRvU3RyaW5nVGFnOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9YS5jYWxsKHQscyksbj10W3NdO3RyeXt0W3NdPXZvaWQgMDt2YXIgcj0hMH1jYXRjaCh0KXt9dmFyIGk9by5jYWxsKHQpO3JldHVybiByJiYoZT90W3NdPW46ZGVsZXRlIHRbc10pLGl9fSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuLmNhbGwodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHIsaT1uKDIyMCksYT0ocj0vW14uXSskLy5leGVjKGkmJmkua2V5cyYmaS5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrcjoiIjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuISFhJiZhIGluIHR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxOSlbIl9fY29yZS1qc19zaGFyZWRfXyJdO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P3ZvaWQgMDp0W2VdfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjIzKSxpPW4oNTUpLGE9big3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgcixtYXA6bmV3KGF8fGkpLHN0cmluZzpuZXcgcn19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyMjQpLGk9bigyMjUpLGE9bigyMjYpLG89bigyMjcpLHM9bigyMjgpO2Z1bmN0aW9uIGModCl7dmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2U8bjspe3ZhciByPXRbZV07dGhpcy5zZXQoclswXSxyWzFdKX19Yy5wcm90b3R5cGUuY2xlYXI9cixjLnByb3RvdHlwZS5kZWxldGU9aSxjLnByb3RvdHlwZS5nZXQ9YSxjLnByb3RvdHlwZS5oYXM9byxjLnByb3RvdHlwZS5zZXQ9cyx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTcpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189cj9yKG51bGwpOnt9LHRoaXMuc2l6ZT0wfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5oYXModCkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW3RdO3JldHVybiB0aGlzLnNpemUtPWU/MTowLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NyksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO2lmKHIpe3ZhciBuPWVbdF07cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09bj92b2lkIDA6bn1yZXR1cm4gaS5jYWxsKGUsdCk/ZVt0XTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NyksaT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiByP3ZvaWQgMCE9PWVbdF06aS5jYWxsKGUsdCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyh0KT8wOjEsblt0XT1yJiZ2b2lkIDA9PT1lPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjplLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXIodGhpcyx0KS5kZWxldGUodCk7cmV0dXJuIHRoaXMuc2l6ZS09ZT8xOjAsZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT1lfHwibnVtYmVyIj09ZXx8InN5bWJvbCI9PWV8fCJib29sZWFuIj09ZT8iX19wcm90b19fIiE9PXQ6bnVsbD09PXR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHRoaXMsdCkuZ2V0KHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0aGlzLHQpLmhhcyh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1yKHRoaXMsdCksaT1uLnNpemU7cmV0dXJuIG4uc2V0KHQsZSksdGhpcy5zaXplKz1uLnNpemU9PWk/MDoxLHRoaXN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDMwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPUFycmF5KHQpOysrbjx0OylyW25dPWUobik7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1yKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0KSxpPW4oODIpLGE9bigyMSksbz17fTtvWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1vWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1vWyJbb2JqZWN0IEludDhBcnJheV0iXT1vWyJbb2JqZWN0IEludDE2QXJyYXldIl09b1siW29iamVjdCBJbnQzMkFycmF5XSJdPW9bIltvYmplY3QgVWludDhBcnJheV0iXT1vWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPW9bIltvYmplY3QgVWludDE2QXJyYXldIl09b1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxvWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1vWyJbb2JqZWN0IEFycmF5XSJdPW9bIltvYmplY3QgQXJyYXlCdWZmZXJdIl09b1siW29iamVjdCBCb29sZWFuXSJdPW9bIltvYmplY3QgRGF0YVZpZXddIl09b1siW29iamVjdCBEYXRlXSJdPW9bIltvYmplY3QgRXJyb3JdIl09b1siW29iamVjdCBGdW5jdGlvbl0iXT1vWyJbb2JqZWN0IE1hcF0iXT1vWyJbb2JqZWN0IE51bWJlcl0iXT1vWyJbb2JqZWN0IE9iamVjdF0iXT1vWyJbb2JqZWN0IFJlZ0V4cF0iXT1vWyJbb2JqZWN0IFNldF0iXT1vWyJbb2JqZWN0IFN0cmluZ10iXT1vWyJbb2JqZWN0IFdlYWtNYXBdIl09ITEsdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQpJiZpKHQubGVuZ3RoKSYmISFvW3IodCldfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTEzKShPYmplY3Qua2V5cyxPYmplY3QpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0NyksaT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmcihlLGkoZSksdCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNCksaT1uKDYzKSxhPW4oMjQyKSxvPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFyKHQpKXJldHVybiBhKHQpO3ZhciBlPWkodCksbj1bXTtmb3IodmFyIHMgaW4gdCkoImNvbnN0cnVjdG9yIiE9c3x8IWUmJm8uY2FsbCh0LHMpKSYmbi5wdXNoKHMpO3JldHVybiBufX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107aWYobnVsbCE9dClmb3IodmFyIG4gaW4gT2JqZWN0KHQpKWUucHVzaChuKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oODUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByKHQsaSh0KSxlKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oMTE4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGkodCksZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMjApLGk9bigxMTgpLGE9bigzNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKHQsYSxpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiRGF0YVZpZXciKTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMpKG4oMTkpLCJQcm9taXNlIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDMzKShuKDE5KSwiV2Vha01hcCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3ZhciBuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoLHI9bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIGUmJiJzdHJpbmciPT10eXBlb2YgdFswXSYmbi5jYWxsKHQsImluZGV4IikmJihyLmluZGV4PXQuaW5kZXgsci5pbnB1dD10LmlucHV0KSxyfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODcpLGk9bigyNTEpLGE9bigyNTIpLG89bigyNTMpLHM9bigxMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGM9dC5jb25zdHJ1Y3Rvcjtzd2l0Y2goZSl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIHIodCk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgYygrdCk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGkodCxuKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gcyh0LG4pO2Nhc2UiW29iamVjdCBNYXBdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGModCk7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBhKHQpO2Nhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IGM7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBvKHQpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDg3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj1lP3IodC5idWZmZXIpOnQuYnVmZmVyO3JldHVybiBuZXcgdC5jb25zdHJ1Y3RvcihuLHQuYnl0ZU9mZnNldCx0LmJ5dGVMZW5ndGgpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXHcqJC87dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0LmNvbnN0cnVjdG9yKHQuc291cmNlLG4uZXhlYyh0KSk7cmV0dXJuIGUubGFzdEluZGV4PXQubGFzdEluZGV4LGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MCksaT1yP3IucHJvdG90eXBlOnZvaWQgMCxhPWk/aS52YWx1ZU9mOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGE/T2JqZWN0KGEuY2FsbCh0KSk6e319fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNTUpLGk9big2MiksYT1uKDgzKSxvPWEmJmEuaXNNYXAscz1vP2kobyk6cjt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDIpLGk9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiYiW29iamVjdCBNYXBdIj09cih0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1NyksaT1uKDYyKSxhPW4oODMpLG89YSYmYS5pc1NldCxzPW8/aShvKTpyO3QuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MiksaT1uKDIxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJiJbb2JqZWN0IFNldF0iPT1yKHQpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixyKXtmb3IodmFyIGk9LTEsYT1PYmplY3QoZSksbz1yKGUpLHM9by5sZW5ndGg7cy0tOyl7dmFyIGM9b1t0P3M6KytpXTtpZighMT09PW4oYVtjXSxjLGEpKWJyZWFrfXJldHVybiBlfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24obixpKXtpZihudWxsPT1uKXJldHVybiBuO2lmKCFyKG4pKXJldHVybiB0KG4saSk7Zm9yKHZhciBhPW4ubGVuZ3RoLG89ZT9hOi0xLHM9T2JqZWN0KG4pOyhlP28tLTorK288YSkmJiExIT09aShzW29dLG8scyk7KTtyZXR1cm4gbn19fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHIodCwoZnVuY3Rpb24odCxyLGkpe2UodCxyLGkpJiZuLnB1c2godCl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDI2MiksaT1uKDI3MCksYT1uKDEzNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWkodCk7cmV0dXJuIDE9PWUubGVuZ3RoJiZlWzBdWzJdP2EoZVswXVswXSxlWzBdWzFdKTpmdW5jdGlvbihuKXtyZXR1cm4gbj09PXR8fHIobix0LGUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU0KSxpPW4oMTI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4sYSl7dmFyIG89bi5sZW5ndGgscz1vLGM9IWE7aWYobnVsbD09dClyZXR1cm4hcztmb3IodD1PYmplY3QodCk7by0tOyl7dmFyIHU9bltvXTtpZihjJiZ1WzJdP3VbMV0hPT10W3VbMF1dOiEodVswXWluIHQpKXJldHVybiExfWZvcig7KytvPHM7KXt2YXIgbD0odT1uW29dKVswXSxoPXRbbF0sZj11WzFdO2lmKGMmJnVbMl0pe2lmKHZvaWQgMD09PWgmJiEobCBpbiB0KSlyZXR1cm4hMX1lbHNle3ZhciBkPW5ldyByO2lmKGEpdmFyIHA9YShoLGYsbCx0LGUsZCk7aWYoISh2b2lkIDA9PT1wP2koZixoLDMsYSxkKTpwKSlyZXR1cm4hMX19cmV0dXJuITB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDEzMCksYT1uKDI2Nyksbz1uKDI2OSkscz1uKDQyKSxjPW4oNSksdT1uKDQxKSxsPW4oNDkpLGg9IltvYmplY3QgT2JqZWN0XSIsZj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbixkLHAseSl7dmFyIGc9Yyh0KSxtPWMoZSksdj1nPyJbb2JqZWN0IEFycmF5XSI6cyh0KSxiPW0/IltvYmplY3QgQXJyYXldIjpzKGUpLHg9KHY9IltvYmplY3QgQXJndW1lbnRzXSI9PXY/aDp2KT09aCxfPShiPSJbb2JqZWN0IEFyZ3VtZW50c10iPT1iP2g6Yik9PWgsaz12PT1iO2lmKGsmJnUodCkpe2lmKCF1KGUpKXJldHVybiExO2c9ITAseD0hMX1pZihrJiYheClyZXR1cm4geXx8KHk9bmV3IHIpLGd8fGwodCk/aSh0LGUsbixkLHAseSk6YSh0LGUsdixuLGQscCx5KTtpZighKDEmbikpe3ZhciB3PXgmJmYuY2FsbCh0LCJfX3dyYXBwZWRfXyIpLFQ9XyYmZi5jYWxsKGUsIl9fd3JhcHBlZF9fIik7aWYod3x8VCl7dmFyIEU9dz90LnZhbHVlKCk6dCxDPVQ/ZS52YWx1ZSgpOmU7cmV0dXJuIHl8fCh5PW5ldyByKSxwKEUsQyxuLGQseSl9fXJldHVybiEhayYmKHl8fCh5PW5ldyByKSxvKHQsZSxuLGQscCx5KSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQodCwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIpLHRoaXN9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0tMSxyPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK248cjspaWYoZSh0W25dLG4sdCkpcmV0dXJuITA7cmV0dXJuITF9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0MCksaT1uKDEyMiksYT1uKDM4KSxvPW4oMTMwKSxzPW4oMjY4KSxjPW4oOTIpLHU9cj9yLnByb3RvdHlwZTp2b2lkIDAsbD11P3UudmFsdWVPZjp2b2lkIDA7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsdSxoLGYpe3N3aXRjaChuKXtjYXNlIltvYmplY3QgRGF0YVZpZXddIjppZih0LmJ5dGVMZW5ndGghPWUuYnl0ZUxlbmd0aHx8dC5ieXRlT2Zmc2V0IT1lLmJ5dGVPZmZzZXQpcmV0dXJuITE7dD10LmJ1ZmZlcixlPWUuYnVmZmVyO2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiEodC5ieXRlTGVuZ3RoIT1lLmJ5dGVMZW5ndGh8fCFoKG5ldyBpKHQpLG5ldyBpKGUpKSk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOmNhc2UiW29iamVjdCBOdW1iZXJdIjpyZXR1cm4gYSgrdCwrZSk7Y2FzZSJbb2JqZWN0IEVycm9yXSI6cmV0dXJuIHQubmFtZT09ZS5uYW1lJiZ0Lm1lc3NhZ2U9PWUubWVzc2FnZTtjYXNlIltvYmplY3QgUmVnRXhwXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiB0PT1lKyIiO2Nhc2UiW29iamVjdCBNYXBdIjp2YXIgZD1zO2Nhc2UiW29iamVjdCBTZXRdIjp2YXIgcD0xJnI7aWYoZHx8KGQ9YyksdC5zaXplIT1lLnNpemUmJiFwKXJldHVybiExO3ZhciB5PWYuZ2V0KHQpO2lmKHkpcmV0dXJuIHk9PWU7cnw9MixmLnNldCh0LGUpO3ZhciBnPW8oZCh0KSxkKGUpLHIsdSxoLGYpO3JldHVybiBmLmRlbGV0ZSh0KSxnO2Nhc2UiW29iamVjdCBTeW1ib2xdIjppZihsKXJldHVybiBsLmNhbGwodCk9PWwuY2FsbChlKX1yZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPS0xLG49QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe25bKytlXT1bcix0XX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTE5KSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGEsbyxzKXt2YXIgYz0xJm4sdT1yKHQpLGw9dS5sZW5ndGg7aWYobCE9cihlKS5sZW5ndGgmJiFjKXJldHVybiExO2Zvcih2YXIgaD1sO2gtLTspe3ZhciBmPXVbaF07aWYoIShjP2YgaW4gZTppLmNhbGwoZSxmKSkpcmV0dXJuITF9dmFyIGQ9cy5nZXQodCkscD1zLmdldChlKTtpZihkJiZwKXJldHVybiBkPT1lJiZwPT10O3ZhciB5PSEwO3Muc2V0KHQsZSkscy5zZXQoZSx0KTtmb3IodmFyIGc9YzsrK2g8bDspe3ZhciBtPXRbZj11W2hdXSx2PWVbZl07aWYoYSl2YXIgYj1jP2EodixtLGYsZSx0LHMpOmEobSx2LGYsdCxlLHMpO2lmKCEodm9pZCAwPT09Yj9tPT09dnx8byhtLHYsbixhLHMpOmIpKXt5PSExO2JyZWFrfWd8fChnPSJjb25zdHJ1Y3RvciI9PWYpfWlmKHkmJiFnKXt2YXIgeD10LmNvbnN0cnVjdG9yLF89ZS5jb25zdHJ1Y3Rvcjt4PT1ffHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiB4JiZ4IGluc3RhbmNlb2YgeCYmImZ1bmN0aW9uIj09dHlwZW9mIF8mJl8gaW5zdGFuY2VvZiBffHwoeT0hMSl9cmV0dXJuIHMuZGVsZXRlKHQpLHMuZGVsZXRlKGUpLHl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMzMpLGk9bigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1pKHQpLG49ZS5sZW5ndGg7bi0tOyl7dmFyIGE9ZVtuXSxvPXRbYV07ZVtuXT1bYSxvLHIobyldfXJldHVybiBlfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTI5KSxpPW4oMjcyKSxhPW4oMTM2KSxvPW4oOTMpLHM9bigxMzMpLGM9bigxMzQpLHU9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCkmJnMoZSk/Yyh1KHQpLGUpOmZ1bmN0aW9uKG4pe3ZhciBvPWkobix0KTtyZXR1cm4gdm9pZCAwPT09byYmbz09PWU/YShuLHQpOnIoZSxvLDMpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPW51bGw9PXQ/dm9pZCAwOnIodCxlKTtyZXR1cm4gdm9pZCAwPT09aT9uOml9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzQpLGk9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csYT0vXFwoXFwpPy9nLG89cigoZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIDQ2PT09dC5jaGFyQ29kZUF0KDApJiZlLnB1c2goIiIpLHQucmVwbGFjZShpLChmdW5jdGlvbih0LG4scixpKXtlLnB1c2gocj9pLnJlcGxhY2UoYSwiJDEiKTpufHx0KX0pKSxlfSkpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1yKHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1uLnNpemUmJm4uY2xlYXIoKSx0fSkpLG49ZS5jYWNoZTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDgwKTtmdW5jdGlvbiBpKHQsZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHR8fG51bGwhPWUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgbj1mdW5jdGlvbigpe3ZhciByPWFyZ3VtZW50cyxpPWU/ZS5hcHBseSh0aGlzLHIpOnJbMF0sYT1uLmNhY2hlO2lmKGEuaGFzKGkpKXJldHVybiBhLmdldChpKTt2YXIgbz10LmFwcGx5KHRoaXMscik7cmV0dXJuIG4uY2FjaGU9YS5zZXQoaSxvKXx8YSxvfTtyZXR1cm4gbi5jYWNoZT1uZXcoaS5DYWNoZXx8ciksbn1pLkNhY2hlPXIsdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQwKSxpPW4oNjgpLGE9big1KSxvPW4oNDMpLHM9cj9yLnByb3RvdHlwZTp2b2lkIDAsYz1zP3MudG9TdHJpbmc6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbiB0KGUpe2lmKCJzdHJpbmciPT10eXBlb2YgZSlyZXR1cm4gZTtpZihhKGUpKXJldHVybiBpKGUsdCkrIiI7aWYobyhlKSlyZXR1cm4gYz9jLmNhbGwoZSk6IiI7dmFyIG49ZSsiIjtyZXR1cm4iMCI9PW4mJjEvZT09LTEvMD8iLTAiOm59fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBudWxsIT10JiZlIGluIE9iamVjdCh0KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzOCksaT1uKDI3OSksYT1uKDkzKSxvPW4oNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9yKG8odCkpOmkodCl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcihlLHQpfX19LGZ1bmN0aW9uKHQsZSl7dmFyIG49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbCE9dCYmbi5jYWxsKHQsZSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NCksaT1uKDQyKSxhPW4oNDgpLG89big1KSxzPW4oMjUpLGM9big0MSksdT1uKDYzKSxsPW4oNDkpLGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYobnVsbD09dClyZXR1cm4hMDtpZihzKHQpJiYobyh0KXx8InN0cmluZyI9PXR5cGVvZiB0fHwiZnVuY3Rpb24iPT10eXBlb2YgdC5zcGxpY2V8fGModCl8fGwodCl8fGEodCkpKXJldHVybiF0Lmxlbmd0aDt2YXIgZT1pKHQpO2lmKCJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZSlyZXR1cm4hdC5zaXplO2lmKHUodCkpcmV0dXJuIXIodCkubGVuZ3RoO2Zvcih2YXIgbiBpbiB0KWlmKGguY2FsbCh0LG4pKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9LTEsYT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHImJmEmJihuPXRbKytpXSk7KytpPGE7KW49ZShuLHRbaV0saSx0KTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxpLGEpe249cj8ocj0hMSx0KTplKG4sdCxpLGEpfSkpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4NCksaT1uKDQyKSxhPW4oMjUpLG89bigyODUpLHM9bigyODYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGEodCkpcmV0dXJuIG8odCk/cyh0KTp0Lmxlbmd0aDt2YXIgZT1pKHQpO3JldHVybiJbb2JqZWN0IE1hcF0iPT1lfHwiW29iamVjdCBTZXRdIj09ZT90LnNpemU6cih0KS5sZW5ndGh9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzNCksaT1uKDUpLGE9bigyMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8IWkodCkmJmEodCkmJiJbb2JqZWN0IFN0cmluZ10iPT1yKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMjg3KSxpPW4oMjg4KSxhPW4oMjg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/YSh0KTpyKHQpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTM4KSgibGVuZ3RoIik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIG49UmVnRXhwKCJbXFx1MjAwZFxcdWQ4MDAtXFx1ZGZmZlxcdTAzMDAtXFx1MDM2ZlxcdWZlMjAtXFx1ZmUyZlxcdTIwZDAtXFx1MjBmZlxcdWZlMGVcXHVmZTBmXSIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi50ZXN0KHQpfX0sZnVuY3Rpb24odCxlKXt2YXIgbj0iW1xcdWQ4MDAtXFx1ZGZmZl0iLHI9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixpPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGE9IlteXFx1ZDgwMC1cXHVkZmZmXSIsbz0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIscz0iW1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXSIsYz0iKD86IityKyJ8IitpKyIpIisiPyIsdT0iW1xcdWZlMGVcXHVmZTBmXT8iK2MrKCIoPzpcXHUyMDBkKD86IitbYSxvLHNdLmpvaW4oInwiKSsiKVtcXHVmZTBlXFx1ZmUwZl0/IitjKyIpKiIpLGw9Iig/OiIrW2ErcisiPyIscixvLHMsbl0uam9pbigifCIpKyIpIixoPVJlZ0V4cChpKyIoPz0iK2krIil8IitsK3UsImciKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWgubGFzdEluZGV4PTA7aC50ZXN0KHQpOykrK2U7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big4MSksaT1uKDEyNSksYT1uKDkwKSxvPW4oMjYpLHM9big2NCksYz1uKDUpLHU9big0MSksbD1uKDM5KSxoPW4oMTQpLGY9big0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgZD1jKHQpLHA9ZHx8dSh0KXx8Zih0KTtpZihlPW8oZSw0KSxudWxsPT1uKXt2YXIgeT10JiZ0LmNvbnN0cnVjdG9yO249cD9kP25ldyB5OltdOmgodCkmJmwoeSk/aShzKHQpKTp7fX1yZXR1cm4ocD9yOmEpKHQsKGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gZShuLHQscixpKX0pKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oOTUpLGk9big2OSksYT1uKDI5Niksbz1uKDE0Nikscz1pKChmdW5jdGlvbih0KXtyZXR1cm4gYShyKHQsMSxvLCEwKSl9KSk7dC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQwKSxpPW4oNDgpLGE9big1KSxvPXI/ci5pc0NvbmNhdFNwcmVhZGFibGU6dm9pZCAwO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYSh0KXx8aSh0KXx8ISEobyYmdCYmdFtvXSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHQuY2FsbChlKTtjYXNlIDE6cmV0dXJuIHQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gdC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHQuY2FsbChlLG5bMF0sblsxXSxuWzJdKX1yZXR1cm4gdC5hcHBseShlLG4pfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oODgpLGk9bigxMTEpLGE9bigzNiksbz1pP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGkodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpyKGUpLHdyaXRhYmxlOiEwfSl9OmE7dC5leHBvcnRzPW99LGZ1bmN0aW9uKHQsZSl7dmFyIG49RGF0ZS5ub3c7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPW4oKSxhPTE2LShpLXIpO2lmKHI9aSxhPjApe2lmKCsrZT49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSBlPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMxKSxpPW4oMjk3KSxhPW4oMzAxKSxvPW4oMTMyKSxzPW4oMzAyKSxjPW4oOTIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHU9LTEsbD1pLGg9dC5sZW5ndGgsZj0hMCxkPVtdLHA9ZDtpZihuKWY9ITEsbD1hO2Vsc2UgaWYoaD49MjAwKXt2YXIgeT1lP251bGw6cyh0KTtpZih5KXJldHVybiBjKHkpO2Y9ITEsbD1vLHA9bmV3IHJ9ZWxzZSBwPWU/W106ZDt0OmZvcig7Kyt1PGg7KXt2YXIgZz10W3VdLG09ZT9lKGcpOmc7aWYoZz1ufHwwIT09Zz9nOjAsZiYmbT09bSl7Zm9yKHZhciB2PXAubGVuZ3RoO3YtLTspaWYocFt2XT09PW0pY29udGludWUgdDtlJiZwLnB1c2gobSksZC5wdXNoKGcpfWVsc2UgbChwLG0sbil8fChwIT09ZCYmcC5wdXNoKG0pLGQucHVzaChnKSl9cmV0dXJuIGR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyOTgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiEhKG51bGw9PXQ/MDp0Lmxlbmd0aCkmJnIodCxlLDApPi0xfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTQ1KSxpPW4oMjk5KSxhPW4oMzAwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlPT1lP2EodCxlLG4pOnIodCxpLG4pfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciByPW4tMSxpPXQubGVuZ3RoOysrcjxpOylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT1udWxsPT10PzA6dC5sZW5ndGg7KytyPGk7KWlmKG4oZSx0W3JdKSlyZXR1cm4hMDtyZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEyMSksaT1uKDMwMyksYT1uKDkyKSxvPXImJjEvYShuZXcgcihbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyByKHQpfTppO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcihlLChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIyLjEuOCJ9LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKSxpPW4oNzgpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIHIubWFwKHQubm9kZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpLGk9dC5wYXJlbnQoZSksYT17djplfTtyZXR1cm4gci5pc1VuZGVmaW5lZChuKXx8KGEudmFsdWU9biksci5pc1VuZGVmaW5lZChpKXx8KGEucGFyZW50PWkpLGF9KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gci5tYXAodC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSksaT17djplLnYsdzplLnd9O3JldHVybiByLmlzVW5kZWZpbmVkKGUubmFtZSl8fChpLm5hbWU9ZS5uYW1lKSxyLmlzVW5kZWZpbmVkKG4pfHwoaS52YWx1ZT1uKSxpfSkpfXQuZXhwb3J0cz17d3JpdGU6ZnVuY3Rpb24odCl7dmFyIGU9e29wdGlvbnM6e2RpcmVjdGVkOnQuaXNEaXJlY3RlZCgpLG11bHRpZ3JhcGg6dC5pc011bHRpZ3JhcGgoKSxjb21wb3VuZDp0LmlzQ29tcG91bmQoKX0sbm9kZXM6YSh0KSxlZGdlczpvKHQpfTtyLmlzVW5kZWZpbmVkKHQuZ3JhcGgoKSl8fChlLnZhbHVlPXIuY2xvbmUodC5ncmFwaCgpKSk7cmV0dXJuIGV9LHJlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGkodC5vcHRpb25zKS5zZXRHcmFwaCh0LnZhbHVlKTtyZXR1cm4gci5lYWNoKHQubm9kZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0Tm9kZSh0LnYsdC52YWx1ZSksdC5wYXJlbnQmJmUuc2V0UGFyZW50KHQudix0LnBhcmVudCl9KSksci5lYWNoKHQuZWRnZXMsKGZ1bmN0aW9uKHQpe2Uuc2V0RWRnZSh7djp0LnYsdzp0LncsbmFtZTp0Lm5hbWV9LHQudmFsdWUpfSkpLGV9fX0sZnVuY3Rpb24odCxlLG4pe3QuZXhwb3J0cz17Y29tcG9uZW50czpuKDMwOCksZGlqa3N0cmE6bigxNDgpLGRpamtzdHJhQWxsOm4oMzA5KSxmaW5kQ3ljbGVzOm4oMzEwKSxmbG95ZFdhcnNoYWxsOm4oMzExKSxpc0FjeWNsaWM6bigzMTIpLHBvc3RvcmRlcjpuKDMxMykscHJlb3JkZXI6bigzMTQpLHByaW06bigzMTUpLHRhcmphbjpuKDE1MCksdG9wc29ydDpuKDE1MSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLG49e30saT1bXTtmdW5jdGlvbiBhKGkpe3IuaGFzKG4saSl8fChuW2ldPSEwLGUucHVzaChpKSxyLmVhY2godC5zdWNjZXNzb3JzKGkpLGEpLHIuZWFjaCh0LnByZWRlY2Vzc29ycyhpKSxhKSl9cmV0dXJuIHIuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe2U9W10sYSh0KSxlLmxlbmd0aCYmaS5wdXNoKGUpfSkpLGl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNDgpLGk9bigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gaS50cmFuc2Zvcm0odC5ub2RlcygpLChmdW5jdGlvbihpLGEpe2lbYV09cih0LGEsZSxuKX0pLHt9KX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKSxpPW4oMTUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZmlsdGVyKGkodCksKGZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aD4xfHwxPT09ZS5sZW5ndGgmJnQuaGFzRWRnZShlWzBdLGVbMF0pfSkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17fSxpPXQubm9kZXMoKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3RdPXt9LHJbdF1bdF09e2Rpc3RhbmNlOjB9LGkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCE9PWUmJihyW3RdW2VdPXtkaXN0YW5jZTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9KX0pKSxuKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW4udj09PXQ/bi53Om4udixhPWUobik7clt0XVtpXT17ZGlzdGFuY2U6YSxwcmVkZWNlc3Nvcjp0fX0pKX0pKSxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXJbdF07aS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgYT1yW25dO2kuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIHI9YVt0XSxpPWVbbl0sbz1hW25dLHM9ci5kaXN0YW5jZStpLmRpc3RhbmNlO3M8by5kaXN0YW5jZSYmKG8uZGlzdGFuY2U9cyxvLnByZWRlY2Vzc29yPWkucHJlZGVjZXNzb3IpfSkpfSkpfSkpLHJ9KHQsZXx8aSxufHxmdW5jdGlvbihlKXtyZXR1cm4gdC5vdXRFZGdlcyhlKX0pfTt2YXIgaT1yLmNvbnN0YW50KDEpfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNTEpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cih0KX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2Ygci5DeWNsZUV4Y2VwdGlvbilyZXR1cm4hMTt0aHJvdyB0fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsInBvc3QiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCxlLCJwcmUiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDEzKSxpPW4oNzgpLGE9bigxNDkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuLG89bmV3IGkscz17fSxjPW5ldyBhO2Z1bmN0aW9uIHUodCl7dmFyIHI9dC52PT09bj90Lnc6dC52LGk9Yy5wcmlvcml0eShyKTtpZih2b2lkIDAhPT1pKXt2YXIgYT1lKHQpO2E8aSYmKHNbcl09bixjLmRlY3JlYXNlKHIsYSkpfX1pZigwPT09dC5ub2RlQ291bnQoKSlyZXR1cm4gbztyLmVhY2godC5ub2RlcygpLChmdW5jdGlvbih0KXtjLmFkZCh0LE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksby5zZXROb2RlKHQpfSkpLGMuZGVjcmVhc2UodC5ub2RlcygpWzBdLDApO3ZhciBsPSExO2Zvcig7Yy5zaXplKCk+MDspe2lmKG49Yy5yZW1vdmVNaW4oKSxyLmhhcyhzLG4pKW8uc2V0RWRnZShuLHNbbl0pO2Vsc2V7aWYobCl0aHJvdyBuZXcgRXJyb3IoIklucHV0IGdyYXBoIGlzIG5vdCBjb25uZWN0ZWQ6ICIrdCk7bD0hMH10Lm5vZGVFZGdlcyhuKS5mb3JFYWNoKHUpfXJldHVybiBvfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByO3RyeXtyPW4oMyl9Y2F0Y2godCl7fXJ8fChyPXdpbmRvdy5ncmFwaGxpYiksdC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KSxpPW4oMzUyKSxhPW4oMzU1KSxvPW4oMzU2KSxzPW4oOSkubm9ybWFsaXplUmFua3MsYz1uKDM1OCksdT1uKDkpLnJlbW92ZUVtcHR5UmFua3MsbD1uKDM1OSksaD1uKDM2MCksZj1uKDM2MSksZD1uKDM2MikscD1uKDM3MSkseT1uKDkpLGc9bigyMCkuR3JhcGg7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZSYmZS5kZWJ1Z1RpbWluZz95LnRpbWU6eS5ub3RpbWU7bigibGF5b3V0IiwoZnVuY3Rpb24oKXt2YXIgZT1uKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1uZXcgZyh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLG49Qyh0LmdyYXBoKCkpO3JldHVybiBlLnNldEdyYXBoKHIubWVyZ2Uoe30sdixFKG4sbSksci5waWNrKG4sYikpKSxyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgaT1DKHQubm9kZShuKSk7ZS5zZXROb2RlKG4sci5kZWZhdWx0cyhFKGkseCksXykpLGUuc2V0UGFyZW50KG4sdC5wYXJlbnQobikpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPUModC5lZGdlKG4pKTtlLnNldEVkZ2UobixyLm1lcmdlKHt9LHcsRShpLGspLHIucGljayhpLFQpKSl9KSksZX0odCl9KSk7bigiICBydW5MYXlvdXQiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0LGUpe2UoIiAgICBtYWtlU3BhY2VGb3JFZGdlTGFiZWxzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpO2UucmFua3NlcC89MixyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihuKXt2YXIgcj10LmVkZ2Uobik7ci5taW5sZW4qPTIsImMiIT09ci5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpJiYoIlRCIj09PWUucmFua2Rpcnx8IkJUIj09PWUucmFua2Rpcj9yLndpZHRoKz1yLmxhYmVsb2Zmc2V0OnIuaGVpZ2h0Kz1yLmxhYmVsb2Zmc2V0KX0pKX0odCl9KSksZSgiICAgIHJlbW92ZVNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe2lmKGUudj09PWUudyl7dmFyIG49dC5ub2RlKGUudik7bi5zZWxmRWRnZXN8fChuLnNlbGZFZGdlcz1bXSksbi5zZWxmRWRnZXMucHVzaCh7ZTplLGxhYmVsOnQuZWRnZShlKX0pLHQucmVtb3ZlRWRnZShlKX19KSl9KHQpfSkpLGUoIiAgICBhY3ljbGljIiwoZnVuY3Rpb24oKXtpLnJ1bih0KX0pKSxlKCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsKGZ1bmN0aW9uKCl7bC5ydW4odCl9KSksZSgiICAgIHJhbmsiLChmdW5jdGlvbigpe28oeS5hc05vbkNvbXBvdW5kR3JhcGgodCkpfSkpLGUoIiAgICBpbmplY3RFZGdlTGFiZWxQcm94aWVzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKG4ud2lkdGgmJm4uaGVpZ2h0KXt2YXIgcj10Lm5vZGUoZS52KSxpPXtyYW5rOih0Lm5vZGUoZS53KS5yYW5rLXIucmFuaykvMityLnJhbmssZTplfTt5LmFkZER1bW15Tm9kZSh0LCJlZGdlLXByb3h5IixpLCJfZXAiKX19KSl9KHQpfSkpLGUoIiAgICByZW1vdmVFbXB0eVJhbmtzIiwoZnVuY3Rpb24oKXt1KHQpfSkpLGUoIiAgICBuZXN0aW5nR3JhcGguY2xlYW51cCIsKGZ1bmN0aW9uKCl7bC5jbGVhbnVwKHQpfSkpLGUoIiAgICBub3JtYWxpemVSYW5rcyIsKGZ1bmN0aW9uKCl7cyh0KX0pKSxlKCIgICAgYXNzaWduUmFua01pbk1heCIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIGk9dC5ub2RlKG4pO2kuYm9yZGVyVG9wJiYoaS5taW5SYW5rPXQubm9kZShpLmJvcmRlclRvcCkucmFuayxpLm1heFJhbms9dC5ub2RlKGkuYm9yZGVyQm90dG9tKS5yYW5rLGU9ci5tYXgoZSxpLm1heFJhbmspKX0pKSx0LmdyYXBoKCkubWF4UmFuaz1lfSh0KX0pKSxlKCIgICAgcmVtb3ZlRWRnZUxhYmVsUHJveGllcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTsiZWRnZS1wcm94eSI9PT1uLmR1bW15JiYodC5lZGdlKG4uZSkubGFiZWxSYW5rPW4ucmFuayx0LnJlbW92ZU5vZGUoZSkpfSkpfSh0KX0pKSxlKCIgICAgbm9ybWFsaXplLnJ1biIsKGZ1bmN0aW9uKCl7YS5ydW4odCl9KSksZSgiICAgIHBhcmVudER1bW15Q2hhaW5zIiwoZnVuY3Rpb24oKXtjKHQpfSkpLGUoIiAgICBhZGRCb3JkZXJTZWdtZW50cyIsKGZ1bmN0aW9uKCl7aCh0KX0pKSxlKCIgICAgb3JkZXIiLChmdW5jdGlvbigpe2QodCl9KSksZSgiICAgIGluc2VydFNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3ZhciBlPXkuYnVpbGRMYXllck1hdHJpeCh0KTtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIG49MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT10Lm5vZGUoZSk7YS5vcmRlcj1pK24sci5mb3JFYWNoKGEuc2VsZkVkZ2VzLChmdW5jdGlvbihlKXt5LmFkZER1bW15Tm9kZSh0LCJzZWxmZWRnZSIse3dpZHRoOmUubGFiZWwud2lkdGgsaGVpZ2h0OmUubGFiZWwuaGVpZ2h0LHJhbms6YS5yYW5rLG9yZGVyOmkrICsrbixlOmUuZSxsYWJlbDplLmxhYmVsfSwiX3NlIil9KSksZGVsZXRlIGEuc2VsZkVkZ2VzfSkpfSkpfSh0KX0pKSxlKCIgICAgYWRqdXN0Q29vcmRpbmF0ZVN5c3RlbSIsKGZ1bmN0aW9uKCl7Zi5hZGp1c3QodCl9KSksZSgiICAgIHBvc2l0aW9uIiwoZnVuY3Rpb24oKXtwKHQpfSkpLGUoIiAgICBwb3NpdGlvblNlbGZFZGdlcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtpZigic2VsZmVkZ2UiPT09bi5kdW1teSl7dmFyIHI9dC5ub2RlKG4uZS52KSxpPXIueCtyLndpZHRoLzIsYT1yLnksbz1uLngtaSxzPXIuaGVpZ2h0LzI7dC5zZXRFZGdlKG4uZSxuLmxhYmVsKSx0LnJlbW92ZU5vZGUoZSksbi5sYWJlbC5wb2ludHM9W3t4OmkrMipvLzMseTphLXN9LHt4OmkrNSpvLzYseTphLXN9LHt4Omkrbyx5OmF9LHt4OmkrNSpvLzYseTphK3N9LHt4OmkrMipvLzMseTphK3N9XSxuLmxhYmVsLng9bi54LG4ubGFiZWwueT1uLnl9fSkpfSh0KX0pKSxlKCIgICAgcmVtb3ZlQm9yZGVyTm9kZXMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXtpZih0LmNoaWxkcmVuKGUpLmxlbmd0aCl7dmFyIG49dC5ub2RlKGUpLGk9dC5ub2RlKG4uYm9yZGVyVG9wKSxhPXQubm9kZShuLmJvcmRlckJvdHRvbSksbz10Lm5vZGUoci5sYXN0KG4uYm9yZGVyTGVmdCkpLHM9dC5ub2RlKHIubGFzdChuLmJvcmRlclJpZ2h0KSk7bi53aWR0aD1NYXRoLmFicyhzLngtby54KSxuLmhlaWdodD1NYXRoLmFicyhhLnktaS55KSxuLng9by54K24ud2lkdGgvMixuLnk9aS55K24uaGVpZ2h0LzJ9fSkpLHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpeyJib3JkZXIiPT09dC5ub2RlKGUpLmR1bW15JiZ0LnJlbW92ZU5vZGUoZSl9KSl9KHQpfSkpLGUoIiAgICBub3JtYWxpemUudW5kbyIsKGZ1bmN0aW9uKCl7YS51bmRvKHQpfSkpLGUoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtpZihyLmhhcyhuLCJ4Iikpc3dpdGNoKCJsIiE9PW4ubGFiZWxwb3MmJiJyIiE9PW4ubGFiZWxwb3N8fChuLndpZHRoLT1uLmxhYmVsb2Zmc2V0KSxuLmxhYmVscG9zKXtjYXNlImwiOm4ueC09bi53aWR0aC8yK24ubGFiZWxvZmZzZXQ7YnJlYWs7Y2FzZSJyIjpuLngrPW4ud2lkdGgvMituLmxhYmVsb2Zmc2V0fX0pKX0odCl9KSksZSgiICAgIHVuZG9Db29yZGluYXRlU3lzdGVtIiwoZnVuY3Rpb24oKXtmLnVuZG8odCl9KSksZSgiICAgIHRyYW5zbGF0ZUdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7dmFyIGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG49MCxpPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxhPTAsbz10LmdyYXBoKCkscz1vLm1hcmdpbnh8fDAsYz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gdSh0KXt2YXIgcj10Lngsbz10Lnkscz10LndpZHRoLGM9dC5oZWlnaHQ7ZT1NYXRoLm1pbihlLHItcy8yKSxuPU1hdGgubWF4KG4scitzLzIpLGk9TWF0aC5taW4oaSxvLWMvMiksYT1NYXRoLm1heChhLG8rYy8yKX1yLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihlKXt1KHQubm9kZShlKSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO3IuaGFzKG4sIngiKSYmdShuKX0pKSxlLT1zLGktPWMsci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pO3IueC09ZSxyLnktPWl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24obil7dmFyIGE9dC5lZGdlKG4pO3IuZm9yRWFjaChhLnBvaW50cywoZnVuY3Rpb24odCl7dC54LT1lLHQueS09aX0pKSxyLmhhcyhhLCJ4IikmJihhLngtPWUpLHIuaGFzKGEsInkiKSYmKGEueS09aSl9KSksby53aWR0aD1uLWUrcyxvLmhlaWdodD1hLWkrY30odCl9KSksZSgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG4scixpPXQuZWRnZShlKSxhPXQubm9kZShlLnYpLG89dC5ub2RlKGUudyk7aS5wb2ludHM/KG49aS5wb2ludHNbMF0scj1pLnBvaW50c1tpLnBvaW50cy5sZW5ndGgtMV0pOihpLnBvaW50cz1bXSxuPW8scj1hKSxpLnBvaW50cy51bnNoaWZ0KHkuaW50ZXJzZWN0UmVjdChhLG4pKSxpLnBvaW50cy5wdXNoKHkuaW50ZXJzZWN0UmVjdChvLHIpKX0pKX0odCl9KSksZSgiICAgIHJldmVyc2VQb2ludHMiLChmdW5jdGlvbigpeyFmdW5jdGlvbih0KXtyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7bi5yZXZlcnNlZCYmbi5wb2ludHMucmV2ZXJzZSgpfSkpfSh0KX0pKSxlKCIgICAgYWN5Y2xpYy51bmRvIiwoZnVuY3Rpb24oKXtpLnVuZG8odCl9KSl9KGUsbil9KSksbigiICB1cGRhdGVJbnB1dEdyYXBoIiwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihuKXt2YXIgcj10Lm5vZGUobiksaT1lLm5vZGUobik7ciYmKHIueD1pLngsci55PWkueSxlLmNoaWxkcmVuKG4pLmxlbmd0aCYmKHIud2lkdGg9aS53aWR0aCxyLmhlaWdodD1pLmhlaWdodCkpfSkpLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKG4pe3ZhciBpPXQuZWRnZShuKSxhPWUuZWRnZShuKTtpLnBvaW50cz1hLnBvaW50cyxyLmhhcyhhLCJ4IikmJihpLng9YS54LGkueT1hLnkpfSkpLHQuZ3JhcGgoKS53aWR0aD1lLmdyYXBoKCkud2lkdGgsdC5ncmFwaCgpLmhlaWdodD1lLmdyYXBoKCkuaGVpZ2h0fSh0LGUpfSkpfSkpfTt2YXIgbT1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sdj17cmFua3NlcDo1MCxlZGdlc2VwOjIwLG5vZGVzZXA6NTAscmFua2RpcjoidGIifSxiPVsiYWN5Y2xpY2VyIiwicmFua2VyIiwicmFua2RpciIsImFsaWduIl0seD1bIndpZHRoIiwiaGVpZ2h0Il0sXz17d2lkdGg6MCxoZWlnaHQ6MH0saz1bIm1pbmxlbiIsIndlaWdodCIsIndpZHRoIiwiaGVpZ2h0IiwibGFiZWxvZmZzZXQiXSx3PXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sVD1bImxhYmVscG9zIl07ZnVuY3Rpb24gRSh0LGUpe3JldHVybiByLm1hcFZhbHVlcyhyLnBpY2sodCxlKSxOdW1iZXIpfWZ1bmN0aW9uIEModCl7dmFyIGU9e307cmV0dXJuIHIuZm9yRWFjaCh0LChmdW5jdGlvbih0LG4pe2Vbbi50b0xvd2VyQ2FzZSgpXT10fSkpLGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxMDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LDUpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzIwKShuKDMyMSkpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigyNiksaT1uKDI1KSxhPW4oMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLG8pe3ZhciBzPU9iamVjdChlKTtpZighaShlKSl7dmFyIGM9cihuLDMpO2U9YShlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiBjKHNbdF0sdCxzKX19dmFyIHU9dChlLG4sbyk7cmV0dXJuIHU+LTE/c1tjP2VbdV06dV06dm9pZCAwfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE0NSksaT1uKDI2KSxhPW4oMzIyKSxvPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIHM9bnVsbD09dD8wOnQubGVuZ3RoO2lmKCFzKXJldHVybi0xO3ZhciBjPW51bGw9PW4/MDphKG4pO3JldHVybiBjPDAmJihjPW8ocytjLDApKSxyKHQsaShlLDMpLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9cih0KSxuPWUlMTtyZXR1cm4gZT09ZT9uP2UtbjplOjB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigzMjQpLGk9bigxNCksYT1uKDQzKSxvPS9eWy0rXTB4WzAtOWEtZl0rJC9pLHM9L14wYlswMV0rJC9pLGM9L14wb1swLTddKyQvaSx1PXBhcnNlSW50O3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoYSh0KSlyZXR1cm4gTmFOO2lmKGkodCkpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PWkoZSk/ZSsiIjplfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PXIodCk7dmFyIG49cy50ZXN0KHQpO3JldHVybiBufHxjLnRlc3QodCk/dSh0LnNsaWNlKDIpLG4/Mjo4KTpvLnRlc3QodCk/TmFOOit0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzI1KSxpPS9eXHMrLzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5zbGljZSgwLHIodCkrMSkucmVwbGFjZShpLCIiKTp0fX0sZnVuY3Rpb24odCxlKXt2YXIgbj0vXHMvO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tJiZuLnRlc3QodC5jaGFyQXQoZSkpOyk7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5MSksaT1uKDEyNyksYT1uKDM1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD90OnIodCxpKGUpLGEpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bnVsbD09dD8wOnQubGVuZ3RoO3JldHVybiBlP3RbZS0xXTp2b2lkIDB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big2MCksaT1uKDkwKSxhPW4oMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBlPWEoZSwzKSxpKHQsKGZ1bmN0aW9uKHQsaSxhKXtyKG4saSxlKHQsaSxhKSl9KSksbn19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMzMwKSxhPW4oMzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmdC5sZW5ndGg/cih0LGEsaSk6dm9pZCAwfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5lfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzMyKSxpPW4oMzM1KSgoZnVuY3Rpb24odCxlLG4pe3IodCxlLG4pfSkpO3QuZXhwb3J0cz1pfSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big1NCksaT1uKDE1NyksYT1uKDkxKSxvPW4oMzMzKSxzPW4oMTQpLGM9bigzNSksdT1uKDE1OSk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLGwsaCxmKXtlIT09biYmYShuLChmdW5jdGlvbihhLGMpe2lmKGZ8fChmPW5ldyByKSxzKGEpKW8oZSxuLGMsbCx0LGgsZik7ZWxzZXt2YXIgZD1oP2godShlLGMpLGEsYysiIixlLG4sZik6dm9pZCAwO3ZvaWQgMD09PWQmJihkPWEpLGkoZSxjLGQpfX0pLGMpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU3KSxpPW4oMTE0KSxhPW4oMTIzKSxvPW4oMTE1KSxzPW4oMTI0KSxjPW4oNDgpLHU9big1KSxsPW4oMTQ2KSxoPW4oNDEpLGY9bigzOSksZD1uKDE0KSxwPW4oMTU4KSx5PW4oNDkpLGc9bigxNTkpLG09bigzMzQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbix2LGIseCxfKXt2YXIgaz1nKHQsbiksdz1nKGUsbiksVD1fLmdldCh3KTtpZihUKXIodCxuLFQpO2Vsc2V7dmFyIEU9eD94KGssdyxuKyIiLHQsZSxfKTp2b2lkIDAsQz12b2lkIDA9PT1FO2lmKEMpe3ZhciBTPXUodyksQT0hUyYmaCh3KSxNPSFTJiYhQSYmeSh3KTtFPXcsU3x8QXx8TT91KGspP0U9azpsKGspP0U9byhrKTpBPyhDPSExLEU9aSh3LCEwKSk6TT8oQz0hMSxFPWEodywhMCkpOkU9W106cCh3KXx8Yyh3KT8oRT1rLGMoayk/RT1tKGspOmQoaykmJiFmKGspfHwoRT1zKHcpKSk6Qz0hMX1DJiYoXy5zZXQodyxFKSxiKEUsdyx2LHgsXyksXy5kZWxldGUodykpLHIodCxuLEUpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ3KSxpPW4oMzUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gcih0LGkodCkpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjkpLGk9big3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKChmdW5jdGlvbihlLG4pe3ZhciByPS0xLGE9bi5sZW5ndGgsbz1hPjE/blthLTFdOnZvaWQgMCxzPWE+Mj9uWzJdOnZvaWQgMDtmb3Iobz10Lmxlbmd0aD4zJiYiZnVuY3Rpb24iPT10eXBlb2Ygbz8oYS0tLG8pOnZvaWQgMCxzJiZpKG5bMF0sblsxXSxzKSYmKG89YTwzP3ZvaWQgMDpvLGE9MSksZT1PYmplY3QoZSk7KytyPGE7KXt2YXIgYz1uW3JdO2MmJnQoZSxjLHIsbyl9cmV0dXJuIGV9KSl9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NiksaT1uKDE2MCksYT1uKDM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoP3IodCxhLGkpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDk2KSxpPW4oMjYpLGE9bigxNjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0JiZ0Lmxlbmd0aD9yKHQsaShlLDIpLGEpOnZvaWQgMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gci5EYXRlLm5vdygpfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMzQwKSxpPW4oMTM2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcih0LGUsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGkodCxuKX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDY2KSxpPW4oMzQxKSxhPW4oNjcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7Zm9yKHZhciBvPS0xLHM9ZS5sZW5ndGgsYz17fTsrK288czspe3ZhciB1PWVbb10sbD1yKHQsdSk7bihsLHUpJiZpKGMsYSh1LHQpLGwpfXJldHVybiBjfX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNTkpLGk9big2NyksYT1uKDYxKSxvPW4oMTQpLHM9big1MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuLGMpe2lmKCFvKHQpKXJldHVybiB0O2Zvcih2YXIgdT0tMSxsPShlPWkoZSx0KSkubGVuZ3RoLGg9bC0xLGY9dDtudWxsIT1mJiYrK3U8bDspe3ZhciBkPXMoZVt1XSkscD1uO2lmKCJfX3Byb3RvX18iPT09ZHx8ImNvbnN0cnVjdG9yIj09PWR8fCJwcm90b3R5cGUiPT09ZClyZXR1cm4gdDtpZih1IT1oKXt2YXIgeT1mW2RdO3ZvaWQgMD09PShwPWM/Yyh5LGQsZik6dm9pZCAwKSYmKHA9byh5KT95OmEoZVt1KzFdKT9bXTp7fSl9cihmLGQscCksZj1mW2RdfXJldHVybiB0fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTU2KSxpPW4oMTQzKSxhPW4oMTQ0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEoaSh0LHZvaWQgMCxyKSx0KyIiKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0NCksaT1uKDcwKSxhPW4oMTU1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUsbixvKXtyZXR1cm4gbyYmIm51bWJlciIhPXR5cGVvZiBvJiZpKGUsbixvKSYmKG49bz12b2lkIDApLGU9YShlKSx2b2lkIDA9PT1uPyhuPWUsZT0wKTpuPWEobiksbz12b2lkIDA9PT1vP2U8bj8xOi0xOmEobykscihlLG4sbyx0KX19fSxmdW5jdGlvbih0LGUpe3ZhciBuPU1hdGguY2VpbCxyPU1hdGgubWF4O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsaSxhKXtmb3IodmFyIG89LTEscz1yKG4oKGUtdCkvKGl8fDEpKSwwKSxjPUFycmF5KHMpO3MtLTspY1thP3M6KytvXT10LHQrPWk7cmV0dXJuIGN9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big5NSksaT1uKDM0NiksYT1uKDY5KSxvPW4oNzApLHM9YSgoZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybltdO3ZhciBuPWUubGVuZ3RoO3JldHVybiBuPjEmJm8odCxlWzBdLGVbMV0pP2U9W106bj4yJiZvKGVbMF0sZVsxXSxlWzJdKSYmKGU9W2VbMF1dKSxpKHQscihlLDEpLFtdKX0pKTt0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNjgpLGk9big2NiksYT1uKDI2KSxvPW4oMTQxKSxzPW4oMzQ3KSxjPW4oNjIpLHU9bigzNDgpLGw9bigzNiksaD1uKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7ZT1lLmxlbmd0aD9yKGUsKGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpP2Z1bmN0aW9uKGUpe3JldHVybiBpKGUsMT09PXQubGVuZ3RoP3RbMF06dCl9OnR9KSk6W2xdO3ZhciBmPS0xO2U9cihlLGMoYSkpO3ZhciBkPW8odCwoZnVuY3Rpb24odCxuLGkpe3JldHVybntjcml0ZXJpYTpyKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBlKHQpfSkpLGluZGV4OisrZix2YWx1ZTp0fX0pKTtyZXR1cm4gcyhkLChmdW5jdGlvbih0LGUpe3JldHVybiB1KHQsZSxuKX0pKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5sZW5ndGg7Zm9yKHQuc29ydChlKTtuLS07KXRbbl09dFtuXS52YWx1ZTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDM0OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIGk9LTEsYT10LmNyaXRlcmlhLG89ZS5jcml0ZXJpYSxzPWEubGVuZ3RoLGM9bi5sZW5ndGg7KytpPHM7KXt2YXIgdT1yKGFbaV0sb1tpXSk7aWYodSlyZXR1cm4gaT49Yz91OnUqKCJkZXNjIj09bltpXT8tMToxKX1yZXR1cm4gdC5pbmRleC1lLmluZGV4fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHQhPT1lKXt2YXIgbj12b2lkIDAhPT10LGk9bnVsbD09PXQsYT10PT10LG89cih0KSxzPXZvaWQgMCE9PWUsYz1udWxsPT09ZSx1PWU9PWUsbD1yKGUpO2lmKCFjJiYhbCYmIW8mJnQ+ZXx8byYmcyYmdSYmIWMmJiFsfHxpJiZzJiZ1fHwhbiYmdXx8IWEpcmV0dXJuIDE7aWYoIWkmJiFvJiYhbCYmdDxlfHxsJiZuJiZhJiYhaSYmIW98fGMmJm4mJmF8fCFzJiZhfHwhdSlyZXR1cm4tMX1yZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDU5KSxpPW4oMzUxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0fHxbXSxlfHxbXSxyKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtmb3IodmFyIHI9LTEsaT10Lmxlbmd0aCxhPWUubGVuZ3RoLG89e307KytyPGk7KXt2YXIgcz1yPGE/ZVtyXTp2b2lkIDA7bihvLHRbcl0scyl9cmV0dXJuIG99fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDM1Myk7dC5leHBvcnRzPXtydW46ZnVuY3Rpb24odCl7dmFyIGU9ImdyZWVkeSI9PT10LmdyYXBoKCkuYWN5Y2xpY2VyP2kodCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS53ZWlnaHR9fSh0KSk6ZnVuY3Rpb24odCl7dmFyIGU9W10sbj17fSxpPXt9O2Z1bmN0aW9uIGEobyl7ci5oYXMoaSxvKXx8KGlbb109ITAsbltvXT0hMCxyLmZvckVhY2godC5vdXRFZGdlcyhvKSwoZnVuY3Rpb24odCl7ci5oYXMobix0LncpP2UucHVzaCh0KTphKHQudyl9KSksZGVsZXRlIG5bb10pfXJldHVybiByLmZvckVhY2godC5ub2RlcygpLGEpLGV9KHQpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7dC5yZW1vdmVFZGdlKGUpLG4uZm9yd2FyZE5hbWU9ZS5uYW1lLG4ucmV2ZXJzZWQ9ITAsdC5zZXRFZGdlKGUudyxlLnYsbixyLnVuaXF1ZUlkKCJyZXYiKSl9KSl9LHVuZG86ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7dmFyIG49dC5lZGdlKGUpO2lmKG4ucmV2ZXJzZWQpe3QucmVtb3ZlRWRnZShlKTt2YXIgcj1uLmZvcndhcmROYW1lO2RlbGV0ZSBuLnJldmVyc2VkLGRlbGV0ZSBuLmZvcndhcmROYW1lLHQuc2V0RWRnZShlLncsZS52LG4scil9fSkpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDM1NCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5ub2RlQ291bnQoKTw9MSlyZXR1cm5bXTt2YXIgbj1mdW5jdGlvbih0LGUpe3ZhciBuPW5ldyBpLG89MCxzPTA7ci5mb3JFYWNoKHQubm9kZXMoKSwoZnVuY3Rpb24odCl7bi5zZXROb2RlKHQse3Y6dCxpbjowLG91dDowfSl9KSksci5mb3JFYWNoKHQuZWRnZXMoKSwoZnVuY3Rpb24odCl7dmFyIHI9bi5lZGdlKHQudix0LncpfHwwLGk9ZSh0KSxhPXIraTtuLnNldEVkZ2UodC52LHQudyxhKSxzPU1hdGgubWF4KHMsbi5ub2RlKHQudikub3V0Kz1pKSxvPU1hdGgubWF4KG8sbi5ub2RlKHQudykuaW4rPWkpfSkpO3ZhciB1PXIucmFuZ2UocytvKzMpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGF9KSksbD1vKzE7cmV0dXJuIHIuZm9yRWFjaChuLm5vZGVzKCksKGZ1bmN0aW9uKHQpe2ModSxsLG4ubm9kZSh0KSl9KSkse2dyYXBoOm4sYnVja2V0czp1LHplcm9JZHg6bH19KHQsZXx8byksdT1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT1bXSxhPWVbZS5sZW5ndGgtMV0sbz1lWzBdO2Zvcig7dC5ub2RlQ291bnQoKTspe2Zvcig7cj1vLmRlcXVldWUoKTspcyh0LGUsbixyKTtmb3IoO3I9YS5kZXF1ZXVlKCk7KXModCxlLG4scik7aWYodC5ub2RlQ291bnQoKSlmb3IodmFyIGM9ZS5sZW5ndGgtMjtjPjA7LS1jKWlmKHI9ZVtjXS5kZXF1ZXVlKCkpe2k9aS5jb25jYXQocyh0LGUsbixyLCEwKSk7YnJlYWt9fXJldHVybiBpfShuLmdyYXBoLG4uYnVja2V0cyxuLnplcm9JZHgpO3JldHVybiByLmZsYXR0ZW4oci5tYXAodSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQub3V0RWRnZXMoZS52LGUudyl9KSksITApfTt2YXIgbz1yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIHModCxlLG4saSxhKXt2YXIgbz1hP1tdOnZvaWQgMDtyZXR1cm4gci5mb3JFYWNoKHQuaW5FZGdlcyhpLnYpLChmdW5jdGlvbihyKXt2YXIgaT10LmVkZ2Uocikscz10Lm5vZGUoci52KTthJiZvLnB1c2goe3Y6ci52LHc6ci53fSkscy5vdXQtPWksYyhlLG4scyl9KSksci5mb3JFYWNoKHQub3V0RWRnZXMoaS52KSwoZnVuY3Rpb24ocil7dmFyIGk9dC5lZGdlKHIpLGE9ci53LG89dC5ub2RlKGEpO28uaW4tPWksYyhlLG4sbyl9KSksdC5yZW1vdmVOb2RlKGkudiksb31mdW5jdGlvbiBjKHQsZSxuKXtuLm91dD9uLmluP3Rbbi5vdXQtbi5pbitlXS5lbnF1ZXVlKG4pOnRbdC5sZW5ndGgtMV0uZW5xdWV1ZShuKTp0WzBdLmVucXVldWUobil9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4oKXt2YXIgdD17fTt0Ll9uZXh0PXQuX3ByZXY9dCx0aGlzLl9zZW50aW5lbD10fWZ1bmN0aW9uIHIodCl7dC5fcHJldi5fbmV4dD10Ll9uZXh0LHQuX25leHQuX3ByZXY9dC5fcHJldixkZWxldGUgdC5fbmV4dCxkZWxldGUgdC5fcHJldn1mdW5jdGlvbiBpKHQsZSl7aWYoIl9uZXh0IiE9PXQmJiJfcHJldiIhPT10KXJldHVybiBlfXQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZW50aW5lbCxlPXQuX3ByZXY7aWYoZSE9PXQpcmV0dXJuIHIoZSksZX0sbi5wcm90b3R5cGUuZW5xdWV1ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zZW50aW5lbDt0Ll9wcmV2JiZ0Ll9uZXh0JiZyKHQpLHQuX25leHQ9ZS5fbmV4dCxlLl9uZXh0Ll9wcmV2PXQsZS5fbmV4dD10LHQuX3ByZXY9ZX0sbi5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT10aGlzLl9zZW50aW5lbCxuPWUuX3ByZXY7biE9PWU7KXQucHVzaChKU09OLnN0cmluZ2lmeShuLGkpKSxuPW4uX3ByZXY7cmV0dXJuIlsiK3Quam9pbigiLCAiKSsiXSJ9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDkpO3QuZXhwb3J0cz17cnVuOmZ1bmN0aW9uKHQpe3QuZ3JhcGgoKS5kdW1teUNoYWlucz1bXSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXshZnVuY3Rpb24odCxlKXt2YXIgbixyLGEsbz1lLnYscz10Lm5vZGUobykucmFuayxjPWUudyx1PXQubm9kZShjKS5yYW5rLGw9ZS5uYW1lLGg9dC5lZGdlKGUpLGY9aC5sYWJlbFJhbms7aWYodT09PXMrMSlyZXR1cm47Zm9yKHQucmVtb3ZlRWRnZShlKSxhPTAsKytzO3M8dTsrK2EsKytzKWgucG9pbnRzPVtdLHI9e3dpZHRoOjAsaGVpZ2h0OjAsZWRnZUxhYmVsOmgsZWRnZU9iajplLHJhbms6c30sbj1pLmFkZER1bW15Tm9kZSh0LCJlZGdlIixyLCJfZCIpLHM9PT1mJiYoci53aWR0aD1oLndpZHRoLHIuaGVpZ2h0PWguaGVpZ2h0LHIuZHVtbXk9ImVkZ2UtbGFiZWwiLHIubGFiZWxwb3M9aC5sYWJlbHBvcyksdC5zZXRFZGdlKG8sbix7d2VpZ2h0Omgud2VpZ2h0fSxsKSwwPT09YSYmdC5ncmFwaCgpLmR1bW15Q2hhaW5zLnB1c2gobiksbz1uO3Quc2V0RWRnZShvLGMse3dlaWdodDpoLndlaWdodH0sbCl9KHQsZSl9KSl9LHVuZG86ZnVuY3Rpb24odCl7ci5mb3JFYWNoKHQuZ3JhcGgoKS5kdW1teUNoYWlucywoZnVuY3Rpb24oZSl7dmFyIG4scj10Lm5vZGUoZSksaT1yLmVkZ2VMYWJlbDtmb3IodC5zZXRFZGdlKHIuZWRnZU9iaixpKTtyLmR1bW15OyluPXQuc3VjY2Vzc29ycyhlKVswXSx0LnJlbW92ZU5vZGUoZSksaS5wb2ludHMucHVzaCh7eDpyLngseTpyLnl9KSwiZWRnZS1sYWJlbCI9PT1yLmR1bW15JiYoaS54PXIueCxpLnk9ci55LGkud2lkdGg9ci53aWR0aCxpLmhlaWdodD1yLmhlaWdodCksZT1uLHI9dC5ub2RlKGUpfSkpfX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3MSkubG9uZ2VzdFBhdGgsaT1uKDE2NCksYT1uKDM1Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LmdyYXBoKCkucmFua2VyKXtjYXNlIm5ldHdvcmstc2ltcGxleCI6cyh0KTticmVhaztjYXNlInRpZ2h0LXRyZWUiOiFmdW5jdGlvbih0KXtyKHQpLGkodCl9KHQpO2JyZWFrO2Nhc2UibG9uZ2VzdC1wYXRoIjpvKHQpO2JyZWFrO2RlZmF1bHQ6cyh0KX19O3ZhciBvPXI7ZnVuY3Rpb24gcyh0KXthKHQpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigxNjQpLGE9big3MSkuc2xhY2ssbz1uKDcxKS5sb25nZXN0UGF0aCxzPW4oMjApLmFsZy5wcmVvcmRlcixjPW4oMjApLmFsZy5wb3N0b3JkZXIsdT1uKDkpLnNpbXBsaWZ5O2Z1bmN0aW9uIGwodCl7dD11KHQpLG8odCk7dmFyIGUsbj1pKHQpO2ZvcihkKG4pLGgobix0KTtlPXkobik7KW0obix0LGUsZyhuLHQsZSkpfWZ1bmN0aW9uIGgodCxlKXt2YXIgbj1jKHQsdC5ub2RlcygpKTtuPW4uc2xpY2UoMCxuLmxlbmd0aC0xKSxyLmZvckVhY2gobiwoZnVuY3Rpb24obil7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lm5vZGUobikucGFyZW50O3QuZWRnZShuLHIpLmN1dHZhbHVlPWYodCxlLG4pfSh0LGUsbil9KSl9ZnVuY3Rpb24gZih0LGUsbil7dmFyIGk9dC5ub2RlKG4pLnBhcmVudCxhPSEwLG89ZS5lZGdlKG4saSkscz0wO3JldHVybiBvfHwoYT0hMSxvPWUuZWRnZShpLG4pKSxzPW8ud2VpZ2h0LHIuZm9yRWFjaChlLm5vZGVFZGdlcyhuKSwoZnVuY3Rpb24ocil7dmFyIG8sYyx1PXIudj09PW4sbD11P3IudzpyLnY7aWYobCE9PWkpe3ZhciBoPXU9PT1hLGY9ZS5lZGdlKHIpLndlaWdodDtpZihzKz1oP2Y6LWYsbz1uLGM9bCx0Lmhhc0VkZ2UobyxjKSl7dmFyIGQ9dC5lZGdlKG4sbCkuY3V0dmFsdWU7cys9aD8tZDpkfX19KSksc31mdW5jdGlvbiBkKHQsZSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT10Lm5vZGVzKClbMF0pLHAodCx7fSwxLGUpfWZ1bmN0aW9uIHAodCxlLG4saSxhKXt2YXIgbz1uLHM9dC5ub2RlKGkpO3JldHVybiBlW2ldPSEwLHIuZm9yRWFjaCh0Lm5laWdoYm9ycyhpKSwoZnVuY3Rpb24oYSl7ci5oYXMoZSxhKXx8KG49cCh0LGUsbixhLGkpKX0pKSxzLmxvdz1vLHMubGltPW4rKyxhP3MucGFyZW50PWE6ZGVsZXRlIHMucGFyZW50LG59ZnVuY3Rpb24geSh0KXtyZXR1cm4gci5maW5kKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZWRnZShlKS5jdXR2YWx1ZTwwfSkpfWZ1bmN0aW9uIGcodCxlLG4pe3ZhciBpPW4udixvPW4udztlLmhhc0VkZ2UoaSxvKXx8KGk9bi53LG89bi52KTt2YXIgcz10Lm5vZGUoaSksYz10Lm5vZGUobyksdT1zLGw9ITE7cy5saW0+Yy5saW0mJih1PWMsbD0hMCk7dmFyIGg9ci5maWx0ZXIoZS5lZGdlcygpLChmdW5jdGlvbihlKXtyZXR1cm4gbD09PXYodCx0Lm5vZGUoZS52KSx1KSYmbCE9PXYodCx0Lm5vZGUoZS53KSx1KX0pKTtyZXR1cm4gci5taW5CeShoLChmdW5jdGlvbih0KXtyZXR1cm4gYShlLHQpfSkpfWZ1bmN0aW9uIG0odCxlLG4saSl7dmFyIGE9bi52LG89bi53O3QucmVtb3ZlRWRnZShhLG8pLHQuc2V0RWRnZShpLnYsaS53LHt9KSxkKHQpLGgodCxlKSxmdW5jdGlvbih0LGUpe3ZhciBuPXIuZmluZCh0Lm5vZGVzKCksKGZ1bmN0aW9uKHQpe3JldHVybiFlLm5vZGUodCkucGFyZW50fSkpLGk9cyh0LG4pO2k9aS5zbGljZSgxKSxyLmZvckVhY2goaSwoZnVuY3Rpb24obil7dmFyIHI9dC5ub2RlKG4pLnBhcmVudCxpPWUuZWRnZShuLHIpLGE9ITE7aXx8KGk9ZS5lZGdlKHIsbiksYT0hMCksZS5ub2RlKG4pLnJhbms9ZS5ub2RlKHIpLnJhbmsrKGE/aS5taW5sZW46LWkubWlubGVuKX0pKX0odCxlKX1mdW5jdGlvbiB2KHQsZSxuKXtyZXR1cm4gbi5sb3c8PWUubGltJiZlLmxpbTw9bi5saW19dC5leHBvcnRzPWwsbC5pbml0TG93TGltVmFsdWVzPWQsbC5pbml0Q3V0VmFsdWVzPWgsbC5jYWxjQ3V0VmFsdWU9ZixsLmxlYXZlRWRnZT15LGwuZW50ZXJFZGdlPWcsbC5leGNoYW5nZUVkZ2VzPW19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZT17fSxuPTA7ZnVuY3Rpb24gaShhKXt2YXIgbz1uO3IuZm9yRWFjaCh0LmNoaWxkcmVuKGEpLGkpLGVbYV09e2xvdzpvLGxpbTpuKyt9fXJldHVybiByLmZvckVhY2godC5jaGlsZHJlbigpLGkpLGV9KHQpO3IuZm9yRWFjaCh0LmdyYXBoKCkuZHVtbXlDaGFpbnMsKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcj10Lm5vZGUobiksaT1yLmVkZ2VPYmosYT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhLG89W10scz1bXSxjPU1hdGgubWluKGVbbl0ubG93LGVbcl0ubG93KSx1PU1hdGgubWF4KGVbbl0ubGltLGVbcl0ubGltKTtpPW47ZG97aT10LnBhcmVudChpKSxvLnB1c2goaSl9d2hpbGUoaSYmKGVbaV0ubG93PmN8fHU+ZVtpXS5saW0pKTthPWksaT1yO2Zvcig7KGk9dC5wYXJlbnQoaSkpIT09YTspcy5wdXNoKGkpO3JldHVybntwYXRoOm8uY29uY2F0KHMucmV2ZXJzZSgpKSxsY2E6YX19KHQsZSxpLnYsaS53KSxvPWEucGF0aCxzPWEubGNhLGM9MCx1PW9bY10sbD0hMDtuIT09aS53Oyl7aWYocj10Lm5vZGUobiksbCl7Zm9yKDsodT1vW2NdKSE9PXMmJnQubm9kZSh1KS5tYXhSYW5rPHIucmFuazspYysrO3U9PT1zJiYobD0hMSl9aWYoIWwpe2Zvcig7YzxvLmxlbmd0aC0xJiZ0Lm5vZGUodT1vW2MrMV0pLm1pblJhbms8PXIucmFuazspYysrO3U9b1tjXX10LnNldFBhcmVudChuLHUpLG49dC5zdWNjZXNzb3JzKG4pWzBdfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big5KTt0LmV4cG9ydHM9e3J1bjpmdW5jdGlvbih0KXt2YXIgZT1pLmFkZER1bW15Tm9kZSh0LCJyb290Iix7fSwiX3Jvb3QiKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiByLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbihuKXshZnVuY3Rpb24gbihpLGEpe3ZhciBvPXQuY2hpbGRyZW4oaSk7byYmby5sZW5ndGgmJnIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtuKHQsYSsxKX0pKTtlW2ldPWF9KG4sMSl9KSksZX0odCksYT1yLm1heChyLnZhbHVlcyhuKSktMSxvPTIqYSsxO3QuZ3JhcGgoKS5uZXN0aW5nUm9vdD1lLHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3QuZWRnZShlKS5taW5sZW4qPW99KSk7dmFyIHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIucmVkdWNlKHQuZWRnZXMoKSwoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZSt0LmVkZ2Uobikud2VpZ2h0fSksMCl9KHQpKzE7ci5mb3JFYWNoKHQuY2hpbGRyZW4oKSwoZnVuY3Rpb24oYyl7IWZ1bmN0aW9uIHQoZSxuLGEsbyxzLGMsdSl7dmFyIGw9ZS5jaGlsZHJlbih1KTtpZighbC5sZW5ndGgpcmV0dXJuIHZvaWQodSE9PW4mJmUuc2V0RWRnZShuLHUse3dlaWdodDowLG1pbmxlbjphfSkpO3ZhciBoPWkuYWRkQm9yZGVyTm9kZShlLCJfYnQiKSxmPWkuYWRkQm9yZGVyTm9kZShlLCJfYmIiKSxkPWUubm9kZSh1KTtlLnNldFBhcmVudChoLHUpLGQuYm9yZGVyVG9wPWgsZS5zZXRQYXJlbnQoZix1KSxkLmJvcmRlckJvdHRvbT1mLHIuZm9yRWFjaChsLChmdW5jdGlvbihyKXt0KGUsbixhLG8scyxjLHIpO3ZhciBpPWUubm9kZShyKSxsPWkuYm9yZGVyVG9wP2kuYm9yZGVyVG9wOnIsZD1pLmJvcmRlckJvdHRvbT9pLmJvcmRlckJvdHRvbTpyLHA9aS5ib3JkZXJUb3A/bzoyKm8seT1sIT09ZD8xOnMtY1t1XSsxO2Uuc2V0RWRnZShoLGwse3dlaWdodDpwLG1pbmxlbjp5LG5lc3RpbmdFZGdlOiEwfSksZS5zZXRFZGdlKGQsZix7d2VpZ2h0OnAsbWlubGVuOnksbmVzdGluZ0VkZ2U6ITB9KX0pKSxlLnBhcmVudCh1KXx8ZS5zZXRFZGdlKG4saCx7d2VpZ2h0OjAsbWlubGVuOnMrY1t1XX0pfSh0LGUsbyxzLGEsbixjKX0pKSx0LmdyYXBoKCkubm9kZVJhbmtGYWN0b3I9b30sY2xlYW51cDpmdW5jdGlvbih0KXt2YXIgZT10LmdyYXBoKCk7dC5yZW1vdmVOb2RlKGUubmVzdGluZ1Jvb3QpLGRlbGV0ZSBlLm5lc3RpbmdSb290LHIuZm9yRWFjaCh0LmVkZ2VzKCksKGZ1bmN0aW9uKGUpe3QuZWRnZShlKS5uZXN0aW5nRWRnZSYmdC5yZW1vdmVFZGdlKGUpfSkpfX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big5KTtmdW5jdGlvbiBhKHQsZSxuLHIsYSxvKXt2YXIgcz17d2lkdGg6MCxoZWlnaHQ6MCxyYW5rOm8sYm9yZGVyVHlwZTplfSxjPWFbZV1bby0xXSx1PWkuYWRkRHVtbXlOb2RlKHQsImJvcmRlciIscyxuKTthW2VdW29dPXUsdC5zZXRQYXJlbnQodSxyKSxjJiZ0LnNldEVkZ2UoYyx1LHt3ZWlnaHQ6MX0pfXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyLmZvckVhY2godC5jaGlsZHJlbigpLChmdW5jdGlvbiBlKG4pe3ZhciBpPXQuY2hpbGRyZW4obiksbz10Lm5vZGUobik7aWYoaS5sZW5ndGgmJnIuZm9yRWFjaChpLGUpLHIuaGFzKG8sIm1pblJhbmsiKSl7by5ib3JkZXJMZWZ0PVtdLG8uYm9yZGVyUmlnaHQ9W107Zm9yKHZhciBzPW8ubWluUmFuayxjPW8ubWF4UmFuaysxO3M8YzsrK3MpYSh0LCJib3JkZXJMZWZ0IiwiX2JsIixuLG8scyksYSh0LCJib3JkZXJSaWdodCIsIl9iciIsbixvLHMpfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTtmdW5jdGlvbiBpKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe2EodC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXthKHQuZWRnZShlKSl9KSl9ZnVuY3Rpb24gYSh0KXt2YXIgZT10LndpZHRoO3Qud2lkdGg9dC5oZWlnaHQsdC5oZWlnaHQ9ZX1mdW5jdGlvbiBvKHQpe3QueT0tdC55fWZ1bmN0aW9uIHModCl7dmFyIGU9dC54O3QueD10LnksdC55PWV9dC5leHBvcnRzPXthZGp1c3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsibHIiIT09ZSYmInJsIiE9PWV8fGkodCl9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsiYnQiIT09ZSYmInJsIiE9PWV8fGZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe28odC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLG8pLHIuaGFzKG4sInkiKSYmbyhuKX0pKX0odCk7ImxyIiE9PWUmJiJybCIhPT1lfHwoIWZ1bmN0aW9uKHQpe3IuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ModC5ub2RlKGUpKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7ci5mb3JFYWNoKG4ucG9pbnRzLHMpLHIuaGFzKG4sIngiKSYmcyhuKX0pKX0odCksaSh0KSl9fX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigzNjMpLGE9bigzNjQpLG89bigzNjUpLHM9bigzNjkpLGM9bigzNzApLHU9bigyMCkuR3JhcGgsbD1uKDkpO2Z1bmN0aW9uIGgodCxlLG4pe3JldHVybiByLm1hcChlLChmdW5jdGlvbihlKXtyZXR1cm4gcyh0LGUsbil9KSl9ZnVuY3Rpb24gZih0LGUpe3ZhciBuPW5ldyB1O3IuZm9yRWFjaCh0LChmdW5jdGlvbih0KXt2YXIgaT10LmdyYXBoKCkucm9vdCxhPW8odCxpLG4sZSk7ci5mb3JFYWNoKGEudnMsKGZ1bmN0aW9uKGUsbil7dC5ub2RlKGUpLm9yZGVyPW59KSksYyh0LG4sYS52cyl9KSl9ZnVuY3Rpb24gZCh0LGUpe3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUoZSkub3JkZXI9bn0pKX0pKX10LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bC5tYXhSYW5rKHQpLG49aCh0LHIucmFuZ2UoMSxlKzEpLCJpbkVkZ2VzIiksbz1oKHQsci5yYW5nZShlLTEsLTEsLTEpLCJvdXRFZGdlcyIpLHM9aSh0KTtkKHQscyk7Zm9yKHZhciBjLHU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHA9MCx5PTA7eTw0OysrcCwrK3kpe2YocCUyP246byxwJTQ+PTIpLHM9bC5idWlsZExheWVyTWF0cml4KHQpO3ZhciBnPWEodCxzKTtnPHUmJih5PTAsYz1yLmNsb25lRGVlcChzKSx1PWcpfWQodCxjKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9e30sbj1yLmZpbHRlcih0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3JldHVybiF0LmNoaWxkcmVuKGUpLmxlbmd0aH0pKSxpPXIubWF4KHIubWFwKG4sKGZ1bmN0aW9uKGUpe3JldHVybiB0Lm5vZGUoZSkucmFua30pKSksYT1yLm1hcChyLnJhbmdlKGkrMSksKGZ1bmN0aW9uKCl7cmV0dXJuW119KSk7dmFyIG89ci5zb3J0QnkobiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5yYW5rfSkpO3JldHVybiByLmZvckVhY2gobywoZnVuY3Rpb24gbihpKXtpZihyLmhhcyhlLGkpKXJldHVybjtlW2ldPSEwO3ZhciBvPXQubm9kZShpKTthW28ucmFua10ucHVzaChpKSxyLmZvckVhY2godC5zdWNjZXNzb3JzKGkpLG4pfSkpLGF9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7ZnVuY3Rpb24gaSh0LGUsbil7Zm9yKHZhciBpPXIuemlwT2JqZWN0KG4sci5tYXAobiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKSksYT1yLmZsYXR0ZW4oci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuc29ydEJ5KHIubWFwKHQub3V0RWRnZXMoZSksKGZ1bmN0aW9uKGUpe3JldHVybntwb3M6aVtlLnddLHdlaWdodDp0LmVkZ2UoZSkud2VpZ2h0fX0pKSwicG9zIil9KSksITApLG89MTtvPG4ubGVuZ3RoOylvPDw9MTt2YXIgcz0yKm8tMTtvLT0xO3ZhciBjPXIubWFwKG5ldyBBcnJheShzKSwoZnVuY3Rpb24oKXtyZXR1cm4gMH0pKSx1PTA7cmV0dXJuIHIuZm9yRWFjaChhLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucG9zK287Y1tlXSs9dC53ZWlnaHQ7Zm9yKHZhciBuPTA7ZT4wOyllJTImJihuKz1jW2UrMV0pLGNbZT1lLTE+PjFdKz10LndlaWdodDt1Kz10LndlaWdodCpufSkpKSx1fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wLHI9MTtyPGUubGVuZ3RoOysrciluKz1pKHQsZVtyLTFdLGVbcl0pO3JldHVybiBufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oNCksaT1uKDM2NiksYT1uKDM2Nyksbz1uKDM2OCk7dC5leHBvcnRzPWZ1bmN0aW9uIHQoZSxuLHMsYyl7dmFyIHU9ZS5jaGlsZHJlbihuKSxsPWUubm9kZShuKSxoPWw/bC5ib3JkZXJMZWZ0OnZvaWQgMCxmPWw/bC5ib3JkZXJSaWdodDp2b2lkIDAsZD17fTtoJiYodT1yLmZpbHRlcih1LChmdW5jdGlvbih0KXtyZXR1cm4gdCE9PWgmJnQhPT1mfSkpKTt2YXIgcD1pKGUsdSk7ci5mb3JFYWNoKHAsKGZ1bmN0aW9uKG4pe2lmKGUuY2hpbGRyZW4obi52KS5sZW5ndGgpe3ZhciBpPXQoZSxuLnYscyxjKTtkW24udl09aSxyLmhhcyhpLCJiYXJ5Y2VudGVyIikmJihhPW4sbz1pLHIuaXNVbmRlZmluZWQoYS5iYXJ5Y2VudGVyKT8oYS5iYXJ5Y2VudGVyPW8uYmFyeWNlbnRlcixhLndlaWdodD1vLndlaWdodCk6KGEuYmFyeWNlbnRlcj0oYS5iYXJ5Y2VudGVyKmEud2VpZ2h0K28uYmFyeWNlbnRlcipvLndlaWdodCkvKGEud2VpZ2h0K28ud2VpZ2h0KSxhLndlaWdodCs9by53ZWlnaHQpKX12YXIgYSxvfSkpO3ZhciB5PWEocCxzKTshZnVuY3Rpb24odCxlKXtyLmZvckVhY2godCwoZnVuY3Rpb24odCl7dC52cz1yLmZsYXR0ZW4odC52cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdP2VbdF0udnM6dH0pKSwhMCl9KSl9KHksZCk7dmFyIGc9byh5LGMpO2lmKGgmJihnLnZzPXIuZmxhdHRlbihbaCxnLnZzLGZdLCEwKSxlLnByZWRlY2Vzc29ycyhoKS5sZW5ndGgpKXt2YXIgbT1lLm5vZGUoZS5wcmVkZWNlc3NvcnMoaClbMF0pLHY9ZS5ub2RlKGUucHJlZGVjZXNzb3JzKGYpWzBdKTtyLmhhcyhnLCJiYXJ5Y2VudGVyIil8fChnLmJhcnljZW50ZXI9MCxnLndlaWdodD0wKSxnLmJhcnljZW50ZXI9KGcuYmFyeWNlbnRlcipnLndlaWdodCttLm9yZGVyK3Yub3JkZXIpLyhnLndlaWdodCsyKSxnLndlaWdodCs9Mn1yZXR1cm4gZ319LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByLm1hcChlLChmdW5jdGlvbihlKXt2YXIgbj10LmluRWRnZXMoZSk7aWYobi5sZW5ndGgpe3ZhciBpPXIucmVkdWNlKG4sKGZ1bmN0aW9uKGUsbil7dmFyIHI9dC5lZGdlKG4pLGk9dC5ub2RlKG4udik7cmV0dXJue3N1bTplLnN1bStyLndlaWdodCppLm9yZGVyLHdlaWdodDplLndlaWdodCtyLndlaWdodH19KSx7c3VtOjAsd2VpZ2h0OjB9KTtyZXR1cm57djplLGJhcnljZW50ZXI6aS5zdW0vaS53ZWlnaHQsd2VpZ2h0Omkud2VpZ2h0fX1yZXR1cm57djplfX0pKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbj17fTtyZXR1cm4gci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQsZSl7dmFyIGk9blt0LnZdPXtpbmRlZ3JlZTowLGluOltdLG91dDpbXSx2czpbdC52XSxpOmV9O3IuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8KGkuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsaS53ZWlnaHQ9dC53ZWlnaHQpfSkpLHIuZm9yRWFjaChlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdC52XSxpPW5bdC53XTtyLmlzVW5kZWZpbmVkKGUpfHxyLmlzVW5kZWZpbmVkKGkpfHwoaS5pbmRlZ3JlZSsrLGUub3V0LnB1c2goblt0LnddKSl9KSksZnVuY3Rpb24odCl7dmFyIGU9W107ZnVuY3Rpb24gbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5tZXJnZWR8fChyLmlzVW5kZWZpbmVkKGUuYmFyeWNlbnRlcil8fHIuaXNVbmRlZmluZWQodC5iYXJ5Y2VudGVyKXx8ZS5iYXJ5Y2VudGVyPj10LmJhcnljZW50ZXIpJiZmdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wO3Qud2VpZ2h0JiYobis9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LHIrPXQud2VpZ2h0KTtlLndlaWdodCYmKG4rPWUuYmFyeWNlbnRlciplLndlaWdodCxyKz1lLndlaWdodCk7dC52cz1lLnZzLmNvbmNhdCh0LnZzKSx0LmJhcnljZW50ZXI9bi9yLHQud2VpZ2h0PXIsdC5pPU1hdGgubWluKGUuaSx0LmkpLGUubWVyZ2VkPSEwfSh0LGUpfX1mdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmluLnB1c2goZSksMD09LS1uLmluZGVncmVlJiZ0LnB1c2gobil9fWZvcig7dC5sZW5ndGg7KXt2YXIgYT10LnBvcCgpO2UucHVzaChhKSxyLmZvckVhY2goYS5pbi5yZXZlcnNlKCksbihhKSksci5mb3JFYWNoKGEub3V0LGkoYSkpfXJldHVybiByLm1hcChyLmZpbHRlcihlLChmdW5jdGlvbih0KXtyZXR1cm4hdC5tZXJnZWR9KSksKGZ1bmN0aW9uKHQpe3JldHVybiByLnBpY2sodCxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KSl9KHIuZmlsdGVyKG4sKGZ1bmN0aW9uKHQpe3JldHVybiF0LmluZGVncmVlfSkpKX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQpLGk9big5KTtmdW5jdGlvbiBhKHQsZSxuKXtmb3IodmFyIGk7ZS5sZW5ndGgmJihpPXIubGFzdChlKSkuaTw9bjspZS5wb3AoKSx0LnB1c2goaS52cyksbisrO3JldHVybiBufXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPWkucGFydGl0aW9uKHQsKGZ1bmN0aW9uKHQpe3JldHVybiByLmhhcyh0LCJiYXJ5Y2VudGVyIil9KSksbz1uLmxocyxzPXIuc29ydEJ5KG4ucmhzLChmdW5jdGlvbih0KXtyZXR1cm4tdC5pfSkpLGM9W10sdT0wLGw9MCxoPTA7by5zb3J0KChmPSEhZSxmdW5jdGlvbih0LGUpe3JldHVybiB0LmJhcnljZW50ZXI8ZS5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5lLmJhcnljZW50ZXI/MTpmP2UuaS10Lmk6dC5pLWUuaX0pKSxoPWEoYyxzLGgpLHIuZm9yRWFjaChvLChmdW5jdGlvbih0KXtoKz10LnZzLmxlbmd0aCxjLnB1c2godC52cyksdSs9dC5iYXJ5Y2VudGVyKnQud2VpZ2h0LGwrPXQud2VpZ2h0LGg9YShjLHMsaCl9KSk7dmFyIGY7dmFyIGQ9e3ZzOnIuZmxhdHRlbihjLCEwKX07bCYmKGQuYmFyeWNlbnRlcj11L2wsZC53ZWlnaHQ9bCk7cmV0dXJuIGR9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oMjApLkdyYXBoO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUsbil7dmFyIGE9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKDt0Lmhhc05vZGUoZT1yLnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiBlfSh0KSxvPW5ldyBpKHtjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyb290OmF9KS5zZXREZWZhdWx0Tm9kZUxhYmVsKChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpfSkpO3JldHVybiByLmZvckVhY2godC5ub2RlcygpLChmdW5jdGlvbihpKXt2YXIgcz10Lm5vZGUoaSksYz10LnBhcmVudChpKTsocy5yYW5rPT09ZXx8cy5taW5SYW5rPD1lJiZlPD1zLm1heFJhbmspJiYoby5zZXROb2RlKGkpLG8uc2V0UGFyZW50KGksY3x8YSksci5mb3JFYWNoKHRbbl0oaSksKGZ1bmN0aW9uKGUpe3ZhciBuPWUudj09PWk/ZS53OmUudixhPW8uZWRnZShuLGkpLHM9ci5pc1VuZGVmaW5lZChhKT8wOmEud2VpZ2h0O28uc2V0RWRnZShuLGkse3dlaWdodDp0LmVkZ2UoZSkud2VpZ2h0K3N9KX0pKSxyLmhhcyhzLCJtaW5SYW5rIikmJm8uc2V0Tm9kZShpLHtib3JkZXJMZWZ0OnMuYm9yZGVyTGVmdFtlXSxib3JkZXJSaWdodDpzLmJvcmRlclJpZ2h0W2VdfSkpfSkpLG99fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGE9e307ci5mb3JFYWNoKG4sKGZ1bmN0aW9uKG4pe2Zvcih2YXIgcixvLHM9dC5wYXJlbnQobik7czspe2lmKChyPXQucGFyZW50KHMpKT8obz1hW3JdLGFbcl09cyk6KG89aSxpPXMpLG8mJm8hPT1zKXJldHVybiB2b2lkIGUuc2V0RWRnZShvLHMpO3M9cn19KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksaT1uKDkpLGE9bigzNzIpLnBvc2l0aW9uWDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7KGZ1bmN0aW9uKHQpe3ZhciBlPWkuYnVpbGRMYXllck1hdHJpeCh0KSxuPXQuZ3JhcGgoKS5yYW5rc2VwLGE9MDtyLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk9ci5tYXgoci5tYXAoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHQubm9kZShlKS5oZWlnaHR9KSkpO3IuZm9yRWFjaChlLChmdW5jdGlvbihlKXt0Lm5vZGUoZSkueT1hK2kvMn0pKSxhKz1pK259KSl9KSh0PWkuYXNOb25Db21wb3VuZEdyYXBoKHQpKSxyLmZvckVhY2goYSh0KSwoZnVuY3Rpb24oZSxuKXt0Lm5vZGUobikueD1lfSkpfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQpLGk9bigyMCkuR3JhcGgsYT1uKDkpO2Z1bmN0aW9uIG8odCxlKXt2YXIgbj17fTtyZXR1cm4gci5yZWR1Y2UoZSwoZnVuY3Rpb24oZSxpKXt2YXIgYT0wLG89MCxzPWUubGVuZ3RoLHU9ci5sYXN0KGkpO3JldHVybiByLmZvckVhY2goaSwoZnVuY3Rpb24oZSxsKXt2YXIgaD1mdW5jdGlvbih0LGUpe2lmKHQubm9kZShlKS5kdW1teSlyZXR1cm4gci5maW5kKHQucHJlZGVjZXNzb3JzKGUpLChmdW5jdGlvbihlKXtyZXR1cm4gdC5ub2RlKGUpLmR1bW15fSkpfSh0LGUpLGY9aD90Lm5vZGUoaCkub3JkZXI6czsoaHx8ZT09PXUpJiYoci5mb3JFYWNoKGkuc2xpY2UobyxsKzEpLChmdW5jdGlvbihlKXtyLmZvckVhY2godC5wcmVkZWNlc3NvcnMoZSksKGZ1bmN0aW9uKHIpe3ZhciBpPXQubm9kZShyKSxvPWkub3JkZXI7IShvPGF8fGY8byl8fGkuZHVtbXkmJnQubm9kZShlKS5kdW1teXx8YyhuLHIsZSl9KSl9KSksbz1sKzEsYT1mKX0pKSxpfSkpLG59ZnVuY3Rpb24gcyh0LGUpe3ZhciBuPXt9O2Z1bmN0aW9uIGkoZSxpLGEsbyxzKXt2YXIgdTtyLmZvckVhY2goci5yYW5nZShpLGEpLChmdW5jdGlvbihpKXt1PWVbaV0sdC5ub2RlKHUpLmR1bW15JiZyLmZvckVhY2godC5wcmVkZWNlc3NvcnModSksKGZ1bmN0aW9uKGUpe3ZhciByPXQubm9kZShlKTtyLmR1bW15JiYoci5vcmRlcjxvfHxyLm9yZGVyPnMpJiZjKG4sZSx1KX0pKX0pKX1yZXR1cm4gci5yZWR1Y2UoZSwoZnVuY3Rpb24oZSxuKXt2YXIgYSxvPS0xLHM9MDtyZXR1cm4gci5mb3JFYWNoKG4sKGZ1bmN0aW9uKHIsYyl7aWYoImJvcmRlciI9PT10Lm5vZGUocikuZHVtbXkpe3ZhciB1PXQucHJlZGVjZXNzb3JzKHIpO3UubGVuZ3RoJiYoYT10Lm5vZGUodVswXSkub3JkZXIsaShuLHMsYyxvLGEpLHM9YyxvPWEpfWkobixzLG4ubGVuZ3RoLGEsZS5sZW5ndGgpfSkpLG59KSksbn1mdW5jdGlvbiBjKHQsZSxuKXtpZihlPm4pe3ZhciByPWU7ZT1uLG49cn12YXIgaT10W2VdO2l8fCh0W2VdPWk9e30pLGlbbl09ITB9ZnVuY3Rpb24gdSh0LGUsbil7aWYoZT5uKXt2YXIgaT1lO2U9bixuPWl9cmV0dXJuIHIuaGFzKHRbZV0sbil9ZnVuY3Rpb24gbCh0LGUsbixpKXt2YXIgYT17fSxvPXt9LHM9e307cmV0dXJuIHIuZm9yRWFjaChlLChmdW5jdGlvbih0KXtyLmZvckVhY2godCwoZnVuY3Rpb24odCxlKXthW3RdPXQsb1t0XT10LHNbdF09ZX0pKX0pKSxyLmZvckVhY2goZSwoZnVuY3Rpb24odCl7dmFyIGU9LTE7ci5mb3JFYWNoKHQsKGZ1bmN0aW9uKHQpe3ZhciBjPWkodCk7aWYoYy5sZW5ndGgpZm9yKHZhciBsPSgoYz1yLnNvcnRCeShjLChmdW5jdGlvbih0KXtyZXR1cm4gc1t0XX0pKSkubGVuZ3RoLTEpLzIsaD1NYXRoLmZsb29yKGwpLGY9TWF0aC5jZWlsKGwpO2g8PWY7KytoKXt2YXIgZD1jW2hdO29bdF09PT10JiZlPHNbZF0mJiF1KG4sdCxkKSYmKG9bZF09dCxvW3RdPWFbdF09YVtkXSxlPXNbZF0pfX0pKX0pKSx7cm9vdDphLGFsaWduOm99fWZ1bmN0aW9uIGgodCxlLG4sYSxvKXt2YXIgcz17fSxjPWZ1bmN0aW9uKHQsZSxuLGEpe3ZhciBvPW5ldyBpLHM9dC5ncmFwaCgpLGM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyl7dmFyIHMsYz1pLm5vZGUoYSksdT1pLm5vZGUobyksbD0wO2lmKGwrPWMud2lkdGgvMixyLmhhcyhjLCJsYWJlbHBvcyIpKXN3aXRjaChjLmxhYmVscG9zLnRvTG93ZXJDYXNlKCkpe2Nhc2UibCI6cz0tYy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6cz1jLndpZHRoLzJ9aWYocyYmKGwrPW4/czotcykscz0wLGwrPShjLmR1bW15P2U6dCkvMixsKz0odS5kdW1teT9lOnQpLzIsbCs9dS53aWR0aC8yLHIuaGFzKHUsImxhYmVscG9zIikpc3dpdGNoKHUubGFiZWxwb3MudG9Mb3dlckNhc2UoKSl7Y2FzZSJsIjpzPXUud2lkdGgvMjticmVhaztjYXNlInIiOnM9LXUud2lkdGgvMn1yZXR1cm4gcyYmKGwrPW4/czotcykscz0wLGx9fShzLm5vZGVzZXAscy5lZGdlc2VwLGEpO3JldHVybiByLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7dmFyIGk7ci5mb3JFYWNoKGUsKGZ1bmN0aW9uKGUpe3ZhciByPW5bZV07aWYoby5zZXROb2RlKHIpLGkpe3ZhciBhPW5baV0scz1vLmVkZ2UoYSxyKTtvLnNldEVkZ2UoYSxyLE1hdGgubWF4KGModCxlLGkpLHN8fDApKX1pPWV9KSl9KSksb30odCxlLG4sbyksdT1vPyJib3JkZXJMZWZ0IjoiYm9yZGVyUmlnaHQiO2Z1bmN0aW9uIGwodCxlKXtmb3IodmFyIG49Yy5ub2RlcygpLHI9bi5wb3AoKSxpPXt9O3I7KWlbcl0/dChyKTooaVtyXT0hMCxuLnB1c2gociksbj1uLmNvbmNhdChlKHIpKSkscj1uLnBvcCgpfXJldHVybiBsKChmdW5jdGlvbih0KXtzW3RdPWMuaW5FZGdlcyh0KS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsc1tlLnZdK2MuZWRnZShlKSl9KSwwKX0pLGMucHJlZGVjZXNzb3JzLmJpbmQoYykpLGwoKGZ1bmN0aW9uKGUpe3ZhciBuPWMub3V0RWRnZXMoZSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1pbih0LHNbZS53XS1jLmVkZ2UoZSkpfSksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSxyPXQubm9kZShlKTtuIT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZJiZyLmJvcmRlclR5cGUhPT11JiYoc1tlXT1NYXRoLm1heChzW2VdLG4pKX0pLGMuc3VjY2Vzc29ycy5iaW5kKGMpKSxyLmZvckVhY2goYSwoZnVuY3Rpb24odCl7c1t0XT1zW25bdF1dfSkpLHN9ZnVuY3Rpb24gZih0LGUpe3JldHVybiByLm1pbkJ5KHIudmFsdWVzKGUpLChmdW5jdGlvbihlKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIHIuZm9ySW4oZSwoZnVuY3Rpb24oZSxyKXt2YXIgYT1mdW5jdGlvbih0LGUpe3JldHVybiB0Lm5vZGUoZSkud2lkdGh9KHQscikvMjtuPU1hdGgubWF4KGUrYSxuKSxpPU1hdGgubWluKGUtYSxpKX0pKSxuLWl9KSl9ZnVuY3Rpb24gZCh0LGUpe3ZhciBuPXIudmFsdWVzKGUpLGk9ci5taW4obiksYT1yLm1heChuKTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihuKXtyLmZvckVhY2goWyJsIiwiciJdLChmdW5jdGlvbihvKXt2YXIgcyxjPW4rbyx1PXRbY107aWYodSE9PWUpe3ZhciBsPXIudmFsdWVzKHUpOyhzPSJsIj09PW8/aS1yLm1pbihsKTphLXIubWF4KGwpKSYmKHRbY109ci5tYXBWYWx1ZXModSwoZnVuY3Rpb24odCl7cmV0dXJuIHQrc30pKSl9fSkpfSkpfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gci5tYXBWYWx1ZXModC51bCwoZnVuY3Rpb24obixpKXtpZihlKXJldHVybiB0W2UudG9Mb3dlckNhc2UoKV1baV07dmFyIGE9ci5zb3J0Qnkoci5tYXAodCxpKSk7cmV0dXJuKGFbMV0rYVsyXSkvMn0pKX10LmV4cG9ydHM9e3Bvc2l0aW9uWDpmdW5jdGlvbih0KXt2YXIgZSxuPWEuYnVpbGRMYXllck1hdHJpeCh0KSxpPXIubWVyZ2Uobyh0LG4pLHModCxuKSksYz17fTtyLmZvckVhY2goWyJ1IiwiZCJdLChmdW5jdGlvbihhKXtlPSJ1Ij09PWE/bjpyLnZhbHVlcyhuKS5yZXZlcnNlKCksci5mb3JFYWNoKFsibCIsInIiXSwoZnVuY3Rpb24obil7InIiPT09biYmKGU9ci5tYXAoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHIudmFsdWVzKHQpLnJldmVyc2UoKX0pKSk7dmFyIG89KCJ1Ij09PWE/dC5wcmVkZWNlc3NvcnM6dC5zdWNjZXNzb3JzKS5iaW5kKHQpLHM9bCh0LGUsaSxvKSx1PWgodCxlLHMucm9vdCxzLmFsaWduLCJyIj09PW4pOyJyIj09PW4mJih1PXIubWFwVmFsdWVzKHUsKGZ1bmN0aW9uKHQpe3JldHVybi10fSkpKSxjW2Erbl09dX0pKX0pKTt2YXIgdT1mKHQsYyk7cmV0dXJuIGQoYyx1KSxwKGMsdC5ncmFwaCgpLmFsaWduKX0sZmluZFR5cGUxQ29uZmxpY3RzOm8sZmluZFR5cGUyQ29uZmxpY3RzOnMsYWRkQ29uZmxpY3Q6YyxoYXNDb25mbGljdDp1LHZlcnRpY2FsQWxpZ25tZW50OmwsaG9yaXpvbnRhbENvbXBhY3Rpb246aCxhbGlnbkNvb3JkaW5hdGVzOmQsZmluZFNtYWxsZXN0V2lkdGhBbGlnbm1lbnQ6ZixiYWxhbmNlOnB9fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9big0KSxpPW4oOSksYT1uKDIwKS5HcmFwaDt0LmV4cG9ydHM9e2RlYnVnT3JkZXJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9aS5idWlsZExheWVyTWF0cml4KHQpLG49bmV3IGEoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KS5zZXRHcmFwaCh7fSk7cmV0dXJuIHIuZm9yRWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe24uc2V0Tm9kZShlLHtsYWJlbDplfSksbi5zZXRQYXJlbnQoZSwibGF5ZXIiK3Qubm9kZShlKS5yYW5rKX0pKSxyLmZvckVhY2godC5lZGdlcygpLChmdW5jdGlvbih0KXtuLnNldEVkZ2UodC52LHQudyx7fSx0Lm5hbWUpfSkpLHIuZm9yRWFjaChlLChmdW5jdGlvbih0LGUpe3ZhciBpPSJsYXllciIrZTtuLnNldE5vZGUoaSx7cmFuazoic2FtZSJ9KSxyLnJlZHVjZSh0LChmdW5jdGlvbih0LGUpe3JldHVybiBuLnNldEVkZ2UodCxlLHtzdHlsZToiaW52aXMifSksZX0pKX0pKSxufX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIwLjguNSJ9LGZ1bmN0aW9uKHQsZSxuKXt0LmV4cG9ydHM9e25vZGU6bigxNjUpLGNpcmNsZTpuKDE2NiksZWxsaXBzZTpuKDk3KSxwb2x5Z29uOm4oMTY3KSxyZWN0Om4oMTY4KX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0KmU+MH10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGMsdSxsLGgsZixkLHAseSxnLG07aWYoYT1lLnktdC55LHM9dC54LWUueCx1PWUueCp0LnktdC54KmUueSxkPWEqci54K3Mqci55K3UscD1hKmkueCtzKmkueSt1LDAhPT1kJiYwIT09cCYmbihkLHApKXJldHVybjtpZihvPWkueS1yLnksYz1yLngtaS54LGw9aS54KnIueS1yLngqaS55LGg9byp0LngrYyp0LnkrbCxmPW8qZS54K2MqZS55K2wsMCE9PWgmJjAhPT1mJiZuKGgsZikpcmV0dXJuO2lmKDA9PT0oeT1hKmMtbypzKSlyZXR1cm47cmV0dXJuIGc9TWF0aC5hYnMoeS8yKSx7eDoobT1zKmwtYyp1KTwwPyhtLWcpL3k6KG0rZykveSx5OihtPW8qdS1hKmwpPDA/KG0tZykveToobStnKS95fX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDQ0KSxpPW4oMzEpLGE9bigxNTMpLmxheW91dDt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKDM3OCksZT1uKDM4MSksaT1uKDM4MiksdT1uKDM4MyksbD1uKDM4NCksaD1uKDM4NSksZj1uKDM4NiksZD1uKDM4NykscD1uKDM4OCkseT1mdW5jdGlvbihuLHkpeyFmdW5jdGlvbih0KXt0Lm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5ub2RlKGUpO3IuaGFzKG4sImxhYmVsIil8fHQuY2hpbGRyZW4oZSkubGVuZ3RofHwobi5sYWJlbD1lKSxyLmhhcyhuLCJwYWRkaW5nWCIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdMZWZ0Om4ucGFkZGluZ1gscGFkZGluZ1JpZ2h0Om4ucGFkZGluZ1h9KSxyLmhhcyhuLCJwYWRkaW5nWSIpJiZyLmRlZmF1bHRzKG4se3BhZGRpbmdUb3A6bi5wYWRkaW5nWSxwYWRkaW5nQm90dG9tOm4ucGFkZGluZ1l9KSxyLmhhcyhuLCJwYWRkaW5nIikmJnIuZGVmYXVsdHMobix7cGFkZGluZ0xlZnQ6bi5wYWRkaW5nLHBhZGRpbmdSaWdodDpuLnBhZGRpbmcscGFkZGluZ1RvcDpuLnBhZGRpbmcscGFkZGluZ0JvdHRvbTpuLnBhZGRpbmd9KSxyLmRlZmF1bHRzKG4sbyksci5lYWNoKFsicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLChmdW5jdGlvbih0KXtuW3RdPU51bWJlcihuW3RdKX0pKSxyLmhhcyhuLCJ3aWR0aCIpJiYobi5fcHJldldpZHRoPW4ud2lkdGgpLHIuaGFzKG4sImhlaWdodCIpJiYobi5fcHJldkhlaWdodD1uLmhlaWdodCl9KSksdC5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuZWRnZShlKTtyLmhhcyhuLCJsYWJlbCIpfHwobi5sYWJlbD0iIiksci5kZWZhdWx0cyhuLHMpfSkpfSh5KTt2YXIgZz1jKG4sIm91dHB1dCIpLG09YyhnLCJjbHVzdGVycyIpLHY9YyhnLCJlZGdlUGF0aHMiKSxiPWkoYyhnLCJlZGdlTGFiZWxzIikseSkseD10KGMoZywibm9kZXMiKSx5LGQpO2EoeSksbCh4LHkpLGgoYix5KSx1KHYseSxwKTt2YXIgXz1lKG0seSk7ZihfLHkpLGZ1bmN0aW9uKHQpe3IuZWFjaCh0Lm5vZGVzKCksKGZ1bmN0aW9uKGUpe3ZhciBuPXQubm9kZShlKTtyLmhhcyhuLCJfcHJldldpZHRoIik/bi53aWR0aD1uLl9wcmV2V2lkdGg6ZGVsZXRlIG4ud2lkdGgsci5oYXMobiwiX3ByZXZIZWlnaHQiKT9uLmhlaWdodD1uLl9wcmV2SGVpZ2h0OmRlbGV0ZSBuLmhlaWdodCxkZWxldGUgbi5fcHJldldpZHRoLGRlbGV0ZSBuLl9wcmV2SGVpZ2h0fSkpfSh5KX07cmV0dXJuIHkuY3JlYXRlTm9kZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSx5KTp0fSx5LmNyZWF0ZUNsdXN0ZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQseSk6ZX0seS5jcmVhdGVFZGdlTGFiZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQseSk6aX0seS5jcmVhdGVFZGdlUGF0aHM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCx5KTp1fSx5LnNoYXBlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10LHkpOmR9LHkuYXJyb3dzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPXQseSk6cH0seX07dmFyIG89e3BhZGRpbmdMZWZ0OjEwLHBhZGRpbmdSaWdodDoxMCxwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscng6MCxyeTowLHNoYXBlOiJyZWN0In0scz17YXJyb3doZWFkOiJub3JtYWwiLGN1cnZlOmkuY3VydmVMaW5lYXJ9O2Z1bmN0aW9uIGModCxlKXt2YXIgbj10LnNlbGVjdCgiZy4iK2UpO3JldHVybiBuLmVtcHR5KCkmJihuPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLGUpKSxufX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ0KSxpPW4oOTgpLGE9bigxNSksbz1uKDMxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBzLGM9ZS5ub2RlcygpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIWEuaXNTdWJncmFwaChlLHQpfSkpLHU9dC5zZWxlY3RBbGwoImcubm9kZSIpLmRhdGEoYywoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7dS5leGl0KCkucmVtb3ZlKCksdS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSIpLnN0eWxlKCJvcGFjaXR5IiwwKSwodT10LnNlbGVjdEFsbCgiZy5ub2RlIikpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBzPWUubm9kZSh0KSxjPW8uc2VsZWN0KHRoaXMpO2EuYXBwbHlDbGFzcyhjLHMuY2xhc3MsKGMuY2xhc3NlZCgidXBkYXRlIik/InVwZGF0ZSAiOiIiKSsibm9kZSIpLGMuc2VsZWN0KCJnLmxhYmVsIikucmVtb3ZlKCk7dmFyIHU9Yy5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksbD1pKHUscyksaD1uW3Muc2hhcGVdLGY9ci5waWNrKGwubm9kZSgpLmdldEJCb3goKSwid2lkdGgiLCJoZWlnaHQiKTtzLmVsZW09dGhpcyxzLmlkJiZjLmF0dHIoImlkIixzLmlkKSxzLmxhYmVsSWQmJnUuYXR0cigiaWQiLHMubGFiZWxJZCksci5oYXMocywid2lkdGgiKSYmKGYud2lkdGg9cy53aWR0aCksci5oYXMocywiaGVpZ2h0IikmJihmLmhlaWdodD1zLmhlaWdodCksZi53aWR0aCs9cy5wYWRkaW5nTGVmdCtzLnBhZGRpbmdSaWdodCxmLmhlaWdodCs9cy5wYWRkaW5nVG9wK3MucGFkZGluZ0JvdHRvbSx1LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLnBhZGRpbmdMZWZ0LXMucGFkZGluZ1JpZ2h0KS8yKyIsIisocy5wYWRkaW5nVG9wLXMucGFkZGluZ0JvdHRvbSkvMisiKSIpO3ZhciBkPW8uc2VsZWN0KHRoaXMpO2Quc2VsZWN0KCIubGFiZWwtY29udGFpbmVyIikucmVtb3ZlKCk7dmFyIHA9aChkLGYscykuY2xhc3NlZCgibGFiZWwtY29udGFpbmVyIiwhMCk7YS5hcHBseVN0eWxlKHAscy5zdHlsZSk7dmFyIHk9cC5ub2RlKCkuZ2V0QkJveCgpO3Mud2lkdGg9eS53aWR0aCxzLmhlaWdodD15LmhlaWdodH0pKSxzPXUuZXhpdD91LmV4aXQoKTp1LnNlbGVjdEFsbChudWxsKTtyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24ocyxlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksdX19LGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uKDE1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49dC5hcHBlbmQoInRleHQiKSxpPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxuPSIiLHI9ITEsaT0wO2k8dC5sZW5ndGg7KytpKWlmKGU9dFtpXSxyKXtzd2l0Y2goZSl7Y2FzZSJuIjpuKz0iXG4iO2JyZWFrO2RlZmF1bHQ6bis9ZX1yPSExfWVsc2UiXFwiPT09ZT9yPSEwOm4rPWU7cmV0dXJuIG59KGUubGFiZWwpLnNwbGl0KCJcbiIpLGE9MDthPGkubGVuZ3RoO2ErKyluLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLmF0dHIoImR5IiwiMWVtIikuYXR0cigieCIsIjEiKS50ZXh0KGlbYV0pO3JldHVybiByLmFwcGx5U3R5bGUobixlLmxhYmVsU3R5bGUpLG59fSxmdW5jdGlvbih0LGUsbil7dmFyIHI9bigxNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dDtyZXR1cm4gbi5ub2RlKCkuYXBwZW5kQ2hpbGQoZS5sYWJlbCksci5hcHBseVN0eWxlKG4sZS5sYWJlbFN0eWxlKSxufX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUpLGk9bigzMSksYT1uKDk4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWUubm9kZXMoKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiByLmlzU3ViZ3JhcGgoZSx0KX0pKSxzPXQuc2VsZWN0QWxsKCJnLmNsdXN0ZXIiKS5kYXRhKG8sKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3Muc2VsZWN0QWxsKCIqIikucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlciIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUubm9kZSh0KS5pZH0pKS5zdHlsZSgib3BhY2l0eSIsMCkscz10LnNlbGVjdEFsbCgiZy5jbHVzdGVyIiksci5hcHBseVRyYW5zaXRpb24ocyxlKS5zdHlsZSgib3BhY2l0eSIsMSkscy5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCkscj1pLnNlbGVjdCh0aGlzKTtpLnNlbGVjdCh0aGlzKS5hcHBlbmQoInJlY3QiKTt2YXIgbz1yLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKTthKG8sbixuLmNsdXN0ZXJMYWJlbFBvcyl9KSkscy5zZWxlY3RBbGwoInJlY3QiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLm5vZGUodCksYT1pLnNlbGVjdCh0aGlzKTtyLmFwcGx5U3R5bGUoYSxuLnN0eWxlKX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKTtyZXR1cm4gci5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NCksaT1uKDk4KSxhPW4oMTUpLG89bigzMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIG4scz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKS5kYXRhKGUuZWRnZXMoKSwoZnVuY3Rpb24odCl7cmV0dXJuIGEuZWRnZVRvSWQodCl9KSkuY2xhc3NlZCgidXBkYXRlIiwhMCk7cy5leGl0KCkucmVtb3ZlKCkscy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImVkZ2VMYWJlbCIsITApLnN0eWxlKCJvcGFjaXR5IiwwKSwocz10LnNlbGVjdEFsbCgiZy5lZGdlTGFiZWwiKSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49by5zZWxlY3QodGhpcyk7bi5zZWxlY3QoIi5sYWJlbCIpLnJlbW92ZSgpO3ZhciBhPWUuZWRnZSh0KSxzPWkobixlLmVkZ2UodCksMCwwKS5jbGFzc2VkKCJsYWJlbCIsITApLGM9cy5ub2RlKCkuZ2V0QkJveCgpO2EubGFiZWxJZCYmcy5hdHRyKCJpZCIsYS5sYWJlbElkKSxyLmhhcyhhLCJ3aWR0aCIpfHwoYS53aWR0aD1jLndpZHRoKSxyLmhhcyhhLCJoZWlnaHQiKXx8KGEuaGVpZ2h0PWMuaGVpZ2h0KX0pKSxuPXMuZXhpdD9zLmV4aXQoKTpzLnNlbGVjdEFsbChudWxsKTtyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24obixlKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksc319LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0NCksaT1uKDE2NSksYT1uKDE1KSxvPW4oMzEpO2Z1bmN0aW9uIHModCxlKXt2YXIgbj0oby5saW5lfHxvLnN2Zy5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKTtyZXR1cm4obi5jdXJ2ZXx8bi5pbnRlcnBvbGF0ZSkodC5jdXJ2ZSksbihlKX10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4pe3ZhciBjPXQuc2VsZWN0QWxsKCJnLmVkZ2VQYXRoIikuZGF0YShlLmVkZ2VzKCksKGZ1bmN0aW9uKHQpe3JldHVybiBhLmVkZ2VUb0lkKHQpfSkpLmNsYXNzZWQoInVwZGF0ZSIsITApLHU9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aCIpLnN0eWxlKCJvcGFjaXR5IiwwKTtyZXR1cm4gbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7dmFyIG49ZS5lZGdlKHQpLGk9ZS5ub2RlKHQudikuZWxlbTtyZXR1cm4gcyhuLHIucmFuZ2Uobi5wb2ludHMubGVuZ3RoKS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGU9KHQ9aSkuZ2V0QkJveCgpLHt4OihuPXQub3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpLmludmVyc2UoKS5tdWx0aXBseSh0LmdldFNjcmVlbkNUTSgpKS50cmFuc2xhdGUoZS53aWR0aC8yLGUuaGVpZ2h0LzIpKS5lLHk6bi5mfTt2YXIgdCxlLG59KSkpfSkpLG4uYXBwZW5kKCJkZWZzIiksbn0oYyxlKTshZnVuY3Rpb24odCxlKXt2YXIgbj10LmV4aXQoKTthLmFwcGx5VHJhbnNpdGlvbihuLGUpLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKX0oYyxlKTt2YXIgbD12b2lkIDAhPT1jLm1lcmdlP2MubWVyZ2UodSk6YztyZXR1cm4gYS5hcHBseVRyYW5zaXRpb24obCxlKS5zdHlsZSgib3BhY2l0eSIsMSksbC5lYWNoKChmdW5jdGlvbih0KXt2YXIgbj1vLnNlbGVjdCh0aGlzKSxyPWUuZWRnZSh0KTtyLmVsZW09dGhpcyxyLmlkJiZuLmF0dHIoImlkIixyLmlkKSxhLmFwcGx5Q2xhc3MobixyLmNsYXNzLChuLmNsYXNzZWQoInVwZGF0ZSIpPyJ1cGRhdGUgIjoiIikrImVkZ2VQYXRoIil9KSksbC5zZWxlY3RBbGwoInBhdGgucGF0aCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPWUuZWRnZSh0KTtuLmFycm93aGVhZElkPXIudW5pcXVlSWQoImFycm93aGVhZCIpO3ZhciBjPW8uc2VsZWN0KHRoaXMpLmF0dHIoIm1hcmtlci1lbmQiLChmdW5jdGlvbigpe3JldHVybiJ1cmwoIisodD1sb2NhdGlvbi5ocmVmLGU9bi5hcnJvd2hlYWRJZCx0LnNwbGl0KCIjIilbMF0rIiMiK2UrIikiKTt2YXIgdCxlfSkpLnN0eWxlKCJmaWxsIiwibm9uZSIpO2EuYXBwbHlUcmFuc2l0aW9uKGMsZSkuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPXQuZWRnZShlKSxyPXQubm9kZShlLnYpLGE9dC5ub2RlKGUudyksbz1uLnBvaW50cy5zbGljZSgxLG4ucG9pbnRzLmxlbmd0aC0xKTtyZXR1cm4gby51bnNoaWZ0KGkocixvWzBdKSksby5wdXNoKGkoYSxvW28ubGVuZ3RoLTFdKSkscyhuLG8pfShlLHQpfSkpLGEuYXBwbHlTdHlsZShjLG4uc3R5bGUpfSkpLGwuc2VsZWN0QWxsKCJkZWZzICoiKS5yZW1vdmUoKSxsLnNlbGVjdEFsbCgiZGVmcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KTsoMCxuW3IuYXJyb3doZWFkXSkoby5zZWxlY3QodGhpcyksci5hcnJvd2hlYWRJZCxyLCJhcnJvd2hlYWQiKX0pKSxsfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE1KSxpPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5ub2RlKHQpO3JldHVybiJ0cmFuc2xhdGUoIituLngrIiwiK24ueSsiKSJ9dC5maWx0ZXIoKGZ1bmN0aW9uKCl7cmV0dXJuIWkuc2VsZWN0KHRoaXMpLmNsYXNzZWQoInVwZGF0ZSIpfSkpLmF0dHIoInRyYW5zZm9ybSIsbiksci5hcHBseVRyYW5zaXRpb24odCxlKS5zdHlsZSgib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixuKX19LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxNSksaT1uKDMxKSxhPW4oNDQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIG4odCl7dmFyIG49ZS5lZGdlKHQpO3JldHVybiBhLmhhcyhuLCJ4Iik/InRyYW5zbGF0ZSgiK24ueCsiLCIrbi55KyIpIjoiIn10LmZpbHRlcigoZnVuY3Rpb24oKXtyZXR1cm4haS5zZWxlY3QodGhpcykuY2xhc3NlZCgidXBkYXRlIil9KSkuYXR0cigidHJhbnNmb3JtIixuKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLG4pfX0sZnVuY3Rpb24odCxlLG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDE1KSxpPW4oMzEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiFpLnNlbGVjdCh0aGlzKS5jbGFzc2VkKCJ1cGRhdGUiKX0pKTtmdW5jdGlvbiBhKHQpe3ZhciBuPWUubm9kZSh0KTtyZXR1cm4idHJhbnNsYXRlKCIrbi54KyIsIituLnkrIikifW4uYXR0cigidHJhbnNmb3JtIixhKSxyLmFwcGx5VHJhbnNpdGlvbih0LGUpLnN0eWxlKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGEpLHIuYXBwbHlUcmFuc2l0aW9uKG4uc2VsZWN0QWxsKCJyZWN0IiksZSkuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gZS5ub2RlKHQpLndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlLm5vZGUodCkuaGVpZ2h0fSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4tZS5ub2RlKHQpLndpZHRoLzJ9KSkuYXR0cigieSIsKGZ1bmN0aW9uKHQpe3JldHVybi1lLm5vZGUodCkuaGVpZ2h0LzJ9KSl9fSxmdW5jdGlvbih0LGUsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTY4KSxpPW4oOTcpLGE9bigxNjYpLG89bigxNjcpO3QuZXhwb3J0cz17cmVjdDpmdW5jdGlvbih0LGUsbil7dmFyIGk9dC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJyeCIsbi5yeCkuYXR0cigicnkiLG4ucnkpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIsZS53aWR0aCkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiByKG4sdCl9LGl9LGVsbGlwc2U6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWUud2lkdGgvMixhPWUuaGVpZ2h0LzIsbz10Lmluc2VydCgiZWxsaXBzZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyeCIscikuYXR0cigicnkiLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gaShuLHIsYSx0KX0sb30sY2lyY2xlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1NYXRoLm1heChlLndpZHRoLGUuaGVpZ2h0KS8yLGk9dC5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLC1lLndpZHRoLzIpLmF0dHIoInkiLC1lLmhlaWdodC8yKS5hdHRyKCJyIixyKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGEobixyLHQpfSxpfSxkaWFtb25kOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1lLndpZHRoKk1hdGguU1FSVDIvMixpPWUuaGVpZ2h0Kk1hdGguU1FSVDIvMixhPVt7eDowLHk6LWl9LHt4Oi1yLHk6MH0se3g6MCx5Oml9LHt4OnIseTowfV0scz10Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsYS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gbyhuLGEsdCl9LHN9fX0sZnVuY3Rpb24odCxlLG4pe3ZhciByPW4oMTUpO2Z1bmN0aW9uIGkodCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX10LmV4cG9ydHM9e2RlZmF1bHQ6aSxub3JtYWw6aSx2ZWU6ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxMCA1IEwgMCAxMCBMIDQgNSB6Iikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKTtyLmFwcGx5U3R5bGUoYSxuW2krIlN0eWxlIl0pLG5baSsiQ2xhc3MiXSYmYS5hdHRyKCJjbGFzcyIsbltpKyJDbGFzcyJdKX0sdW5kaXJlY3RlZDpmdW5jdGlvbih0LGUsbixpKXt2YXIgYT10LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgNSBMIDEwIDUiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpO3IuYXBwbHlTdHlsZShhLG5baSsiU3R5bGUiXSksbltpKyJDbGFzcyJdJiZhLmF0dHIoImNsYXNzIixuW2krIkNsYXNzIl0pfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSIwLjYuNCJ9LGZ1bmN0aW9uKHQsZSxuKXsidXNlIHN0cmljdCI7bi5yKGUpO3ZhciByPW4oMjMpLGk9bi5uKHIpLGE9e2RlYnVnOjEsaW5mbzoyLHdhcm46MyxlcnJvcjo0LGZhdGFsOjV9LG89e2RlYnVnOmZ1bmN0aW9uKCl7fSxpbmZvOmZ1bmN0aW9uKCl7fSx3YXJuOmZ1bmN0aW9uKCl7fSxlcnJvcjpmdW5jdGlvbigpe30sZmF0YWw6ZnVuY3Rpb24oKXt9fSxzPWZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJmYXRhbCI7aXNOYU4odCkmJih0PXQudG9Mb3dlckNhc2UoKSx2b2lkIDAhPT1hW3RdJiYodD1hW3RdKSksby50cmFjZT1mdW5jdGlvbigpe30sby5kZWJ1Zz1mdW5jdGlvbigpe30sby5pbmZvPWZ1bmN0aW9uKCl7fSxvLndhcm49ZnVuY3Rpb24oKXt9LG8uZXJyb3I9ZnVuY3Rpb24oKXt9LG8uZmF0YWw9ZnVuY3Rpb24oKXt9LHQ8PWEuZmF0YWwmJihvLmZhdGFsPWNvbnNvbGUuZXJyb3I/Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUsYygiRkFUQUwiKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szNW0iLGMoIkZBVEFMIikpKSx0PD1hLmVycm9yJiYoby5lcnJvcj1jb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlLGMoIkVSUk9SIiksImNvbG9yOiBvcmFuZ2UiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzFtIixjKCJFUlJPUiIpKSksdDw9YS53YXJuJiYoby53YXJuPWNvbnNvbGUud2Fybj9jb25zb2xlLndhcm4uYmluZChjb25zb2xlLGMoIldBUk4iKSwiY29sb3I6IG9yYW5nZSIpOmNvbnNvbGUubG9nLmJpbmQoY29uc29sZSwiG1szM20iLGMoIldBUk4iKSkpLHQ8PWEuaW5mbyYmKG8uaW5mbz1jb25zb2xlLmluZm8/Y29uc29sZS5pbmZvLmJpbmQoY29uc29sZSxjKCJJTkZPIiksImNvbG9yOiBsaWdodGJsdWUiKTpjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUsIhtbMzRtIixjKCJJTkZPIikpKSx0PD1hLmRlYnVnJiYoby5kZWJ1Zz1jb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcuYmluZChjb25zb2xlLGMoIkRFQlVHIiksImNvbG9yOiBsaWdodGdyZWVuIik6Y29uc29sZS5sb2cuYmluZChjb25zb2xlLCIbWzMybSIsYygiREVCVUciKSkpfSxjPWZ1bmN0aW9uKHQpe3ZhciBlPWkoKSgpLmZvcm1hdCgic3MuU1NTIik7cmV0dXJuIiVjIi5jb25jYXQoZSwiIDogIikuY29uY2F0KHQsIiA6ICIpfSx1PW4oMCksbD0iY29tbSIsaD0iZGVjbCIsZj1NYXRoLmFicyxkPVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC50cmltKCl9ZnVuY3Rpb24geSh0LGUsbil7cmV0dXJuIHQucmVwbGFjZShlLG4pfWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gMHx0LmNoYXJDb2RlQXQoZSl9ZnVuY3Rpb24gbSh0LGUsbil7cmV0dXJuIHQuc2xpY2UoZSxuKX1mdW5jdGlvbiB2KHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiBiKHQpe3JldHVybiB0Lmxlbmd0aH1mdW5jdGlvbiB4KHQsZSl7cmV0dXJuIGUucHVzaCh0KSx0fXZhciBfPTEsaz0xLHc9MCxUPTAsRT0wLEM9IiI7ZnVuY3Rpb24gUyh0LGUsbixyLGksYSxvKXtyZXR1cm57dmFsdWU6dCxyb290OmUscGFyZW50Om4sdHlwZTpyLHByb3BzOmksY2hpbGRyZW46YSxsaW5lOl8sY29sdW1uOmssbGVuZ3RoOm8scmV0dXJuOiIifX1mdW5jdGlvbiBBKCl7cmV0dXJuIEU9VD4wP2coQywtLVQpOjAsay0tLDEwPT09RSYmKGs9MSxfLS0pLEV9ZnVuY3Rpb24gTSgpe3JldHVybiBFPVQ8dz9nKEMsVCsrKTowLGsrKywxMD09PUUmJihrPTEsXysrKSxFfWZ1bmN0aW9uIE8oKXtyZXR1cm4gZyhDLFQpfWZ1bmN0aW9uIE4oKXtyZXR1cm4gVH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIG0oQyx0LGUpfWZ1bmN0aW9uIEQodCl7c3dpdGNoKHQpe2Nhc2UgMDpjYXNlIDk6Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIDU7Y2FzZSAzMzpjYXNlIDQzOmNhc2UgNDQ6Y2FzZSA0NzpjYXNlIDYyOmNhc2UgNjQ6Y2FzZSAxMjY6Y2FzZSA1OTpjYXNlIDEyMzpjYXNlIDEyNTpyZXR1cm4gNDtjYXNlIDU4OnJldHVybiAzO2Nhc2UgMzQ6Y2FzZSAzOTpjYXNlIDQwOmNhc2UgOTE6cmV0dXJuIDI7Y2FzZSA0MTpjYXNlIDkzOnJldHVybiAxfXJldHVybiAwfWZ1bmN0aW9uIEwodCl7cmV0dXJuIF89az0xLHc9dihDPXQpLFQ9MCxbXX1mdW5jdGlvbiBJKHQpe3JldHVybiBDPSIiLHR9ZnVuY3Rpb24gUih0KXtyZXR1cm4gcChCKFQtMSxmdW5jdGlvbiB0KGUpe2Zvcig7TSgpOylzd2l0Y2goRSl7Y2FzZSBlOnJldHVybiBUO2Nhc2UgMzQ6Y2FzZSAzOTpyZXR1cm4gdCgzND09PWV8fDM5PT09ZT9lOkUpO2Nhc2UgNDA6NDE9PT1lJiZ0KGUpO2JyZWFrO2Nhc2UgOTI6TSgpfXJldHVybiBUfSg5MT09PXQ/dCsyOjQwPT09dD90KzE6dCkpKX1mdW5jdGlvbiBGKHQpe2Zvcig7KEU9TygpKSYmRTwzMzspTSgpO3JldHVybiBEKHQpPjJ8fEQoRSk+Mz8iIjoiICJ9ZnVuY3Rpb24gUCh0LGUpe2Zvcig7LS1lJiZNKCkmJiEoRTw0OHx8RT4xMDJ8fEU+NTcmJkU8NjV8fEU+NzAmJkU8OTcpOyk7cmV0dXJuIEIodCxOKCkrKGU8NiYmMzI9PU8oKSYmMzI9PU0oKSkpfWZ1bmN0aW9uIGoodCxlKXtmb3IoO00oKSYmdCtFIT09NTcmJih0K0UhPT04NHx8NDchPT1PKCkpOyk7cmV0dXJuIi8qIitCKGUsVC0xKSsiKiIrZCg0Nz09PXQ/dDpNKCkpfWZ1bmN0aW9uIFkodCl7Zm9yKDshRChPKCkpOylNKCk7cmV0dXJuIEIodCxUKX1mdW5jdGlvbiB6KHQpe3JldHVybiBJKGZ1bmN0aW9uIHQoZSxuLHIsaSxhLG8scyxjLHUpe3ZhciBsPTAsaD0wLGY9cyxwPTAsZz0wLG09MCxiPTEsXz0xLGs9MSx3PTAsVD0iIixFPWEsQz1vLFM9aSxCPVQ7Zm9yKDtfOylzd2l0Y2gobT13LHc9TSgpKXtjYXNlIDM0OmNhc2UgMzk6Y2FzZSA5MTpjYXNlIDQwOkIrPVIodyk7YnJlYWs7Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOkIrPUYobSk7YnJlYWs7Y2FzZSA5MjpCKz1QKE4oKS0xLDcpO2NvbnRpbnVlO2Nhc2UgNDc6c3dpdGNoKE8oKSl7Y2FzZSA0MjpjYXNlIDQ3OngoJChqKE0oKSxOKCkpLG4sciksdSk7YnJlYWs7ZGVmYXVsdDpCKz0iLyJ9YnJlYWs7Y2FzZSAxMjMqYjpjW2wrK109dihCKSprO2Nhc2UgMTI1KmI6Y2FzZSA1OTpjYXNlIDA6c3dpdGNoKHcpe2Nhc2UgMDpjYXNlIDEyNTpfPTA7Y2FzZSA1OStoOmc+MCYmdihCKS1mJiZ4KGc+MzI/cShCKyI7IixpLHIsZi0xKTpxKHkoQiwiICIsIiIpKyI7IixpLHIsZi0yKSx1KTticmVhaztjYXNlIDU5OkIrPSI7IjtkZWZhdWx0OmlmKHgoUz1VKEIsbixyLGwsaCxhLGMsVCxFPVtdLEM9W10sZiksbyksMTIzPT09dylpZigwPT09aCl0KEIsbixTLFMsRSxvLGYsYyxDKTtlbHNlIHN3aXRjaChwKXtjYXNlIDEwMDpjYXNlIDEwOTpjYXNlIDExNTp0KGUsUyxTLGkmJngoVShlLFMsUywwLDAsYSxjLFQsYSxFPVtdLGYpLEMpLGEsQyxmLGMsaT9FOkMpO2JyZWFrO2RlZmF1bHQ6dChCLFMsUyxTLFsiIl0sQyxmLGMsQyl9fWw9aD1nPTAsYj1rPTEsVD1CPSIiLGY9czticmVhaztjYXNlIDU4OmY9MSt2KEIpLGc9bTtkZWZhdWx0OmlmKGI8MSlpZigxMjM9PXcpLS1iO2Vsc2UgaWYoMTI1PT13JiYwPT1iKysmJjEyNT09QSgpKWNvbnRpbnVlO3N3aXRjaChCKz1kKHcpLHcqYil7Y2FzZSAzODprPWg+MD8xOihCKz0iXGYiLC0xKTticmVhaztjYXNlIDQ0OmNbbCsrXT0odihCKS0xKSprLGs9MTticmVhaztjYXNlIDY0OjQ1PT09TygpJiYoQis9UihNKCkpKSxwPU8oKSxoPXYoVD1CKz1ZKE4oKSkpLHcrKzticmVhaztjYXNlIDQ1OjQ1PT09bSYmMj09dihCKSYmKGI9MCl9fXJldHVybiBvfSgiIixudWxsLG51bGwsbnVsbCxbIiJdLHQ9TCh0KSwwLFswXSx0KSl9ZnVuY3Rpb24gVSh0LGUsbixyLGksYSxvLHMsYyx1LGwpe2Zvcih2YXIgaD1pLTEsZD0wPT09aT9hOlsiIl0sZz1iKGQpLHY9MCx4PTAsXz0wO3Y8cjsrK3YpZm9yKHZhciBrPTAsdz1tKHQsaCsxLGg9Zih4PW9bdl0pKSxUPXQ7azxnOysraykoVD1wKHg+MD9kW2tdKyIgIit3OnkodywvJlxmL2csZFtrXSkpKSYmKGNbXysrXT1UKTtyZXR1cm4gUyh0LGUsbiwwPT09aT8icnVsZSI6cyxjLHUsbCl9ZnVuY3Rpb24gJCh0LGUsbil7cmV0dXJuIFModCxlLG4sbCxkKEUpLG0odCwyLC0yKSwwKX1mdW5jdGlvbiBxKHQsZSxuLHIpe3JldHVybiBTKHQsZSxuLGgsbSh0LDAsciksbSh0LHIrMSwtMSkscil9ZnVuY3Rpb24gVyh0LGUpe2Zvcih2YXIgbj0iIixyPWIodCksaT0wO2k8cjtpKyspbis9ZSh0W2ldLGksdCxlKXx8IiI7cmV0dXJuIG59ZnVuY3Rpb24gSCh0LGUsbixyKXtzd2l0Y2godC50eXBlKXtjYXNlIkBpbXBvcnQiOmNhc2UgaDpyZXR1cm4gdC5yZXR1cm49dC5yZXR1cm58fHQudmFsdWU7Y2FzZSBsOnJldHVybiIiO2Nhc2UicnVsZSI6dC52YWx1ZT10LnByb3BzLmpvaW4oIiwiKX1yZXR1cm4gdihuPVcodC5jaGlsZHJlbixyKSk/dC5yZXR1cm49dC52YWx1ZSsieyIrbisifSI6IiJ9dmFyIFY9bigzNyksRz1uKDcyKSxYPW4oMTY5KSxaPW4ubihYKSxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0iIixuPTA7bj49MDspe2lmKCEoKG49dC5pbmRleE9mKCI8c2NyaXB0IikpPj0wKSl7ZSs9dCxuPS0xO2JyZWFrfWUrPXQuc3Vic3RyKDAsbiksKG49KHQ9dC5zdWJzdHIobisxKSkuaW5kZXhPZigiPFwvc2NyaXB0PiIpKT49MCYmKG4rPTksdD10LnN1YnN0cihuKSl9cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC9qYXZhc2NyaXB0Oi9nLCIjIikpLnJlcGxhY2UoL29uZXJyb3I9L2csIm9uZXJyb3I6IikpLnJlcGxhY2UoLzxpZnJhbWUvZywiIil9LFE9LzxiclxzKlwvPz4vZ2ksSj1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC8jYnIjL2csIjxici8+Iil9LHR0PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoUSwiI2JyIyIpfSxldD1mdW5jdGlvbih0KXtyZXR1cm4iZmFsc2UiIT09dCYmITEhPT10fSxudD17Z2V0Um93czpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMTt2YXIgZT10dCh0KTtyZXR1cm4oZT1lLnJlcGxhY2UoL1xcbi9nLCIjYnIjIikpLnNwbGl0KCIjYnIjIil9LHNhbml0aXplVGV4dDpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBuPXQscj0hMDtpZighZS5mbG93Y2hhcnR8fCExIT09ZS5mbG93Y2hhcnQuaHRtbExhYmVscyYmImZhbHNlIiE9PWUuZmxvd2NoYXJ0Lmh0bWxMYWJlbHN8fChyPSExKSxyKXt2YXIgaT1lLnNlY3VyaXR5TGV2ZWw7ImFudGlzY3JpcHQiPT09aT9uPUsobik6Imxvb3NlIiE9PWkmJihuPShuPShuPXR0KG4pKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSkucmVwbGFjZSgvPS9nLCImZXF1YWxzOyIpLG49SihuKSl9cmV0dXJuIG59KFouYS5zYW5pdGl6ZSh0KSxlKX0saGFzQnJlYWtzOmZ1bmN0aW9uKHQpe3JldHVybi88YnJccypbL10/Pi9naS50ZXN0KHQpfSxzcGxpdEJyZWFrczpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcGxpdCgvPGJyXHMqWy9dPz4vZ2kpfSxsaW5lQnJlYWtSZWdleDpRLHJlbW92ZVNjcmlwdDpLLGdldFVybDpmdW5jdGlvbih0KXt2YXIgZT0iIjtyZXR1cm4gdCYmKGU9KGU9KGU9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZX0sZXZhbHVhdGU6ZXR9LHJ0PW4oMSksaXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9PYmplY3QocnQuYWRqdXN0KSh0LHtzOi00MCxsOjEwfSk6T2JqZWN0KHJ0LmFkanVzdCkodCx7czotNDAsbDotMTB9KX07ZnVuY3Rpb24gYXQodCl7cmV0dXJuKGF0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gb3QodCxlKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIHI9ZVtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIua2V5LHIpfX12YXIgc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7IWZ1bmN0aW9uKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5iYWNrZ3JvdW5kPSIjZjRmNGY0Iix0aGlzLmRhcmtNb2RlPSExLHRoaXMucHJpbWFyeUNvbG9yPSIjZmZmNGRkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSIjMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByaW1hcnlUZXh0Q29sb3I9dGhpcy5wcmltYXJ5VGV4dENvbG9yfHwodGhpcy5kYXJrTW9kZT8iI2RkZCI6IiMzMzMiKSx0aGlzLnNlY29uZGFyeUNvbG9yPXRoaXMuc2Vjb25kYXJ5Q29sb3J8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xMjB9KSx0aGlzLnRlcnRpYXJ5Q29sb3I9dGhpcy50ZXJ0aWFyeUNvbG9yfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxODAsbDo1fSksdGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3I9dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3J8fGl0KHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9dGhpcy5zZWNvbmRhcnlCb3JkZXJDb2xvcnx8aXQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yfHxpdCh0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ub3RlQm9yZGVyQ29sb3J8fGl0KHRoaXMubm90ZUJrZ0NvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMubm90ZUJrZ0NvbG9yfHwiI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMubm90ZVRleHRDb2xvcnx8IiMzMzMiLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPXRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yfHxPYmplY3QocnQuaW52ZXJ0KSh0aGlzLnNlY29uZGFyeUNvbG9yKSx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yPXRoaXMudGVydGlhcnlUZXh0Q29sb3J8fE9iamVjdChydC5pbnZlcnQpKHRoaXMudGVydGlhcnlDb2xvciksdGhpcy5saW5lQ29sb3I9dGhpcy5saW5lQ29sb3J8fE9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9dGhpcy50ZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLm5vZGVCa2c9dGhpcy5ub2RlQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm1haW5Ca2c9dGhpcy5tYWluQmtnfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLm5vZGVCb3JkZXI9dGhpcy5ub2RlQm9yZGVyfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLmNsdXN0ZXJCa2c9dGhpcy5jbHVzdGVyQmtnfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5jbHVzdGVyQm9yZGVyPXRoaXMuY2x1c3RlckJvcmRlcnx8dGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmRlZmF1bHRMaW5rQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRpdGxlQ29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy5lZGdlTGFiZWxCYWNrZ3JvdW5kPXRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZHx8KHRoaXMuZGFya01vZGU/T2JqZWN0KHJ0LmRhcmtlbikodGhpcy5zZWNvbmRhcnlDb2xvciwzMCk6dGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy5ub2RlVGV4dENvbG9yPXRoaXMubm9kZVRleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuYWN0b3JCb3JkZXI9dGhpcy5hY3RvckJvcmRlcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5hY3RvckJrZz10aGlzLmFjdG9yQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmFjdG9yTGluZUNvbG9yfHwiZ3JleSIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMubGFiZWxCb3hCa2dDb2xvcnx8dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMuc2lnbmFsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMuc2lnbmFsVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9dGhpcy5sYWJlbEJveEJvcmRlckNvbG9yfHx0aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5sYWJlbFRleHRDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5sb29wVGV4dENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPXRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yfHxPYmplY3QocnQuZGFya2VuKSh0aGlzLnNlY29uZGFyeUNvbG9yLDEwKSx0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj10aGlzLmFjdGl2YXRpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlcXVlbmNlTnVtYmVyQ29sb3I9dGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yfHxPYmplY3QocnQuaW52ZXJ0KSh0aGlzLmxpbmVDb2xvciksdGhpcy5zZWN0aW9uQmtnQ29sb3I9dGhpcy5zZWN0aW9uQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj10aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcnx8IndoaXRlIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj10aGlzLnNlY3Rpb25Ca2dDb2xvcnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9dGhpcy5zZWN0aW9uQmtnQ29sb3IyfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnRhc2tCb3JkZXJDb2xvcj10aGlzLnRhc2tCb3JkZXJDb2xvcnx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy50YXNrQmtnQ29sb3I9dGhpcy50YXNrQmtnQ29sb3J8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj10aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcnx8T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDIzKSx0aGlzLmdyaWRDb2xvcj10aGlzLmdyaWRDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMuZG9uZVRhc2tCa2dDb2xvcnx8ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPXRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcnx8ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPXRoaXMuY3JpdEJvcmRlckNvbG9yfHwiI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9dGhpcy5jcml0QmtnQ29sb3J8fCJyZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9dGhpcy50b2RheUxpbmVDb2xvcnx8InJlZCIsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRDb2xvcnx8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMudGFza1RleHREYXJrQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPXRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcnx8IiMwMDMxNjMiLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yPXRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMuc3RhdGVMYWJlbENvbG9yPXRoaXMuc3RhdGVMYWJlbENvbG9yfHx0aGlzLnN0YXRlQmtnfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5zdGF0ZUJrZz10aGlzLnN0YXRlQmtnfHx0aGlzLm1haW5Ca2csdGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcj10aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yfHx0aGlzLnN0YXRlQmtnLHRoaXMuY29tcG9zaXRlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZUJhY2tncm91bmR8fHRoaXMuYmFja2dyb3VuZHx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuYWx0QmFja2dyb3VuZD10aGlzLmFsdEJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZD10aGlzLmNvbXBvc2l0ZVRpdGxlQmFja2dyb3VuZHx8dGhpcy5tYWluQmtnLHRoaXMuY29tcG9zaXRlQm9yZGVyPXRoaXMuY29tcG9zaXRlQm9yZGVyfHx0aGlzLm5vZGVCb3JkZXIsdGhpcy5pbm5lckVuZEJhY2tncm91bmQ9dGhpcy5ub2RlQm9yZGVyLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5jbGFzc1RleHR8fHRoaXMudGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMuZmlsbFR5cGUwfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLmZpbGxUeXBlMXx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmZpbGxUeXBlMj10aGlzLmZpbGxUeXBlMnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz10aGlzLmZpbGxUeXBlM3x8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PXRoaXMuZmlsbFR5cGU0fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNT10aGlzLmZpbGxUeXBlNXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj10aGlzLmZpbGxUeXBlNnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9dGhpcy5maWxsVHlwZTd8fE9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5waWUxPXRoaXMucGllMXx8dGhpcy5wcmltYXJ5Q29sb3IsdGhpcy5waWUyPXRoaXMucGllMnx8dGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLnBpZTM9dGhpcy5waWUzfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5waWU0PXRoaXMucGllNHx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU1PXRoaXMucGllNXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTY9dGhpcy5waWU2fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnRlcnRpYXJ5Q29sb3Ise2w6LTEwfSksdGhpcy5waWU3PXRoaXMucGllN3x8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTIwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotMTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP09iamVjdChydC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09YXQodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmb3QoZS5wcm90b3R5cGUsbiksciYmb3QoZSxyKSx0fSgpO2Z1bmN0aW9uIGN0KHQpe3JldHVybihjdD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIGx0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iIzMzMyIsdGhpcy5wcmltYXJ5Q29sb3I9IiMxZjIwMjAiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMucHJpbWFyeUNvbG9yLDE2KSx0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWl0KHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiMxZjIwMjAiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLm1haW5Db250cmFzdENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZGFya1RleHRDb2xvcj1PYmplY3QocnQubGlnaHRlbikoT2JqZWN0KHJ0LmludmVydCkoIiMzMjNENDciKSwxMCksdGhpcy5saW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYm9yZGVyMT0iIzgxQjFEQiIsdGhpcy5ib3JkZXIyPU9iamVjdChydC5yZ2JhKSgyNTUsMjU1LDI1NSwuMjUpLHRoaXMuYXJyb3doZWFkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLmxhYmVsQmFja2dyb3VuZD0iIzE4MTgxOCIsdGhpcy50ZXh0Q29sb3I9IiNjY2MiLHRoaXMubm9kZUJrZz0iY2FsY3VsYXRlZCIsdGhpcy5ub2RlQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuY2x1c3RlckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRpdGxlQ29sb3I9IiNGOUZGRkUiLHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZD0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckJrZz0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvclRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RvckxpbmVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5zaWduYWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxCb3hCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxvb3BUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVCa2dDb2xvcj0iI2ZmZjVhZCIsdGhpcy5ub3RlVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VxdWVuY2VOdW1iZXJDb2xvcj0iYmxhY2siLHRoaXMuc2VjdGlvbkJrZ0NvbG9yPU9iamVjdChydC5kYXJrZW4pKCIjRUFFOEQ5IiwzMCksdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI0VBRThEOSIsdGhpcy50YXNrQm9yZGVyQ29sb3I9T2JqZWN0KHJ0LnJnYmEpKDI1NSwyNTUsMjU1LDcwKSx0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj1PYmplY3QocnQucmdiYSkoMjU1LDI1NSwyNTUsNTApLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjODFCMURCIix0aGlzLmdyaWRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjRTgzNzM3Iix0aGlzLmNyaXRCa2dDb2xvcj0iI0U4MzczNyIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0iI0RCNTc1NyIsdGhpcy5sYWJlbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVycm9yQmtnQ29sb3I9IiNhNDQxNDEiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiNkZGQifXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJ1cGRhdGVDb2xvcnMiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRCa2c9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMubWFpbkJrZywxNiksdGhpcy5saW5lQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmFycm93aGVhZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMubGFiZWxCYWNrZ3JvdW5kLDI1KSx0aGlzLmFjdG9yQm9yZGVyPXRoaXMuYm9yZGVyMSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmFjdG9yVGV4dENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMuc2lnbmFsQ29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLm1haW5Db250cmFzdENvbG9yLHRoaXMubGFiZWxCb3hCa2dDb2xvcj10aGlzLmFjdG9yQmtnLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yLHRoaXMubm90ZUJrZ0NvbG9yPXRoaXMuc2Vjb25kQmtnLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLnNlY29uZGFyeVRleHRDb2xvcix0aGlzLmFjdGl2YXRpb25Cb3JkZXJDb2xvcj10aGlzLmJvcmRlcjEsdGhpcy5hY3RpdmF0aW9uQmtnQ29sb3I9dGhpcy5zZWNvbmRCa2csdGhpcy5hbHRTZWN0aW9uQmtnQ29sb3I9dGhpcy5iYWNrZ3JvdW5kLHRoaXMudGFza0JrZ0NvbG9yPU9iamVjdChydC5saWdodGVuKSh0aGlzLm1haW5Ca2csMjMpLHRoaXMudGFza1RleHRDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9dGhpcy5tYWluQ29udHJhc3RDb2xvcix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMuZ3JpZENvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy5kb25lVGFza0JrZ0NvbG9yPXRoaXMubWFpbkNvbnRyYXN0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLmRhcmtUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMudHJhbnNpdGlvbkxhYmVsQ29sb3I9dGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5zdGF0ZUxhYmVsQ29sb3I9dGhpcy5zdGF0ZUxhYmVsQ29sb3J8fHRoaXMuc3RhdGVCa2d8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnN0YXRlQmtnPXRoaXMuc3RhdGVCa2d8fHRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQmFja2dyb3VuZENvbG9yPXRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3J8fHRoaXMuc3RhdGVCa2csdGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlQmFja2dyb3VuZHx8dGhpcy5iYWNrZ3JvdW5kfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5hbHRCYWNrZ3JvdW5kPXRoaXMuYWx0QmFja2dyb3VuZHx8IiM1NTUiLHRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kPXRoaXMuY29tcG9zaXRlVGl0bGVCYWNrZ3JvdW5kfHx0aGlzLm1haW5Ca2csdGhpcy5jb21wb3NpdGVCb3JkZXI9dGhpcy5jb21wb3NpdGVCb3JkZXJ8fHRoaXMubm9kZUJvcmRlcix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjZjRmNGY0Iix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fCIjMGIwMDAwIix0aGlzLnBpZTI9dGhpcy5waWUyfHwiIzRkMTAzNyIsdGhpcy5waWUzPXRoaXMucGllM3x8IiMzZjUyNTgiLHRoaXMucGllND10aGlzLnBpZTR8fCIjNGYyZjFiIix0aGlzLnBpZTU9dGhpcy5waWU1fHwiIzZlMGEwYSIsdGhpcy5waWU2PXRoaXMucGllNnx8IiMzYjAwNDgiLHRoaXMucGllNz10aGlzLnBpZTd8fCIjOTk1YTAxIix0aGlzLnBpZTg9dGhpcy5waWU4fHwiIzE1NDcwNiIsdGhpcy5waWU5PXRoaXMucGllOXx8IiMxNjE3MjIiLHRoaXMucGllMTA9dGhpcy5waWUxMHx8IiMwMDI5NmYiLHRoaXMucGllMTE9dGhpcy5waWUxMXx8IiMwMTYyOWMiLHRoaXMucGllMTI9dGhpcy5waWUxMnx8IiMwMTAwMjkiLHRoaXMucGllVGl0bGVUZXh0U2l6ZT10aGlzLnBpZVRpdGxlVGV4dFNpemV8fCIyNXB4Iix0aGlzLnBpZVRpdGxlVGV4dENvbG9yPXRoaXMucGllVGl0bGVUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTZWN0aW9uVGV4dFNpemU9dGhpcy5waWVTZWN0aW9uVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3I9dGhpcy5waWVTZWN0aW9uVGV4dENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnBpZUxlZ2VuZFRleHRTaXplPXRoaXMucGllTGVnZW5kVGV4dFNpemV8fCIxN3B4Iix0aGlzLnBpZUxlZ2VuZFRleHRDb2xvcj10aGlzLnBpZUxlZ2VuZFRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVN0cm9rZUNvbG9yPXRoaXMucGllU3Ryb2tlQ29sb3J8fCJibGFjayIsdGhpcy5waWVTdHJva2VXaWR0aD10aGlzLnBpZVN0cm9rZVdpZHRofHwiMnB4Iix0aGlzLnBpZU9wYWNpdHk9dGhpcy5waWVPcGFjaXR5fHwiMC43Iix0aGlzLmNsYXNzVGV4dD10aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fCh0aGlzLmRhcmtNb2RlP09iamVjdChydC5kYXJrZW4pKHRoaXMuc2Vjb25kYXJ5Q29sb3IsMzApOnRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMucmVsYXRpb25MYWJlbENvbG9yPXRoaXMucmVsYXRpb25MYWJlbENvbG9yfHx0aGlzLmFjdG9yVGV4dENvbG9yfX0se2tleToiY2FsY3VsYXRlIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCJvYmplY3QiPT09Y3QodCkpe3ZhciBuPU9iamVjdC5rZXlzKHQpO24uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpLHRoaXMudXBkYXRlQ29sb3JzKCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dPXRbbl19KSl9ZWxzZSB0aGlzLnVwZGF0ZUNvbG9ycygpfX1dKSYmdXQoZS5wcm90b3R5cGUsbiksciYmdXQoZSxyKSx0fSgpO2Z1bmN0aW9uIGh0KHQpe3JldHVybihodD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIGZ0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19dmFyIGR0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuYmFja2dyb3VuZD0iI2Y0ZjRmNCIsdGhpcy5wcmltYXJ5Q29sb3I9IiNFQ0VDRkYiLHRoaXMuc2Vjb25kYXJ5Q29sb3I9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwfSksdGhpcy5zZWNvbmRhcnlDb2xvcj0iI2ZmZmZkZSIsdGhpcy50ZXJ0aWFyeUNvbG9yPU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi0xNjB9KSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1pdCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWl0KHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy50ZXJ0aWFyeUNvbG9yKSx0aGlzLmxpbmVDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLmJhY2tncm91bmQpLHRoaXMudGV4dENvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy5iYWNrZ3JvdW5kPSJ3aGl0ZSIsdGhpcy5tYWluQmtnPSIjRUNFQ0ZGIix0aGlzLnNlY29uZEJrZz0iI2ZmZmZkZSIsdGhpcy5saW5lQ29sb3I9IiMzMzMzMzMiLHRoaXMuYm9yZGVyMT0iIzkzNzBEQiIsdGhpcy5ib3JkZXIyPSIjYWFhYTMzIix0aGlzLmFycm93aGVhZENvbG9yPSIjMzMzMzMzIix0aGlzLmZvbnRGYW1pbHk9JyJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZicsdGhpcy5mb250U2l6ZT0iMTZweCIsdGhpcy5sYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMudGV4dENvbG9yPSIjMzMzIix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcjI9ImNhbGN1bGF0ZWQiLHRoaXMudGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dExpZ2h0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDb2xvcj10aGlzLnRhc2tUZXh0TGlnaHRDb2xvcix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPXRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuY3JpdEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNlY3Rpb25Ca2dDb2xvcj1PYmplY3QocnQucmdiYSkoMTAyLDEwMiwyNTUsLjQ5KSx0aGlzLmFsdFNlY3Rpb25Ca2dDb2xvcj0id2hpdGUiLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj0iI2ZmZjQwMCIsdGhpcy50YXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMudGFza0JrZ0NvbG9yPSIjOGE5MGRkIix0aGlzLnRhc2tUZXh0TGlnaHRDb2xvcj0id2hpdGUiLHRoaXMudGFza1RleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dERhcmtDb2xvcj0iYmxhY2siLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRDbGlja2FibGVDb2xvcj0iIzAwMzE2MyIsdGhpcy5hY3RpdmVUYXNrQm9yZGVyQ29sb3I9IiM1MzRmYmMiLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPSIjYmZjN2ZmIix0aGlzLmdyaWRDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQmtnQ29sb3I9ImxpZ2h0Z3JleSIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJncmV5Iix0aGlzLmNyaXRCb3JkZXJDb2xvcj0iI2ZmODg4OCIsdGhpcy5jcml0QmtnQ29sb3I9InJlZCIsdGhpcy50b2RheUxpbmVDb2xvcj0icmVkIix0aGlzLmxhYmVsQ29sb3I9ImJsYWNrIix0aGlzLmVycm9yQmtnQ29sb3I9IiM1NTIyMjIiLHRoaXMuZXJyb3JUZXh0Q29sb3I9IiM1NTIyMjIiLHRoaXMudXBkYXRlQ29sb3JzKCl9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMudGl0bGVDb2xvcj10aGlzLnRleHRDb2xvcix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9dGhpcy5sYWJlbEJhY2tncm91bmQsdGhpcy5hY3RvckJvcmRlcj1PYmplY3QocnQubGlnaHRlbikodGhpcy5ib3JkZXIxLDIzKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMuc2lnbmFsVGV4dENvbG9yPXRoaXMudGV4dENvbG9yLHRoaXMubGFiZWxCb3hCb3JkZXJDb2xvcj10aGlzLmFjdG9yQm9yZGVyLHRoaXMubGFiZWxUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLmxvb3BUZXh0Q29sb3I9dGhpcy5hY3RvclRleHRDb2xvcix0aGlzLm5vdGVCb3JkZXJDb2xvcj10aGlzLmJvcmRlcjIsdGhpcy5ub3RlVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy50YXNrVGV4dENvbG9yPXRoaXMudGFza1RleHRMaWdodENvbG9yLHRoaXMudGFza1RleHRPdXRzaWRlQ29sb3I9dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMubm9kZUJvcmRlcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuZXJyb3JCa2dDb2xvcj10aGlzLmVycm9yQmtnQ29sb3J8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmVycm9yVGV4dENvbG9yPXRoaXMuZXJyb3JUZXh0Q29sb3J8fHRoaXMudGVydGlhcnlUZXh0Q29sb3IsdGhpcy50cmFuc2l0aW9uQ29sb3I9dGhpcy50cmFuc2l0aW9uQ29sb3J8fHRoaXMubGluZUNvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnBpZTI9dGhpcy5waWUyfHx0aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMucGllMz10aGlzLnBpZTN8fE9iamVjdChydC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotNDB9KSx0aGlzLnBpZTQ9dGhpcy5waWU0fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7bDotMTB9KSx0aGlzLnBpZTU9dGhpcy5waWU1fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNj10aGlzLnBpZTZ8fE9iamVjdChydC5hZGp1c3QpKHRoaXMudGVydGlhcnlDb2xvcix7bDotMjB9KSx0aGlzLnBpZTc9dGhpcy5waWU3fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi0yMH0pLHRoaXMucGllOD10aGlzLnBpZTh8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02MCxsOi00MH0pLHRoaXMucGllOT10aGlzLnBpZTl8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjEyMCxsOi00MH0pLHRoaXMucGllMTA9dGhpcy5waWUxMHx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotNDB9KSx0aGlzLnBpZTExPXRoaXMucGllMTF8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi05MCxsOi00MH0pLHRoaXMucGllMTI9dGhpcy5waWUxMnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTIwLGw6LTMwfSksdGhpcy5waWVUaXRsZVRleHRTaXplPXRoaXMucGllVGl0bGVUZXh0U2l6ZXx8IjI1cHgiLHRoaXMucGllVGl0bGVUZXh0Q29sb3I9dGhpcy5waWVUaXRsZVRleHRDb2xvcnx8dGhpcy50YXNrVGV4dERhcmtDb2xvcix0aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZT10aGlzLnBpZVNlY3Rpb25UZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllU2VjdGlvblRleHRDb2xvcj10aGlzLnBpZVNlY3Rpb25UZXh0Q29sb3J8fHRoaXMudGV4dENvbG9yLHRoaXMucGllTGVnZW5kVGV4dFNpemU9dGhpcy5waWVMZWdlbmRUZXh0U2l6ZXx8IjE3cHgiLHRoaXMucGllTGVnZW5kVGV4dENvbG9yPXRoaXMucGllTGVnZW5kVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU3Ryb2tlQ29sb3I9dGhpcy5waWVTdHJva2VDb2xvcnx8ImJsYWNrIix0aGlzLnBpZVN0cm9rZVdpZHRoPXRoaXMucGllU3Ryb2tlV2lkdGh8fCIycHgiLHRoaXMucGllT3BhY2l0eT10aGlzLnBpZU9wYWNpdHl8fCIwLjciLHRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kPXRoaXMucmVxdWlyZW1lbnRCYWNrZ3JvdW5kfHx0aGlzLnByaW1hcnlDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3I9dGhpcy5yZXF1aXJlbWVudEJvcmRlckNvbG9yfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZT10aGlzLnJlcXVpcmVtZW50Qm9yZGVyU2l6ZXx8dGhpcy5wcmltYXJ5Qm9yZGVyQ29sb3IsdGhpcy5yZXF1aXJlbWVudFRleHRDb2xvcj10aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yfHx0aGlzLnByaW1hcnlUZXh0Q29sb3IsdGhpcy5yZWxhdGlvbkNvbG9yPXRoaXMucmVsYXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5yZWxhdGlvbkxhYmVsQmFja2dyb3VuZD10aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kfHx0aGlzLmxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PWh0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJmZ0KGUucHJvdG90eXBlLG4pLHImJmZ0KGUsciksdH0oKTtmdW5jdGlvbiBwdCh0KXtyZXR1cm4ocHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiB5dCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBndD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLmJhY2tncm91bmQ9IiNmNGY0ZjQiLHRoaXMucHJpbWFyeUNvbG9yPSIjY2RlNDk4Iix0aGlzLnNlY29uZGFyeUNvbG9yPSIjY2RmZmIyIix0aGlzLmJhY2tncm91bmQ9IndoaXRlIix0aGlzLm1haW5Ca2c9IiNjZGU0OTgiLHRoaXMuc2Vjb25kQmtnPSIjY2RmZmIyIix0aGlzLmxpbmVDb2xvcj0iZ3JlZW4iLHRoaXMuYm9yZGVyMT0iIzEzNTQwYyIsdGhpcy5ib3JkZXIyPSIjNmVhYTQ5Iix0aGlzLmFycm93aGVhZENvbG9yPSJncmVlbiIsdGhpcy5mb250RmFtaWx5PScidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWYnLHRoaXMuZm9udFNpemU9IjE2cHgiLHRoaXMudGVydGlhcnlDb2xvcj1PYmplY3QocnQubGlnaHRlbikoIiNjZGU0OTgiLDEwKSx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcj1pdCh0aGlzLnByaW1hcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnNlY29uZGFyeUJvcmRlckNvbG9yPWl0KHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5kYXJrTW9kZSksdGhpcy50ZXJ0aWFyeUJvcmRlckNvbG9yPWl0KHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnByaW1hcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMuc2Vjb25kYXJ5VGV4dENvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuc2Vjb25kYXJ5Q29sb3IpLHRoaXMudGVydGlhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5wcmltYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSIjMzMzIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IiNlOGU4ZTgiLHRoaXMuYWN0b3JCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JCa2c9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0b3JUZXh0Q29sb3I9ImJsYWNrIix0aGlzLmFjdG9yTGluZUNvbG9yPSJncmV5Iix0aGlzLnNpZ25hbENvbG9yPSIjMzMzIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iIzMzMyIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9IiMzMjY5MzIiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSIjZmZmNWFkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9IiM2ZWFhNDkiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSIjNmVhYTQ5Iix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9IiM0ODdlM2EiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJibGFjayIsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrVGV4dENsaWNrYWJsZUNvbG9yPSIjMDAzMTYzIix0aGlzLmFjdGl2ZVRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5hY3RpdmVUYXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZ3JpZENvbG9yPSJsaWdodGdyZXkiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0ibGlnaHRncmV5Iix0aGlzLmRvbmVUYXNrQm9yZGVyQ29sb3I9ImdyZXkiLHRoaXMuY3JpdEJvcmRlckNvbG9yPSIjZmY4ODg4Iix0aGlzLmNyaXRCa2dDb2xvcj0icmVkIix0aGlzLnRvZGF5TGluZUNvbG9yPSJyZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5vZGVCa2c9dGhpcy5tYWluQmtnLHRoaXMubm9kZUJvcmRlcj10aGlzLmJvcmRlcjEsdGhpcy5jbHVzdGVyQmtnPXRoaXMuc2Vjb25kQmtnLHRoaXMuY2x1c3RlckJvcmRlcj10aGlzLmJvcmRlcjIsdGhpcy5kZWZhdWx0TGlua0NvbG9yPXRoaXMubGluZUNvbG9yLHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KHJ0LmRhcmtlbikodGhpcy5tYWluQmtnLDIwKSx0aGlzLmFjdG9yQmtnPXRoaXMubWFpbkJrZyx0aGlzLmxhYmVsQm94QmtnQ29sb3I9dGhpcy5hY3RvckJrZyx0aGlzLmxhYmVsVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMuYWN0b3JUZXh0Q29sb3IsdGhpcy5ub3RlQm9yZGVyQ29sb3I9dGhpcy5ib3JkZXIyLHRoaXMubm90ZVRleHRDb2xvcj10aGlzLmFjdG9yVGV4dENvbG9yLHRoaXMudGFza0JvcmRlckNvbG9yPXRoaXMuYm9yZGVyMSx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2YwZjBmMCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLmNvbXBvc2l0ZUJvcmRlcj10aGlzLmNvbXBvc2l0ZUJvcmRlcnx8dGhpcy5ub2RlQm9yZGVyLHRoaXMuaW5uZXJFbmRCYWNrZ3JvdW5kPXRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMuc3BlY2lhbFN0YXRlQ29sb3I9dGhpcy5saW5lQ29sb3IsdGhpcy5lcnJvckJrZ0NvbG9yPXRoaXMuZXJyb3JCa2dDb2xvcnx8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZXJyb3JUZXh0Q29sb3I9dGhpcy5lcnJvclRleHRDb2xvcnx8dGhpcy50ZXJ0aWFyeVRleHRDb2xvcix0aGlzLnRyYW5zaXRpb25Db2xvcj10aGlzLnRyYW5zaXRpb25Db2xvcnx8dGhpcy5saW5lQ29sb3IsdGhpcy5jbGFzc1RleHQ9dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuZmlsbFR5cGUwPXRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZmlsbFR5cGUxPXRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5maWxsVHlwZTI9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjR9KSx0aGlzLmZpbGxUeXBlMz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTQ9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTU9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDotNjR9KSx0aGlzLmZpbGxUeXBlNj1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjh9KSx0aGlzLmZpbGxUeXBlNz1PYmplY3QocnQuYWRqdXN0KSh0aGlzLnNlY29uZGFyeUNvbG9yLHtoOjEyOH0pLHRoaXMucGllMT10aGlzLnBpZTF8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucGllMj10aGlzLnBpZTJ8fHRoaXMuc2Vjb25kYXJ5Q29sb3IsdGhpcy5waWUzPXRoaXMucGllM3x8dGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMucGllND10aGlzLnBpZTR8fE9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtsOi0zMH0pLHRoaXMucGllNT10aGlzLnBpZTV8fE9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2w6LTMwfSksdGhpcy5waWU2PXRoaXMucGllNnx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy50ZXJ0aWFyeUNvbG9yLHtoOjQwLGw6LTQwfSksdGhpcy5waWU3PXRoaXMucGllN3x8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6NjAsbDotMTB9KSx0aGlzLnBpZTg9dGhpcy5waWU4fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDotNjAsbDotMTB9KSx0aGlzLnBpZTk9dGhpcy5waWU5fHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDowfSksdGhpcy5waWUxMD10aGlzLnBpZTEwfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDo2MCxsOi01MH0pLHRoaXMucGllMTE9dGhpcy5waWUxMXx8T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTYwLGw6LTUwfSksdGhpcy5waWUxMj10aGlzLnBpZTEyfHxPYmplY3QocnQuYWRqdXN0KSh0aGlzLnByaW1hcnlDb2xvcix7aDoxMjAsbDotNTB9KSx0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PXB0KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJnl0KGUucHJvdG90eXBlLG4pLHImJnl0KGUsciksdH0oKTtmdW5jdGlvbiBtdCh0KXtyZXR1cm4obXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiB2dCh0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgcj1lW25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsci5rZXkscil9fXZhciBidD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXshZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSx0aGlzLnByaW1hcnlDb2xvcj0iI2VlZSIsdGhpcy5jb250cmFzdD0iIzcwNzA3MCIsdGhpcy5zZWNvbmRhcnlDb2xvcj1PYmplY3QocnQubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5iYWNrZ3JvdW5kPSIjZmZmZmZmIix0aGlzLnRlcnRpYXJ5Q29sb3I9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6LTE2MH0pLHRoaXMucHJpbWFyeUJvcmRlckNvbG9yPWl0KHRoaXMucHJpbWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMuc2Vjb25kYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy5zZWNvbmRhcnlDb2xvcix0aGlzLmRhcmtNb2RlKSx0aGlzLnRlcnRpYXJ5Qm9yZGVyQ29sb3I9aXQodGhpcy50ZXJ0aWFyeUNvbG9yLHRoaXMuZGFya01vZGUpLHRoaXMucHJpbWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnByaW1hcnlDb2xvciksdGhpcy5zZWNvbmRhcnlUZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5zZWNvbmRhcnlDb2xvciksdGhpcy50ZXJ0aWFyeVRleHRDb2xvcj1PYmplY3QocnQuaW52ZXJ0KSh0aGlzLnRlcnRpYXJ5Q29sb3IpLHRoaXMubGluZUNvbG9yPU9iamVjdChydC5pbnZlcnQpKHRoaXMuYmFja2dyb3VuZCksdGhpcy50ZXh0Q29sb3I9T2JqZWN0KHJ0LmludmVydCkodGhpcy5iYWNrZ3JvdW5kKSx0aGlzLm1haW5Ca2c9IiNlZWUiLHRoaXMuc2Vjb25kQmtnPSJjYWxjdWxhdGVkIix0aGlzLmxpbmVDb2xvcj0iIzY2NiIsdGhpcy5ib3JkZXIxPSIjOTk5Iix0aGlzLmJvcmRlcjI9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZT0iI2ZmYSIsdGhpcy50ZXh0PSIjMzMzIix0aGlzLmNyaXRpY2FsPSIjZDQyIix0aGlzLmRvbmU9IiNiYmIiLHRoaXMuYXJyb3doZWFkQ29sb3I9IiMzMzMzMzMiLHRoaXMuZm9udEZhbWlseT0nInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyx0aGlzLmZvbnRTaXplPSIxNnB4Iix0aGlzLm5vZGVCa2c9ImNhbGN1bGF0ZWQiLHRoaXMubm9kZUJvcmRlcj0iY2FsY3VsYXRlZCIsdGhpcy5jbHVzdGVyQmtnPSJjYWxjdWxhdGVkIix0aGlzLmNsdXN0ZXJCb3JkZXI9ImNhbGN1bGF0ZWQiLHRoaXMuZGVmYXVsdExpbmtDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50aXRsZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmVkZ2VMYWJlbEJhY2tncm91bmQ9IndoaXRlIix0aGlzLmFjdG9yQm9yZGVyPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yQmtnPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdG9yTGluZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnNpZ25hbFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmxhYmVsQm94Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubG9vcFRleHRDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ub3RlQm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubm90ZUJrZ0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLm5vdGVUZXh0Q29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWN0aXZhdGlvbkJvcmRlckNvbG9yPSIjNjY2Iix0aGlzLmFjdGl2YXRpb25Ca2dDb2xvcj0iI2Y0ZjRmNCIsdGhpcy5zZXF1ZW5jZU51bWJlckNvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuYWx0U2VjdGlvbkJrZ0NvbG9yPSJ3aGl0ZSIsdGhpcy5zZWN0aW9uQmtnQ29sb3IyPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tCb3JkZXJDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy50YXNrQmtnQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudGFza1RleHRMaWdodENvbG9yPSJ3aGl0ZSIsdGhpcy50YXNrVGV4dENvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0RGFya0NvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0T3V0c2lkZUNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLnRhc2tUZXh0Q2xpY2thYmxlQ29sb3I9IiMwMDMxNjMiLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmFjdGl2ZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5ncmlkQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMuZG9uZVRhc2tCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5kb25lVGFza0JvcmRlckNvbG9yPSJjYWxjdWxhdGVkIix0aGlzLmNyaXRCa2dDb2xvcj0iY2FsY3VsYXRlZCIsdGhpcy5jcml0Qm9yZGVyQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMudG9kYXlMaW5lQ29sb3I9ImNhbGN1bGF0ZWQiLHRoaXMubGFiZWxDb2xvcj0iYmxhY2siLHRoaXMuZXJyb3JCa2dDb2xvcj0iIzU1MjIyMiIsdGhpcy5lcnJvclRleHRDb2xvcj0iIzU1MjIyMiJ9dmFyIGUsbixyO3JldHVybiBlPXQsKG49W3trZXk6InVwZGF0ZUNvbG9ycyIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNlY29uZEJrZz1PYmplY3QocnQubGlnaHRlbikodGhpcy5jb250cmFzdCw1NSksdGhpcy5ib3JkZXIyPXRoaXMuY29udHJhc3QsdGhpcy5ub2RlQmtnPXRoaXMubWFpbkJrZyx0aGlzLm5vZGVCb3JkZXI9dGhpcy5ib3JkZXIxLHRoaXMuY2x1c3RlckJrZz10aGlzLnNlY29uZEJrZyx0aGlzLmNsdXN0ZXJCb3JkZXI9dGhpcy5ib3JkZXIyLHRoaXMuZGVmYXVsdExpbmtDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnRpdGxlQ29sb3I9dGhpcy50ZXh0LHRoaXMuYWN0b3JCb3JkZXI9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMuYm9yZGVyMSwyMyksdGhpcy5hY3RvckJrZz10aGlzLm1haW5Ca2csdGhpcy5hY3RvclRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5hY3RvckxpbmVDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLnNpZ25hbENvbG9yPXRoaXMudGV4dCx0aGlzLnNpZ25hbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sYWJlbEJveEJrZ0NvbG9yPXRoaXMuYWN0b3JCa2csdGhpcy5sYWJlbEJveEJvcmRlckNvbG9yPXRoaXMuYWN0b3JCb3JkZXIsdGhpcy5sYWJlbFRleHRDb2xvcj10aGlzLnRleHQsdGhpcy5sb29wVGV4dENvbG9yPXRoaXMudGV4dCx0aGlzLm5vdGVCb3JkZXJDb2xvcj0iIzk5OSIsdGhpcy5ub3RlQmtnQ29sb3I9IiM2NjYiLHRoaXMubm90ZVRleHRDb2xvcj0iI2ZmZiIsdGhpcy5zZWN0aW9uQmtnQ29sb3I9T2JqZWN0KHJ0LmxpZ2h0ZW4pKHRoaXMuY29udHJhc3QsMzApLHRoaXMuc2VjdGlvbkJrZ0NvbG9yMj1PYmplY3QocnQubGlnaHRlbikodGhpcy5jb250cmFzdCwzMCksdGhpcy50YXNrQm9yZGVyQ29sb3I9T2JqZWN0KHJ0LmRhcmtlbikodGhpcy5jb250cmFzdCwxMCksdGhpcy50YXNrQmtnQ29sb3I9dGhpcy5jb250cmFzdCx0aGlzLnRhc2tUZXh0Q29sb3I9dGhpcy50YXNrVGV4dExpZ2h0Q29sb3IsdGhpcy50YXNrVGV4dERhcmtDb2xvcj10aGlzLnRleHQsdGhpcy50YXNrVGV4dE91dHNpZGVDb2xvcj10aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMuYWN0aXZlVGFza0JvcmRlckNvbG9yPXRoaXMudGFza0JvcmRlckNvbG9yLHRoaXMuYWN0aXZlVGFza0JrZ0NvbG9yPXRoaXMubWFpbkJrZyx0aGlzLmdyaWRDb2xvcj1PYmplY3QocnQubGlnaHRlbikodGhpcy5ib3JkZXIxLDMwKSx0aGlzLmRvbmVUYXNrQmtnQ29sb3I9dGhpcy5kb25lLHRoaXMuZG9uZVRhc2tCb3JkZXJDb2xvcj10aGlzLmxpbmVDb2xvcix0aGlzLmNyaXRCa2dDb2xvcj10aGlzLmNyaXRpY2FsLHRoaXMuY3JpdEJvcmRlckNvbG9yPU9iamVjdChydC5kYXJrZW4pKHRoaXMuY3JpdEJrZ0NvbG9yLDEwKSx0aGlzLnRvZGF5TGluZUNvbG9yPXRoaXMuY3JpdEJrZ0NvbG9yLHRoaXMudHJhbnNpdGlvbkNvbG9yPXRoaXMudHJhbnNpdGlvbkNvbG9yfHwiIzAwMCIsdGhpcy50cmFuc2l0aW9uTGFiZWxDb2xvcj10aGlzLnRyYW5zaXRpb25MYWJlbENvbG9yfHx0aGlzLnRleHRDb2xvcix0aGlzLnN0YXRlTGFiZWxDb2xvcj10aGlzLnN0YXRlTGFiZWxDb2xvcnx8dGhpcy5zdGF0ZUJrZ3x8dGhpcy5wcmltYXJ5VGV4dENvbG9yLHRoaXMuc3RhdGVCa2c9dGhpcy5zdGF0ZUJrZ3x8dGhpcy5tYWluQmtnLHRoaXMubGFiZWxCYWNrZ3JvdW5kQ29sb3I9dGhpcy5sYWJlbEJhY2tncm91bmRDb2xvcnx8dGhpcy5zdGF0ZUJrZyx0aGlzLmNvbXBvc2l0ZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0aGlzLmJhY2tncm91bmR8fHRoaXMudGVydGlhcnlDb2xvcix0aGlzLmFsdEJhY2tncm91bmQ9dGhpcy5hbHRCYWNrZ3JvdW5kfHwiI2Y0ZjRmNCIsdGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQ9dGhpcy5jb21wb3NpdGVUaXRsZUJhY2tncm91bmR8fHRoaXMubWFpbkJrZyx0aGlzLnN0YXRlQm9yZGVyPXRoaXMuc3RhdGVCb3JkZXJ8fCIjMDAwIix0aGlzLmlubmVyRW5kQmFja2dyb3VuZD10aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnNwZWNpYWxTdGF0ZUNvbG9yPSIjMjIyIix0aGlzLmVycm9yQmtnQ29sb3I9dGhpcy5lcnJvckJrZ0NvbG9yfHx0aGlzLnRlcnRpYXJ5Q29sb3IsdGhpcy5lcnJvclRleHRDb2xvcj10aGlzLmVycm9yVGV4dENvbG9yfHx0aGlzLnRlcnRpYXJ5VGV4dENvbG9yLHRoaXMuY2xhc3NUZXh0PXRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLmZpbGxUeXBlMD10aGlzLnByaW1hcnlDb2xvcix0aGlzLmZpbGxUeXBlMT10aGlzLnNlY29uZGFyeUNvbG9yLHRoaXMuZmlsbFR5cGUyPU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOjY0fSksdGhpcy5maWxsVHlwZTM9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDo2NH0pLHRoaXMuZmlsbFR5cGU0PU9iamVjdChydC5hZGp1c3QpKHRoaXMucHJpbWFyeUNvbG9yLHtoOi02NH0pLHRoaXMuZmlsbFR5cGU1PU9iamVjdChydC5hZGp1c3QpKHRoaXMuc2Vjb25kYXJ5Q29sb3Ise2g6LTY0fSksdGhpcy5maWxsVHlwZTY9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5wcmltYXJ5Q29sb3Ise2g6MTI4fSksdGhpcy5maWxsVHlwZTc9T2JqZWN0KHJ0LmFkanVzdCkodGhpcy5zZWNvbmRhcnlDb2xvcix7aDoxMjh9KSx0aGlzLnBpZTE9dGhpcy5waWUxfHwiI0Y0RjRGNCIsdGhpcy5waWUyPXRoaXMucGllMnx8IiM1NTUiLHRoaXMucGllMz10aGlzLnBpZTN8fCIjQkJCIix0aGlzLnBpZTQ9dGhpcy5waWU0fHwiIzc3NyIsdGhpcy5waWU1PXRoaXMucGllNXx8IiM5OTkiLHRoaXMucGllNj10aGlzLnBpZTZ8fCIjREREIix0aGlzLnBpZTc9dGhpcy5waWU3fHwiI0ZGRiIsdGhpcy5waWU4PXRoaXMucGllOHx8IiNEREQiLHRoaXMucGllOT10aGlzLnBpZTl8fCIjQkJCIix0aGlzLnBpZTEwPXRoaXMucGllMTB8fCIjOTk5Iix0aGlzLnBpZTExPXRoaXMucGllMTF8fCIjNzc3Iix0aGlzLnBpZTEyPXRoaXMucGllMTJ8fCIjNTU1Iix0aGlzLnBpZVRpdGxlVGV4dFNpemU9dGhpcy5waWVUaXRsZVRleHRTaXplfHwiMjVweCIsdGhpcy5waWVUaXRsZVRleHRDb2xvcj10aGlzLnBpZVRpdGxlVGV4dENvbG9yfHx0aGlzLnRhc2tUZXh0RGFya0NvbG9yLHRoaXMucGllU2VjdGlvblRleHRTaXplPXRoaXMucGllU2VjdGlvblRleHRTaXplfHwiMTdweCIsdGhpcy5waWVTZWN0aW9uVGV4dENvbG9yPXRoaXMucGllU2VjdGlvblRleHRDb2xvcnx8dGhpcy50ZXh0Q29sb3IsdGhpcy5waWVMZWdlbmRUZXh0U2l6ZT10aGlzLnBpZUxlZ2VuZFRleHRTaXplfHwiMTdweCIsdGhpcy5waWVMZWdlbmRUZXh0Q29sb3I9dGhpcy5waWVMZWdlbmRUZXh0Q29sb3J8fHRoaXMudGFza1RleHREYXJrQ29sb3IsdGhpcy5waWVTdHJva2VDb2xvcj10aGlzLnBpZVN0cm9rZUNvbG9yfHwiYmxhY2siLHRoaXMucGllU3Ryb2tlV2lkdGg9dGhpcy5waWVTdHJva2VXaWR0aHx8IjJweCIsdGhpcy5waWVPcGFjaXR5PXRoaXMucGllT3BhY2l0eXx8IjAuNyIsdGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmQ9dGhpcy5yZXF1aXJlbWVudEJhY2tncm91bmR8fHRoaXMucHJpbWFyeUNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJDb2xvcj10aGlzLnJlcXVpcmVtZW50Qm9yZGVyQ29sb3J8fHRoaXMucHJpbWFyeUJvcmRlckNvbG9yLHRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplPXRoaXMucmVxdWlyZW1lbnRCb3JkZXJTaXplfHx0aGlzLnByaW1hcnlCb3JkZXJDb2xvcix0aGlzLnJlcXVpcmVtZW50VGV4dENvbG9yPXRoaXMucmVxdWlyZW1lbnRUZXh0Q29sb3J8fHRoaXMucHJpbWFyeVRleHRDb2xvcix0aGlzLnJlbGF0aW9uQ29sb3I9dGhpcy5yZWxhdGlvbkNvbG9yfHx0aGlzLmxpbmVDb2xvcix0aGlzLnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kPXRoaXMucmVsYXRpb25MYWJlbEJhY2tncm91bmR8fHRoaXMuZWRnZUxhYmVsQmFja2dyb3VuZCx0aGlzLnJlbGF0aW9uTGFiZWxDb2xvcj10aGlzLnJlbGF0aW9uTGFiZWxDb2xvcnx8dGhpcy5hY3RvclRleHRDb2xvcn19LHtrZXk6ImNhbGN1bGF0ZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigib2JqZWN0Ij09PW10KHQpKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLmZvckVhY2goKGZ1bmN0aW9uKG4pe2Vbbl09dFtuXX0pKSx0aGlzLnVwZGF0ZUNvbG9ycygpLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7ZVtuXT10W25dfSkpfWVsc2UgdGhpcy51cGRhdGVDb2xvcnMoKX19XSkmJnZ0KGUucHJvdG90eXBlLG4pLHImJnZ0KGUsciksdH0oKSx4dD17YmFzZTp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IHN0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGFyazp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGx0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZGVmYXVsdDp7Z2V0VGhlbWVWYXJpYWJsZXM6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGR0O3JldHVybiBlLmNhbGN1bGF0ZSh0KSxlfX0sZm9yZXN0OntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgZ3Q7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fSxuZXV0cmFsOntnZXRUaGVtZVZhcmlhYmxlczpmdW5jdGlvbih0KXt2YXIgZT1uZXcgYnQ7cmV0dXJuIGUuY2FsY3VsYXRlKHQpLGV9fX07ZnVuY3Rpb24gX3QodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGt0KHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBrdCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4ga3QodCxlKX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24ga3QodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiB3dCh0KXtyZXR1cm4od3Q9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgVHQ9e3RoZW1lOiJkZWZhdWx0Iix0aGVtZVZhcmlhYmxlczp4dC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKCksdGhlbWVDU1M6dm9pZCAwLG1heFRleHRTaXplOjVlNCxmb250RmFtaWx5OicidHJlYnVjaGV0IG1zIiwgdmVyZGFuYSwgYXJpYWwsIHNhbnMtc2VyaWY7Jyxsb2dMZXZlbDo1LHNlY3VyaXR5TGV2ZWw6InN0cmljdCIsc3RhcnRPbkxvYWQ6ITAsYXJyb3dNYXJrZXJBYnNvbHV0ZTohMSxzZWN1cmU6WyJzZWN1cmUiLCJzZWN1cml0eUxldmVsIiwic3RhcnRPbkxvYWQiLCJtYXhUZXh0U2l6ZSJdLGRldGVybWluaXN0aWNJZHM6ITEsZGV0ZXJtaW5pc3RpY0lEU2VlZDp2b2lkIDAsZmxvd2NoYXJ0OntkaWFncmFtUGFkZGluZzo4LGh0bWxMYWJlbHM6ITAsbm9kZVNwYWNpbmc6NTAscmFua1NwYWNpbmc6NTAsY3VydmU6ImJhc2lzIixwYWRkaW5nOjE1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtZDMifSxzZXF1ZW5jZTp7YWN0aXZhdGlvbldpZHRoOjEwLGRpYWdyYW1NYXJnaW5YOjUwLGRpYWdyYW1NYXJnaW5ZOjEwLGFjdG9yTWFyZ2luOjUwLHdpZHRoOjE1MCxoZWlnaHQ6NjUsYm94TWFyZ2luOjEwLGJveFRleHRNYXJnaW46NSxub3RlTWFyZ2luOjEwLG1lc3NhZ2VNYXJnaW46MzUsbWVzc2FnZUFsaWduOiJjZW50ZXIiLG1pcnJvckFjdG9yczohMCxib3R0b21NYXJnaW5BZGo6MSx1c2VNYXhXaWR0aDohMCxyaWdodEFuZ2xlczohMSxzaG93U2VxdWVuY2VOdW1iZXJzOiExLGFjdG9yRm9udFNpemU6MTQsYWN0b3JGb250RmFtaWx5OiciT3Blbi1TYW5zIiwgInNhbnMtc2VyaWYiJyxhY3RvckZvbnRXZWlnaHQ6NDAwLG5vdGVGb250U2l6ZToxNCxub3RlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxub3RlRm9udFdlaWdodDo0MDAsbm90ZUFsaWduOiJjZW50ZXIiLG1lc3NhZ2VGb250U2l6ZToxNixtZXNzYWdlRm9udEZhbWlseTonInRyZWJ1Y2hldCBtcyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxtZXNzYWdlRm9udFdlaWdodDo0MDAsd3JhcDohMSx3cmFwUGFkZGluZzoxMCxsYWJlbEJveFdpZHRoOjUwLGxhYmVsQm94SGVpZ2h0OjIwLG1lc3NhZ2VGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0aGlzLm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnRoaXMubWVzc2FnZUZvbnRXZWlnaHR9fSxub3RlRm9udDpmdW5jdGlvbigpe3JldHVybntmb250RmFtaWx5OnRoaXMubm90ZUZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5ub3RlRm9udFNpemUsZm9udFdlaWdodDp0aGlzLm5vdGVGb250V2VpZ2h0fX0sYWN0b3JGb250OmZ1bmN0aW9uKCl7cmV0dXJue2ZvbnRGYW1pbHk6dGhpcy5hY3RvckZvbnRGYW1pbHksZm9udFNpemU6dGhpcy5hY3RvckZvbnRTaXplLGZvbnRXZWlnaHQ6dGhpcy5hY3RvckZvbnRXZWlnaHR9fX0sZ2FudHQ6e3RpdGxlVG9wTWFyZ2luOjI1LGJhckhlaWdodDoyMCxiYXJHYXA6NCx0b3BQYWRkaW5nOjUwLHJpZ2h0UGFkZGluZzo3NSxsZWZ0UGFkZGluZzo3NSxncmlkTGluZVN0YXJ0UGFkZGluZzozNSxmb250U2l6ZToxMSxzZWN0aW9uRm9udFNpemU6MTEsbnVtYmVyU2VjdGlvblN0eWxlczo0LGF4aXNGb3JtYXQ6IiVZLSVtLSVkIix1c2VNYXhXaWR0aDohMCx0b3BBeGlzOiExLHVzZVdpZHRoOnZvaWQgMH0sam91cm5leTp7ZGlhZ3JhbU1hcmdpblg6NTAsZGlhZ3JhbU1hcmdpblk6MTAsbGVmdE1hcmdpbjoxNTAsd2lkdGg6MTUwLGhlaWdodDo1MCxib3hNYXJnaW46MTAsYm94VGV4dE1hcmdpbjo1LG5vdGVNYXJnaW46MTAsbWVzc2FnZU1hcmdpbjozNSxtZXNzYWdlQWxpZ246ImNlbnRlciIsYm90dG9tTWFyZ2luQWRqOjEsdXNlTWF4V2lkdGg6ITAscmlnaHRBbmdsZXM6ITEsdGFza0ZvbnRTaXplOjE0LHRhc2tGb250RmFtaWx5OiciT3Blbi1TYW5zIiwgInNhbnMtc2VyaWYiJyx0YXNrTWFyZ2luOjUwLGFjdGl2YXRpb25XaWR0aDoxMCx0ZXh0UGxhY2VtZW50OiJmbyIsYWN0b3JDb2xvdXJzOlsiIzhGQkM4RiIsIiM3Q0ZDMDAiLCIjMDBGRkZGIiwiIzIwQjJBQSIsIiNCMEUwRTYiLCIjRkZGRkUwIl0sc2VjdGlvbkZpbGxzOlsiIzE5MTk3MCIsIiM4QjAwOEIiLCIjNEIwMDgyIiwiIzJGNEY0RiIsIiM4MDAwMDAiLCIjOEI0NTEzIiwiIzAwMDA4QiJdLHNlY3Rpb25Db2xvdXJzOlsiI2ZmZiJdfSxjbGFzczp7YXJyb3dNYXJrZXJBYnNvbHV0ZTohMSx1c2VNYXhXaWR0aDohMCxkZWZhdWx0UmVuZGVyZXI6ImRhZ3JlLXdyYXBwZXIifSxnaXQ6e2Fycm93TWFya2VyQWJzb2x1dGU6ITEsdXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxzdGF0ZTp7ZGl2aWRlck1hcmdpbjoxMCxzaXplVW5pdDo1LHBhZGRpbmc6OCx0ZXh0SGVpZ2h0OjEwLHRpdGxlU2hpZnQ6LTE1LG5vdGVNYXJnaW46MTAsZm9ya1dpZHRoOjcwLGZvcmtIZWlnaHQ6NyxtaW5pUGFkZGluZzoyLGZvbnRTaXplRmFjdG9yOjUuMDIsZm9udFNpemU6MjQsbGFiZWxIZWlnaHQ6MTYsZWRnZUxlbmd0aEZhY3RvcjoiMjAiLGNvbXBvc2l0VGl0bGVTaXplOjM1LHJhZGl1czo1LHVzZU1heFdpZHRoOiEwLGRlZmF1bHRSZW5kZXJlcjoiZGFncmUtd3JhcHBlciJ9LGVyOntkaWFncmFtUGFkZGluZzoyMCxsYXlvdXREaXJlY3Rpb246IlRCIixtaW5FbnRpdHlXaWR0aDoxMDAsbWluRW50aXR5SGVpZ2h0Ojc1LGVudGl0eVBhZGRpbmc6MTUsc3Ryb2tlOiJncmF5IixmaWxsOiJob25leWRldyIsZm9udFNpemU6MTIsdXNlTWF4V2lkdGg6ITB9LHBpZTp7dXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwfSxyZXF1aXJlbWVudDp7dXNlV2lkdGg6dm9pZCAwLHVzZU1heFdpZHRoOiEwLHJlY3RfZmlsbDoiI2Y5ZjlmOSIsdGV4dF9jb2xvcjoiIzMzMyIscmVjdF9ib3JkZXJfc2l6ZToiMC41cHgiLHJlY3RfYm9yZGVyX2NvbG9yOiIjYmJiIixyZWN0X21pbl93aWR0aDoyMDAscmVjdF9taW5faGVpZ2h0OjIwMCxmb250U2l6ZToxNCxyZWN0X3BhZGRpbmc6MTAsbGluZV9oZWlnaHQ6MjB9fTtUdC5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPVR0LmFycm93TWFya2VyQWJzb2x1dGUsVHQuZ2l0LmFycm93TWFya2VyQWJzb2x1dGU9VHQuYXJyb3dNYXJrZXJBYnNvbHV0ZTt2YXIgRXQ9ZnVuY3Rpb24gdChlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoZnVuY3Rpb24ocixpKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlW2ldKT9yOiJvYmplY3QiPT09d3QoZVtpXSkmJm51bGwhPT1lW2ldP1tdLmNvbmNhdChfdChyKSxbbitpXSxfdCh0KGVbaV0sIiIpKSk6W10uY29uY2F0KF90KHIpLFtuK2ldKX0pLFtdKX0oVHQsIiIpLEN0PVR0O2Z1bmN0aW9uIFN0KHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLmtleSxyKX19ZnVuY3Rpb24gQXQodCxlKXt2YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkodCl8fChuPU50KHQpKXx8ZSYmdCYmIm51bWJlciI9PXR5cGVvZiB0Lmxlbmd0aCl7biYmKHQ9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24odCl7dGhyb3cgdH0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIGEsbz0hMCxzPSExO3JldHVybntzOmZ1bmN0aW9uKCl7bj1uLmNhbGwodCl9LG46ZnVuY3Rpb24oKXt2YXIgdD1uLm5leHQoKTtyZXR1cm4gbz10LmRvbmUsdH0sZTpmdW5jdGlvbih0KXtzPSEwLGE9dH0sZjpmdW5jdGlvbigpe3RyeXtvfHxudWxsPT1uLnJldHVybnx8bi5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgYX19fX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4oTXQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX1mdW5jdGlvbiBPdCh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gQnQodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxOdCh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBOdCh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gQnQodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7cmV0dXJuIk9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09bnx8IlNldCI9PT1uP0FycmF5LmZyb20odCk6IkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKT9CdCh0LGUpOnZvaWQgMH19ZnVuY3Rpb24gQnQodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgRHQ9e2N1cnZlQmFzaXM6dS5jdXJ2ZUJhc2lzLGN1cnZlQmFzaXNDbG9zZWQ6dS5jdXJ2ZUJhc2lzQ2xvc2VkLGN1cnZlQmFzaXNPcGVuOnUuY3VydmVCYXNpc09wZW4sY3VydmVMaW5lYXI6dS5jdXJ2ZUxpbmVhcixjdXJ2ZUxpbmVhckNsb3NlZDp1LmN1cnZlTGluZWFyQ2xvc2VkLGN1cnZlTW9ub3RvbmVYOnUuY3VydmVNb25vdG9uZVgsY3VydmVNb25vdG9uZVk6dS5jdXJ2ZU1vbm90b25lWSxjdXJ2ZU5hdHVyYWw6dS5jdXJ2ZU5hdHVyYWwsY3VydmVTdGVwOnUuY3VydmVTdGVwLGN1cnZlU3RlcEFmdGVyOnUuY3VydmVTdGVwQWZ0ZXIsY3VydmVTdGVwQmVmb3JlOnUuY3VydmVTdGVwQmVmb3JlfSxMdD0vWyVdezJ9W3tdXHMqKD86KD86KFx3Kylccyo6fChcdyspKVxzKig/Oig/OihcdyspKXwoKD86KD8hW31dWyVdezJ9KS58XHI/XG4pKikpP1xzKikoPzpbfV1bJV17Mn0pPy9naSxJdD0vXHMqKD86KD86KFx3KykoPz06KTp8KFx3KykpXHMqKD86KD86KFx3KykpfCgoPzooPyFbfV1bJV17Mn0pLnxccj9cbikqKSk/XHMqKSg/Olt9XVslXXsyfSk/L2dpLFJ0PS9ccyolJS4qXG4vZ20sRnQ9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dHJ5e3ZhciBuPW5ldyBSZWdFeHAoIlslXXsyfSg/IVt7XSIuY29uY2F0KEl0LnNvdXJjZSwiKSg/PVt9XVslXXsyfSkuKlxuIiksImlnIik7dD10LnRyaW0oKS5yZXBsYWNlKG4sIiIpLnJlcGxhY2UoLycvZ20sJyInKSxvLmRlYnVnKCJEZXRlY3RpbmcgZGlhZ3JhbSBkaXJlY3RpdmUiLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKTtmb3IodmFyIHIsaT1bXTtudWxsIT09KHI9THQuZXhlYyh0KSk7KWlmKHIuaW5kZXg9PT1MdC5sYXN0SW5kZXgmJkx0Lmxhc3RJbmRleCsrLHImJiFlfHxlJiZyWzFdJiZyWzFdLm1hdGNoKGUpfHxlJiZyWzJdJiZyWzJdLm1hdGNoKGUpKXt2YXIgYT1yWzFdP3JbMV06clsyXSxzPXJbM10/clszXS50cmltKCk6cls0XT9KU09OLnBhcnNlKHJbNF0udHJpbSgpKTpudWxsO2kucHVzaCh7dHlwZTphLGFyZ3M6c30pfXJldHVybiAwPT09aS5sZW5ndGgmJmkucHVzaCh7dHlwZTp0LGFyZ3M6bnVsbH0pLDE9PT1pLmxlbmd0aD9pWzBdOml9Y2F0Y2gobil7cmV0dXJuIG8uZXJyb3IoIkVSUk9SOiAiLmNvbmNhdChuLm1lc3NhZ2UsIiAtIFVuYWJsZSB0byBwYXJzZSBkaXJlY3RpdmVcbiAgICAgICIpLmNvbmNhdChudWxsIT09ZT8iIHR5cGU6IitlOiIiLCIgYmFzZWQgb24gdGhlIHRleHQ6IikuY29uY2F0KHQpKSx7dHlwZTpudWxsLGFyZ3M6bnVsbH19fSxQdD1mdW5jdGlvbih0LGUpe3JldHVybih0PXQucmVwbGFjZShMdCwiIikucmVwbGFjZShSdCwiXG4iKSkubWF0Y2goL15ccypzZXF1ZW5jZURpYWdyYW0vKT8ic2VxdWVuY2UiOnQubWF0Y2goL15ccypnYW50dC8pPyJnYW50dCI6dC5tYXRjaCgvXlxzKmNsYXNzRGlhZ3JhbS12Mi8pPyJjbGFzc0RpYWdyYW0iOnQubWF0Y2goL15ccypjbGFzc0RpYWdyYW0vKT9lJiZlLmNsYXNzJiYiZGFncmUtd3JhcHBlciI9PT1lLmNsYXNzLmRlZmF1bHRSZW5kZXJlcj8iY2xhc3NEaWFncmFtIjoiY2xhc3MiOnQubWF0Y2goL15ccypzdGF0ZURpYWdyYW0tdjIvKT8ic3RhdGVEaWFncmFtIjp0Lm1hdGNoKC9eXHMqc3RhdGVEaWFncmFtLyk/ZSYmZS5jbGFzcyYmImRhZ3JlLXdyYXBwZXIiPT09ZS5zdGF0ZS5kZWZhdWx0UmVuZGVyZXI/InN0YXRlRGlhZ3JhbSI6InN0YXRlIjp0Lm1hdGNoKC9eXHMqZ2l0R3JhcGgvKT8iZ2l0Ijp0Lm1hdGNoKC9eXHMqZmxvd2NoYXJ0Lyk/ImZsb3djaGFydC12MiI6dC5tYXRjaCgvXlxzKmluZm8vKT8iaW5mbyI6dC5tYXRjaCgvXlxzKnBpZS8pPyJwaWUiOnQubWF0Y2goL15ccyplckRpYWdyYW0vKT8iZXIiOnQubWF0Y2goL15ccypqb3VybmV5Lyk/ImpvdXJuZXkiOnQubWF0Y2goL15ccypyZXF1aXJlbWVudC8pfHx0Lm1hdGNoKC9eXHMqcmVxdWlyZW1lbnREaWFncmFtLyk/InJlcXVpcmVtZW50IjplJiZlLmZsb3djaGFydCYmImRhZ3JlLXdyYXBwZXIiPT09ZS5mbG93Y2hhcnQuZGVmYXVsdFJlbmRlcmVyPyJmbG93Y2hhcnQtdjIiOiJmbG93Y2hhcnQifSxqdD1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7YSsrKWlbYV09YXJndW1lbnRzW2FdO3ZhciBvPWU/ZS5hcHBseSh2b2lkIDAsaSk6aVswXTtpZihvIGluIG4pcmV0dXJuIG5bb107dmFyIHM9dC5hcHBseSh2b2lkIDAsaSk7cmV0dXJuIG5bb109cyxzfX0sWXQ9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gZTt2YXIgbj0iY3VydmUiLmNvbmNhdCh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkpO3JldHVybiBEdFtuXXx8ZX0senQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZT9NYXRoLnNxcnQoTWF0aC5wb3coZS54LXQueCwyKStNYXRoLnBvdyhlLnktdC55LDIpKTowfSxVdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iIixyPTA7cjx0Lmxlbmd0aDtyKyspdm9pZCAwIT09dFtyXSYmKHRbcl0uc3RhcnRzV2l0aCgiY29sb3I6Iil8fHRbcl0uc3RhcnRzV2l0aCgidGV4dC1hbGlnbjoiKT9uPW4rdFtyXSsiOyI6ZT1lK3Rbcl0rIjsiKTtyZXR1cm57c3R5bGU6ZSxsYWJlbFN0eWxlOm59fSwkdD0wLHF0PWZ1bmN0aW9uKCl7cmV0dXJuICR0KyssImlkLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsMTIpKyItIiskdH07dmFyIFd0LEh0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9IiIsbj0iMDEyMzQ1Njc4OWFiY2RlZiIubGVuZ3RoLHI9MDtyPHQ7cisrKWUrPSIwMTIzNDU2Nzg5YWJjZGVmIi5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm4pKTtyZXR1cm4gZX0odC5sZW5ndGgpfSxWdD1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaT1PYmplY3QuYXNzaWduKHtkZXB0aDoyLGNsb2JiZXI6ITF9LHIpLGE9aS5kZXB0aCxvPWkuY2xvYmJlcjtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmIUFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuLHIpfSkpLGUpOkFycmF5LmlzQXJyYXkobikmJkFycmF5LmlzQXJyYXkoZSk/KG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7LTE9PT1lLmluZGV4T2YodCkmJmUucHVzaCh0KX0pKSxlKTp2b2lkIDA9PT1lfHxhPD0wP251bGwhPWUmJiJvYmplY3QiPT09TXQoZSkmJiJvYmplY3QiPT09TXQobik/T2JqZWN0LmFzc2lnbihlLG4pOm46KHZvaWQgMCE9PW4mJiJvYmplY3QiPT09TXQoZSkmJiJvYmplY3QiPT09TXQobikmJk9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHIpeyJvYmplY3QiIT09TXQobltyXSl8fHZvaWQgMCE9PWVbcl0mJiJvYmplY3QiIT09TXQoZVtyXSk/KG98fCJvYmplY3QiIT09TXQoZVtyXSkmJiJvYmplY3QiIT09TXQobltyXSkpJiYoZVtyXT1uW3JdKToodm9pZCAwPT09ZVtyXSYmKGVbcl09QXJyYXkuaXNBcnJheShuW3JdKT9bXTp7fSksZVtyXT10KGVbcl0sbltyXSx7ZGVwdGg6YS0xLGNsb2JiZXI6b30pKX0pKSxlKX0sR3Q9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnRleHQucmVwbGFjZShudC5saW5lQnJlYWtSZWdleCwiICIpLHI9dC5hcHBlbmQoInRleHQiKTtyLmF0dHIoIngiLGUueCksci5hdHRyKCJ5IixlLnkpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksci5zdHlsZSgiZm9udC1mYW1pbHkiLGUuZm9udEZhbWlseSksci5zdHlsZSgiZm9udC1zaXplIixlLmZvbnRTaXplKSxyLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSxyLmF0dHIoImZpbGwiLGUuZmlsbCksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLmF0dHIoImZpbGwiLGUuZmlsbCksaS50ZXh0KG4pLHJ9LFh0PWp0KChmdW5jdGlvbih0LGUsbil7aWYoIXQpcmV0dXJuIHQ7aWYobj1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsam9pbldpdGg6Ijxici8+In0sbiksbnQubGluZUJyZWFrUmVnZXgudGVzdCh0KSlyZXR1cm4gdDt2YXIgcj10LnNwbGl0KCIgIiksaT1bXSxhPSIiO3JldHVybiByLmZvckVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIHM9S3QoIiIuY29uY2F0KHQsIiAiKSxuKSxjPUt0KGEsbik7aWYocz5lKXt2YXIgdT1adCh0LGUsIi0iLG4pLGw9dS5oeXBoZW5hdGVkU3RyaW5ncyxoPXUucmVtYWluaW5nV29yZDtpLnB1c2guYXBwbHkoaSxbYV0uY29uY2F0KE90KGwpKSksYT1ofWVsc2UgYytzPj1lPyhpLnB1c2goYSksYT10KTphPVthLHRdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7bysxPT09ci5sZW5ndGgmJmkucHVzaChhKX0pKSxpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIiIhPT10fSkpLmpvaW4obi5qb2luV2l0aCl9KSwoZnVuY3Rpb24odCxlLG4pe3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobi5mb250U2l6ZSwiLSIpLmNvbmNhdChuLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQobi5mb250RmFtaWx5LCItIikuY29uY2F0KG4uam9pbldpdGgpfSkpLFp0PWp0KChmdW5jdGlvbih0LGUpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiLSIscj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIixtYXJnaW46MH0scik7dmFyIGk9dC5zcGxpdCgiIiksYT1bXSxvPSIiO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQscyl7dmFyIGM9IiIuY29uY2F0KG8pLmNvbmNhdCh0KTtpZihLdChjLHIpPj1lKXt2YXIgdT1zKzEsbD1pLmxlbmd0aD09PXUsaD0iIi5jb25jYXQoYykuY29uY2F0KG4pO2EucHVzaChsP2M6aCksbz0iIn1lbHNlIG89Y30pKSx7aHlwaGVuYXRlZFN0cmluZ3M6YSxyZW1haW5pbmdXb3JkOm99fSksKGZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiItIixyPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiIiLmNvbmNhdCh0LCItIikuY29uY2F0KGUsIi0iKS5jb25jYXQobiwiLSIpLmNvbmNhdChyLmZvbnRTaXplLCItIikuY29uY2F0KHIuZm9udFdlaWdodCwiLSIpLmNvbmNhdChyLmZvbnRGYW1pbHkpfSkpLEt0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9T2JqZWN0LmFzc2lnbih7Zm9udFNpemU6MTIsZm9udFdlaWdodDo0MDAsZm9udEZhbWlseToiQXJpYWwifSxlKSxRdCh0LGUpLndpZHRofSxRdD1qdCgoZnVuY3Rpb24odCxlKXt2YXIgbj1lPU9iamVjdC5hc3NpZ24oe2ZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NDAwLGZvbnRGYW1pbHk6IkFyaWFsIn0sZSkscj1uLmZvbnRTaXplLGk9bi5mb250RmFtaWx5LGE9bi5mb250V2VpZ2h0O2lmKCF0KXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2YXIgbz1bInNhbnMtc2VyaWYiLGldLHM9dC5zcGxpdChudC5saW5lQnJlYWtSZWdleCksYz1bXSxsPU9iamVjdCh1LnNlbGVjdCkoImJvZHkiKTtpZighbC5yZW1vdmUpcmV0dXJue3dpZHRoOjAsaGVpZ2h0OjAsbGluZUhlaWdodDowfTtmb3IodmFyIGg9bC5hcHBlbmQoInN2ZyIpLGY9MCxkPW87ZjxkLmxlbmd0aDtmKyspe3ZhciBwLHk9ZFtmXSxnPTAsbT17d2lkdGg6MCxoZWlnaHQ6MCxsaW5lSGVpZ2h0OjB9LHY9QXQocyk7dHJ5e2Zvcih2LnMoKTshKHA9di5uKCkpLmRvbmU7KXt2YXIgYj1wLnZhbHVlLHg9e3g6MCx5OjAsZmlsbDp2b2lkIDAsYW5jaG9yOiJzdGFydCIsc3R5bGU6IiM2NjYiLHdpZHRoOjEwMCxoZWlnaHQ6MTAwLHRleHRNYXJnaW46MCxyeDowLHJ5OjAsdmFsaWduOnZvaWQgMH07eC50ZXh0PWI7dmFyIF89R3QoaCx4KS5zdHlsZSgiZm9udC1zaXplIixyKS5zdHlsZSgiZm9udC13ZWlnaHQiLGEpLnN0eWxlKCJmb250LWZhbWlseSIseSksaz0oXy5fZ3JvdXBzfHxfKVswXVswXS5nZXRCQm94KCk7bS53aWR0aD1NYXRoLnJvdW5kKE1hdGgubWF4KG0ud2lkdGgsay53aWR0aCkpLGc9TWF0aC5yb3VuZChrLmhlaWdodCksbS5oZWlnaHQrPWcsbS5saW5lSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgobS5saW5lSGVpZ2h0LGcpKX19Y2F0Y2godCl7di5lKHQpfWZpbmFsbHl7di5mKCl9Yy5wdXNoKG0pfXJldHVybiBoLnJlbW92ZSgpLGNbaXNOYU4oY1sxXS5oZWlnaHQpfHxpc05hTihjWzFdLndpZHRoKXx8aXNOYU4oY1sxXS5saW5lSGVpZ2h0KXx8Y1swXS5oZWlnaHQ+Y1sxXS5oZWlnaHQmJmNbMF0ud2lkdGg+Y1sxXS53aWR0aCYmY1swXS5saW5lSGVpZ2h0PmNbMV0ubGluZUhlaWdodD8wOjFdfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIiIuY29uY2F0KHQsIi0iKS5jb25jYXQoZS5mb250U2l6ZSwiLSIpLmNvbmNhdChlLmZvbnRXZWlnaHQsIi0iKS5jb25jYXQoZS5mb250RmFtaWx5KX0pKSxKdD1mdW5jdGlvbih0LGUsbil7dmFyIHI9bmV3IE1hcDtyZXR1cm4gci5zZXQoImhlaWdodCIsdCksbj8oci5zZXQoIndpZHRoIiwiMTAwJSIpLHIuc2V0KCJzdHlsZSIsIm1heC13aWR0aDogIi5jb25jYXQoZSwicHg7IikpKTpyLnNldCgid2lkdGgiLGUpLHJ9LHRlPWZ1bmN0aW9uKHQsZSxuLHIpeyFmdW5jdGlvbih0LGUpe3ZhciBuLHI9QXQoZSk7dHJ5e2ZvcihyLnMoKTshKG49ci5uKCkpLmRvbmU7KXt2YXIgaT1uLnZhbHVlO3QuYXR0cihpWzBdLGlbMV0pfX1jYXRjaCh0KXtyLmUodCl9ZmluYWxseXtyLmYoKX19KHQsSnQoZSxuLHIpKX0sZWU9ZnVuY3Rpb24gdChlKXtvLmRlYnVnKCJkaXJlY3RpdmVTYW5pdGl6ZXIgY2FsbGVkIHdpdGgiLGUpLCJvYmplY3QiPT09TXQoZSkmJihlLmxlbmd0aD9lLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpfSkpOk9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKG4pe28uZGVidWcoIkNoZWNraW5nIGtleSIsbiksMD09PW4uaW5kZXhPZigiX18iKSYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIF9fIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigicHJvdG8iKT49MCYmKG8uZGVidWcoInNhbml0aXplIGRlbGV0aW5nIHByb3RvIG9wdGlvbiIsbiksZGVsZXRlIGVbbl0pLG4uaW5kZXhPZigiY29uc3RyIik+PTAmJihvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBjb25zdHIgb3B0aW9uIixuKSxkZWxldGUgZVtuXSksRXQuaW5kZXhPZihuKTwwPyhvLmRlYnVnKCJzYW5pdGl6ZSBkZWxldGluZyBvcHRpb24iLG4pLGRlbGV0ZSBlW25dKToib2JqZWN0Ij09PU10KGVbbl0pJiYoby5kZWJ1Zygic2FuaXRpemUgZGVsZXRpbmcgb2JqZWN0IixuKSx0KGVbbl0pKX0pKSl9LG5lPXthc3NpZ25XaXRoRGVwdGg6VnQsd3JhcExhYmVsOlh0LGNhbGN1bGF0ZVRleHRIZWlnaHQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1PYmplY3QuYXNzaWduKHtmb250U2l6ZToxMixmb250V2VpZ2h0OjQwMCxmb250RmFtaWx5OiJBcmlhbCIsbWFyZ2luOjE1fSxlKSxRdCh0LGUpLmhlaWdodH0sY2FsY3VsYXRlVGV4dFdpZHRoOkt0LGNhbGN1bGF0ZVRleHREaW1lbnNpb25zOlF0LGNhbGN1bGF0ZVN2Z1NpemVBdHRyczpKdCxjb25maWd1cmVTdmdTaXplOnRlLGRldGVjdEluaXQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1GdCh0LC8oPzppbml0XGIpfCg/OmluaXRpYWxpemVcYikvKSxyPXt9O2lmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hcmdzfSkpO2VlKGkpLHI9VnQocixPdChpKSl9ZWxzZSByPW4uYXJncztpZihyKXt2YXIgYT1QdCh0LGUpO1siY29uZmlnIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09clt0XSYmKCJmbG93Y2hhcnQtdjIiPT09YSYmKGE9ImZsb3djaGFydCIpLHJbYV09clt0XSxkZWxldGUgclt0XSl9KSl9cmV0dXJuIHJ9LGRldGVjdERpcmVjdGl2ZTpGdCxkZXRlY3RUeXBlOlB0LGlzU3Vic3RyaW5nSW5BcnJheTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVbbl0ubWF0Y2godCkpcmV0dXJuIG47cmV0dXJuLTF9LGludGVycG9sYXRlVG9DdXJ2ZTpZdCxjYWxjTGFiZWxQb3NpdGlvbjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUsbj0wO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9enQodCxlKSxlPXR9KSk7dmFyIHI9bi8yLGk9dm9pZCAwO3JldHVybiBlPXZvaWQgMCx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKGUmJiFpKXt2YXIgbj16dCh0LGUpO2lmKG48cilyLT1uO2Vsc2V7dmFyIGE9ci9uO2E8PTAmJihpPWUpLGE+PTEmJihpPXt4OnQueCx5OnQueX0pLGE+MCYmYTwxJiYoaT17eDooMS1hKSplLngrYSp0LngseTooMS1hKSplLnkrYSp0Lnl9KX19ZT10fSkpLGl9KHQpfSxjYWxjQ2FyZGluYWxpdHlQb3NpdGlvbjpmdW5jdGlvbih0LGUsbil7dmFyIHI7by5pbmZvKCJvdXIgcG9pbnRzIixlKSxlWzBdIT09biYmKGU9ZS5yZXZlcnNlKCkpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQodCxyKSxyPXR9KSk7dmFyIGksYT0yNTtyPXZvaWQgMCxlLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKHImJiFpKXt2YXIgZT16dCh0LHIpO2lmKGU8YSlhLT1lO2Vsc2V7dmFyIG49YS9lO248PTAmJihpPXIpLG4+PTEmJihpPXt4OnQueCx5OnQueX0pLG4+MCYmbjwxJiYoaT17eDooMS1uKSpyLngrbip0LngseTooMS1uKSpyLnkrbip0Lnl9KX19cj10fSkpO3ZhciBzPXQ/MTA6NSxjPU1hdGguYXRhbjIoZVswXS55LWkueSxlWzBdLngtaS54KSx1PXt4OjAseTowfTtyZXR1cm4gdS54PU1hdGguc2luKGMpKnMrKGVbMF0ueCtpLngpLzIsdS55PS1NYXRoLmNvcyhjKSpzKyhlWzBdLnkraS55KS8yLHV9LGNhbGNUZXJtaW5hbExhYmVsUG9zaXRpb246ZnVuY3Rpb24odCxlLG4pe3ZhciByLGk9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShuKSk7by5pbmZvKCJvdXIgcG9pbnRzIixpKSwic3RhcnRfbGVmdCIhPT1lJiYic3RhcnRfcmlnaHQiIT09ZSYmKGk9aS5yZXZlcnNlKCkpLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7enQodCxyKSxyPXR9KSk7dmFyIGEscz0yNSt0O3I9dm9pZCAwLGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYociYmIWEpe3ZhciBlPXp0KHQscik7aWYoZTxzKXMtPWU7ZWxzZXt2YXIgbj1zL2U7bjw9MCYmKGE9ciksbj49MSYmKGE9e3g6dC54LHk6dC55fSksbj4wJiZuPDEmJihhPXt4OigxLW4pKnIueCtuKnQueCx5OigxLW4pKnIueStuKnQueX0pfX1yPXR9KSk7dmFyIGM9MTArLjUqdCx1PU1hdGguYXRhbjIoaVswXS55LWEueSxpWzBdLngtYS54KSxsPXt4OjAseTowfTtyZXR1cm4gbC54PU1hdGguc2luKHUpKmMrKGlbMF0ueCthLngpLzIsbC55PS1NYXRoLmNvcyh1KSpjKyhpWzBdLnkrYS55KS8yLCJzdGFydF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odStNYXRoLlBJKSpjKyhpWzBdLngrYS54KS8yLGwueT0tTWF0aC5jb3ModStNYXRoLlBJKSpjKyhpWzBdLnkrYS55KS8yKSwiZW5kX3JpZ2h0Ij09PWUmJihsLng9TWF0aC5zaW4odS1NYXRoLlBJKSpjKyhpWzBdLngrYS54KS8yLTUsbC55PS1NYXRoLmNvcyh1LU1hdGguUEkpKmMrKGlbMF0ueSthLnkpLzItNSksImVuZF9sZWZ0Ij09PWUmJihsLng9TWF0aC5zaW4odSkqYysoaVswXS54K2EueCkvMi01LGwueT0tTWF0aC5jb3ModSkqYysoaVswXS55K2EueSkvMi01KSxsfSxmb3JtYXRVcmw6ZnVuY3Rpb24odCxlKXt2YXIgbj10LnRyaW0oKTtpZihuKXJldHVybiJsb29zZSIhPT1lLnNlY3VyaXR5TGV2ZWw/T2JqZWN0KEcuc2FuaXRpemVVcmwpKG4pOm59LGdldFN0eWxlc0Zyb21BcnJheTpVdCxnZW5lcmF0ZUlkOnF0LHJhbmRvbTpIdCxtZW1vaXplOmp0LHJ1bkZ1bmM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG49dC5zcGxpdCgiLiIpLHI9bi5sZW5ndGgtMSxpPW5bcl0sYT13aW5kb3csbz0wO288cjtvKyspaWYoIShhPWFbbltvXV0pKXJldHVybjtmb3IodmFyIHM9YXJndW1lbnRzLmxlbmd0aCxjPW5ldyBBcnJheShzPjE/cy0xOjApLHU9MTt1PHM7dSsrKWNbdS0xXT1hcmd1bWVudHNbdV07KGU9YSlbaV0uYXBwbHkoZSxjKX0sZW50aXR5RGVjb2RlOmZ1bmN0aW9uKHQpe3JldHVybiBXdD1XdHx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdD1lc2NhcGUodCkucmVwbGFjZSgvJTI2L2csIiYiKS5yZXBsYWNlKC8lMjMvZywiIyIpLnJlcGxhY2UoLyUzQi9nLCI7IiksV3QuaW5uZXJIVE1MPXQsdW5lc2NhcGUoV3QudGV4dENvbnRlbnQpfSxpbml0SWRHZW5lcmF0aW9yOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG4peyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuZGV0ZXJtaW5pc3RpYz1lLHRoaXMuc2VlZD1uLHRoaXMuY291bnQ9bj9uLmxlbmd0aDowfXZhciBlLG4scjtyZXR1cm4gZT10LChuPVt7a2V5OiJuZXh0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRldGVybWluaXN0aWM/dGhpcy5jb3VudCsrOkRhdGUubm93KCl9fV0pJiZTdChlLnByb3RvdHlwZSxuKSxyJiZTdChlLHIpLHR9KCksZGlyZWN0aXZlU2FuaXRpemVyOmVlfTtmdW5jdGlvbiByZSh0KXtyZXR1cm4ocmU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgaWUsYWU9T2JqZWN0LmZyZWV6ZShDdCksb2U9VnQoe30sYWUpLHNlPVtdLGNlPVZ0KHt9LGFlKSx1ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1WdCh7fSx0KSxyPXt9LGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXTtmZShhKSxyPVZ0KHIsYSl9aWYobj1WdChuLHIpLHIudGhlbWUpe3ZhciBvPVZ0KHt9LGllKSxzPVZ0KG8udGhlbWVWYXJpYWJsZXN8fHt9LHIudGhlbWVWYXJpYWJsZXMpO24udGhlbWVWYXJpYWJsZXM9eHRbbi50aGVtZV0uZ2V0VGhlbWVWYXJpYWJsZXMocyl9cmV0dXJuIGNlPW4sbn0sbGU9ZnVuY3Rpb24oKXtyZXR1cm4gVnQoe30sb2UpfSxoZT1mdW5jdGlvbigpe3JldHVybiBWdCh7fSxjZSl9LGZlPWZ1bmN0aW9uIHQoZSl7T2JqZWN0LmtleXMob2Uuc2VjdXJlKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lW29lLnNlY3VyZVt0XV0mJihvLmRlYnVnKCJEZW5pZWQgYXR0ZW1wdCB0byBtb2RpZnkgYSBzZWN1cmUga2V5ICIuY29uY2F0KG9lLnNlY3VyZVt0XSksZVtvZS5zZWN1cmVbdF1dKSxkZWxldGUgZVtvZS5zZWN1cmVbdF1dKX0pKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXswPT09dC5pbmRleE9mKCJfXyIpJiZkZWxldGUgZVt0XX0pKSxPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihuKXsic3RyaW5nIj09dHlwZW9mIGVbbl0mJihlW25dLmluZGV4T2YoIjwiKT4tMXx8ZVtuXS5pbmRleE9mKCI+Iik+LTF8fGVbbl0uaW5kZXhPZigidXJsKGRhdGE6Iik+LTEpJiZkZWxldGUgZVtuXSwib2JqZWN0Ij09PXJlKGVbbl0pJiZ0KGVbbl0pfSkpfSxkZT1mdW5jdGlvbih0KXt0LmZvbnRGYW1pbHkmJih0LnRoZW1lVmFyaWFibGVzJiZ0LnRoZW1lVmFyaWFibGVzLmZvbnRGYW1pbHl8fCh0LnRoZW1lVmFyaWFibGVzPXtmb250RmFtaWx5OnQuZm9udEZhbWlseX0pKSxzZS5wdXNoKHQpLHVlKG9lLHNlKX0scGU9ZnVuY3Rpb24oKXt1ZShvZSxzZT1bXSl9O2Z1bmN0aW9uIHllKHQpe3JldHVybiBmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBnZSh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gZ2UodCxlKTt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkuc2xpY2UoOCwtMSk7Ik9iamVjdCI9PT1uJiZ0LmNvbnN0cnVjdG9yJiYobj10LmNvbnN0cnVjdG9yLm5hbWUpO2lmKCJNYXAiPT09bnx8IlNldCI9PT1uKXJldHVybiBBcnJheS5mcm9tKHQpO2lmKCJBcmd1bWVudHMiPT09bnx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpcmV0dXJuIGdlKHQsZSl9KHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIGdlKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG1lPVtdLHZlPXt9LGJlPTAseGU9W10sX2U9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj10O2lmKHQuaW5kZXhPZigifiIpPjApe3ZhciByPXQuc3BsaXQoIn4iKTtuPXJbMF0sZT1yWzFdfXJldHVybntjbGFzc05hbWU6bix0eXBlOmV9fSxrZT1mdW5jdGlvbih0KXt2YXIgZT1fZSh0KTt2b2lkIDA9PT12ZVtlLmNsYXNzTmFtZV0mJih2ZVtlLmNsYXNzTmFtZV09e2lkOmUuY2xhc3NOYW1lLHR5cGU6ZS50eXBlLGNzc0NsYXNzZXM6W10sbWV0aG9kczpbXSxtZW1iZXJzOltdLGFubm90YXRpb25zOltdLGRvbUlkOiJjbGFzc2lkLSIrZS5jbGFzc05hbWUrIi0iK2JlfSxiZSsrKX0sd2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHZlKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYodmVbZVtuXV0uaWQ9PT10KXJldHVybiB2ZVtlW25dXS5kb21JZH0sVGU9ZnVuY3Rpb24odCxlKXt2YXIgbj1fZSh0KS5jbGFzc05hbWUscj12ZVtuXTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBpPWUudHJpbSgpO2kuc3RhcnRzV2l0aCgiPDwiKSYmaS5lbmRzV2l0aCgiPj4iKT9yLmFubm90YXRpb25zLnB1c2goaS5zdWJzdHJpbmcoMixpLmxlbmd0aC0yKSk6aS5pbmRleE9mKCIpIik+MD9yLm1ldGhvZHMucHVzaChpKTppJiZyLm1lbWJlcnMucHVzaChpKX19LEVlPWZ1bmN0aW9uKHQsZSl7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPXQ7dFswXS5tYXRjaCgvXGQvKSYmKG49ImNsYXNzaWQtIituKSx2b2lkIDAhPT12ZVtuXSYmdmVbbl0uY3NzQ2xhc3Nlcy5wdXNoKGUpfSkpfSxDZT1mdW5jdGlvbih0LGUsbil7dmFyIHI9aGUoKSxpPXQsYT13ZShpKTtpZigibG9vc2UiPT09ci5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lJiZ2b2lkIDAhPT12ZVtpXSl7dmFyIG89W107aWYoInN0cmluZyI9PXR5cGVvZiBuKXtvPW4uc3BsaXQoLywoPz0oPzooPzpbXiJdKiIpezJ9KSpbXiJdKiQpLyk7Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBjPW9bc10udHJpbSgpOyciJz09PWMuY2hhckF0KDApJiYnIic9PT1jLmNoYXJBdChjLmxlbmd0aC0xKSYmKGM9Yy5zdWJzdHIoMSxjLmxlbmd0aC0yKSksb1tzXT1jfX0wPT09by5sZW5ndGgmJm8ucHVzaChhKSx4ZS5wdXNoKChmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJy5jb25jYXQoYSwnIl0nKSk7bnVsbCE9PXQmJnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe25lLnJ1bkZ1bmMuYXBwbHkobmUsW2VdLmNvbmNhdCh5ZShvKSkpfSksITEpfSkpfX0sU2U9e0FHR1JFR0FUSU9OOjAsRVhURU5TSU9OOjEsQ09NUE9TSVRJT046MixERVBFTkRFTkNZOjN9LEFlPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh1LnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KHUuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KHUuc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHUuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3QodS5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O3hlLnB1c2goQWUpO3ZhciBNZT0iVEIiLE9lPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLmNsYXNzfSxhZGRDbGFzczprZSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe3hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGNsZWFyOmZ1bmN0aW9uKCl7bWU9W10sdmU9e30sKHhlPVtdKS5wdXNoKEFlKX0sZ2V0Q2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIHZlW3RdfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHZlfSxhZGRBbm5vdGF0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49X2UodCkuY2xhc3NOYW1lO3ZlW25dLmFubm90YXRpb25zLnB1c2goZSl9LGdldFJlbGF0aW9uczpmdW5jdGlvbigpe3JldHVybiBtZX0sYWRkUmVsYXRpb246ZnVuY3Rpb24odCl7by5kZWJ1ZygiQWRkaW5nIHJlbGF0aW9uOiAiK0pTT04uc3RyaW5naWZ5KHQpKSxrZSh0LmlkMSksa2UodC5pZDIpLHQuaWQxPV9lKHQuaWQxKS5jbGFzc05hbWUsdC5pZDI9X2UodC5pZDIpLmNsYXNzTmFtZSxtZS5wdXNoKHQpfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gTWV9LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXtNZT10fSxhZGRNZW1iZXI6VGUsYWRkTWVtYmVyczpmdW5jdGlvbih0LGUpe0FycmF5LmlzQXJyYXkoZSkmJihlLnJldmVyc2UoKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JldHVybiBUZSh0LGUpfSkpKX0sY2xlYW51cExhYmVsOmZ1bmN0aW9uKHQpe3JldHVybiI6Ij09PXQuc3Vic3RyaW5nKDAsMSk/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfSxsaW5lVHlwZTp7TElORTowLERPVFRFRF9MSU5FOjF9LHJlbGF0aW9uVHlwZTpTZSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7Q2UodCxlLG4pLHZlW3RdLmhhdmVDYWxsYmFjaz0hMH0pKSxFZSh0LCJjbGlja2FibGUiKX0sc2V0Q3NzQ2xhc3M6RWUsc2V0TGluazpmdW5jdGlvbih0LGUsbil7dmFyIHI9aGUoKTt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9dDt0WzBdLm1hdGNoKC9cZC8pJiYoaT0iY2xhc3NpZC0iK2kpLHZvaWQgMCE9PXZlW2ldJiYodmVbaV0ubGluaz1uZS5mb3JtYXRVcmwoZSxyKSx2ZVtpXS5saW5rVGFyZ2V0PSJzdHJpbmciPT10eXBlb2Ygbj9uOiJfYmxhbmsiKX0pKSxFZSh0LCJjbGlja2FibGUiKX0sc2V0VG9vbHRpcDpmdW5jdGlvbih0LGUpe3ZhciBuPWhlKCk7dC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PWUmJih2ZVt0XS50b29sdGlwPW50LnNhbml0aXplVGV4dChlLG4pKX0pKX0sbG9va1VwRG9tSWQ6d2V9LE5lPW4oMTApLEJlPW4ubihOZSksRGU9bigzKSxMZT1uLm4oRGUpLEllPW4oMTYpLFJlPW4ubihJZSksRmU9MCxQZT1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC8oXCt8LXx+fCMpPyhcdyspKH5cdyt+fFxbXF0pP1xzKyhcdyspLyksbj10Lm1hdGNoKC9eKFsrfFwtfH58I10pPyhcdyspICpcKCAqKC4qKVwpICooXCp8XCQpPyAqKFx3Klt+fFtcXV0qXHMqXHcqfj8pJC8pO3JldHVybiBlJiYhbj9qZShlKTpuP1llKG4pOnplKHQpfSxqZT1mdW5jdGlvbih0KXt2YXIgZT0iIjt0cnl7ZT0odFsxXT90WzFdLnRyaW0oKToiIikrKHRbMl0/dFsyXS50cmltKCk6IiIpKyh0WzNdPyRlKHRbM10udHJpbSgpKToiIikrIiAiKyh0WzRdP3RbNF0udHJpbSgpOiIiKX1jYXRjaChuKXtlPXR9cmV0dXJue2Rpc3BsYXlUZXh0OmUsY3NzU3R5bGU6IiJ9fSxZZT1mdW5jdGlvbih0KXt2YXIgZT0iIixuPSIiO3RyeXt2YXIgcj10WzFdP3RbMV0udHJpbSgpOiIiLGk9dFsyXT90WzJdLnRyaW0oKToiIixhPXRbM10/JGUodFszXS50cmltKCkpOiIiLG89dFs0XT90WzRdLnRyaW0oKToiIjtuPXIraSsiKCIrYSsiKSIrKHRbNV0/IiA6ICIrJGUodFs1XSkudHJpbSgpOiIiKSxlPXFlKG8pfWNhdGNoKGUpe249dH1yZXR1cm57ZGlzcGxheVRleHQ6bixjc3NTdHlsZTplfX0semU9ZnVuY3Rpb24odCl7dmFyIGU9IiIsbj0iIixyPSIiLGk9dC5pbmRleE9mKCIoIiksYT10LmluZGV4T2YoIikiKTtpZihpPjEmJmE+aSYmYTw9dC5sZW5ndGgpe3ZhciBvPSIiLHM9IiIsYz10LnN1YnN0cmluZygwLDEpO2MubWF0Y2goL1x3Lyk/cz10LnN1YnN0cmluZygwLGkpLnRyaW0oKTooYy5tYXRjaCgvXCt8LXx+fCMvKSYmKG89Yykscz10LnN1YnN0cmluZygxLGkpLnRyaW0oKSk7dmFyIHU9dC5zdWJzdHJpbmcoaSsxLGEpLGw9dC5zdWJzdHJpbmcoYSsxLDEpO249cWUobCksZT1vK3MrIigiKyRlKHUudHJpbSgpKSsiKSIsYTwiIi5sZW5ndGgmJiIiIT09KHI9dC5zdWJzdHJpbmcoYSsyKS50cmltKCkpJiYocj0iIDogIiskZShyKSl9ZWxzZSBlPSRlKHQpO3JldHVybntkaXNwbGF5VGV4dDplLGNzc1N0eWxlOm59fSxVZT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1QZShlKSxhPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLHIucGFkZGluZykudGV4dChpLmRpc3BsYXlUZXh0KTsiIiE9PWkuY3NzU3R5bGUmJmEuYXR0cigic3R5bGUiLGkuY3NzU3R5bGUpLG58fGEuYXR0cigiZHkiLHIudGV4dEhlaWdodCl9LCRlPWZ1bmN0aW9uIHQoZSl7dmFyIG49ZTtyZXR1cm4tMSE9ZS5pbmRleE9mKCJ+Iik/dChuPShuPW4ucmVwbGFjZSgifiIsIjwiKSkucmVwbGFjZSgifiIsIj4iKSk6bn0scWU9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UiKiI6cmV0dXJuImZvbnQtc3R5bGU6aXRhbGljOyI7Y2FzZSIkIjpyZXR1cm4idGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsiO2RlZmF1bHQ6cmV0dXJuIiJ9fSxXZT1mdW5jdGlvbih0LGUsbil7by5pbmZvKCJSZW5kZXJpbmcgY2xhc3MgIitlKTt2YXIgcixpPWUuaWQsYT17aWQ6aSxsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LHM9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIsd2UoaSkpLmF0dHIoImNsYXNzIiwiY2xhc3NHcm91cCIpO3I9ZS5saW5rP3MuYXBwZW5kKCJzdmc6YSIpLmF0dHIoInhsaW5rOmhyZWYiLGUubGluaykuYXR0cigidGFyZ2V0IixlLmxpbmtUYXJnZXQpLmFwcGVuZCgidGV4dCIpLmF0dHIoInkiLG4udGV4dEhlaWdodCtuLnBhZGRpbmcpLmF0dHIoIngiLDApOnMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieSIsbi50ZXh0SGVpZ2h0K24ucGFkZGluZykuYXR0cigieCIsMCk7dmFyIGM9ITA7ZS5hbm5vdGF0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yLmFwcGVuZCgidHNwYW4iKS50ZXh0KCLCqyIrdCsiwrsiKTtjfHxlLmF0dHIoImR5IixuLnRleHRIZWlnaHQpLGM9ITF9KSk7dmFyIHU9ZS5pZDt2b2lkIDAhPT1lLnR5cGUmJiIiIT09ZS50eXBlJiYodSs9IjwiK2UudHlwZSsiPiIpO3ZhciBsPXIuYXBwZW5kKCJ0c3BhbiIpLnRleHQodSkuYXR0cigiY2xhc3MiLCJ0aXRsZSIpO2N8fGwuYXR0cigiZHkiLG4udGV4dEhlaWdodCk7dmFyIGg9ci5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxmPXMuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoInkxIixuLnBhZGRpbmcraCtuLmRpdmlkZXJNYXJnaW4vMikuYXR0cigieTIiLG4ucGFkZGluZytoK24uZGl2aWRlck1hcmdpbi8yKSxkPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbi5wYWRkaW5nKS5hdHRyKCJ5IixoK24uZGl2aWRlck1hcmdpbituLnRleHRIZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImNsYXNzIiwiY2xhc3NUZXh0Iik7Yz0hMCxlLm1lbWJlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7VWUoZCx0LGMsbiksYz0hMX0pKTt2YXIgcD1kLm5vZGUoKS5nZXRCQm94KCkseT1zLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luK3AuaGVpZ2h0KS5hdHRyKCJ5MiIsbi5wYWRkaW5nK2grbi5kaXZpZGVyTWFyZ2luK3AuaGVpZ2h0KSxnPXMuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbi5wYWRkaW5nKS5hdHRyKCJ5IixoKzIqbi5kaXZpZGVyTWFyZ2luK3AuaGVpZ2h0K24udGV4dEhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiY2xhc3MiLCJjbGFzc1RleHQiKTtjPSEwLGUubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXtVZShnLHQsYyxuKSxjPSExfSkpO3ZhciBtPXMubm9kZSgpLmdldEJCb3goKSx2PSIgIjtlLmNzc0NsYXNzZXMubGVuZ3RoPjAmJih2Kz1lLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYj1zLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIixtLndpZHRoKzIqbi5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLG0uaGVpZ2h0K24ucGFkZGluZysuNSpuLmRpdmlkZXJNYXJnaW4pLmF0dHIoImNsYXNzIix2KS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoO3JldHVybiByLm5vZGUoKS5jaGlsZE5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc2V0QXR0cmlidXRlKCJ4IiwoYi10LmdldEJCb3goKS53aWR0aCkvMil9KSksZS50b29sdGlwJiZyLmluc2VydCgidGl0bGUiKS50ZXh0KGUudG9vbHRpcCksZi5hdHRyKCJ4MiIsYikseS5hdHRyKCJ4MiIsYiksYS53aWR0aD1iLGEuaGVpZ2h0PW0uaGVpZ2h0K24ucGFkZGluZysuNSpuLmRpdmlkZXJNYXJnaW4sYX0sSGU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgU2UuQUdHUkVHQVRJT046cmV0dXJuImFnZ3JlZ2F0aW9uIjtjYXNlIFNlLkVYVEVOU0lPTjpyZXR1cm4iZXh0ZW5zaW9uIjtjYXNlIFNlLkNPTVBPU0lUSU9OOnJldHVybiJjb21wb3NpdGlvbiI7Y2FzZSBTZS5ERVBFTkRFTkNZOnJldHVybiJkZXBlbmRlbmN5In19O2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciBhLHMsYz1lLnBvaW50cyxsPU9iamVjdCh1LmxpbmUpKCkueCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueH0pKS55KChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLmN1cnZlKHUuY3VydmVCYXNpcyksaD10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLGwoYykpLmF0dHIoImlkIiwiZWRnZSIrRmUpLmF0dHIoImNsYXNzIiwicmVsYXRpb24iKSxmPSIiO3IuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKGY9KGY9KGY9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksMT09bi5yZWxhdGlvbi5saW5lVHlwZSYmaC5hdHRyKCJjbGFzcyIsInJlbGF0aW9uIGRhc2hlZC1saW5lIiksIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMSYmaC5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitmKyIjIitpKG4ucmVsYXRpb24udHlwZTEpKyJTdGFydCkiKSwibm9uZSIhPT1uLnJlbGF0aW9uLnR5cGUyJiZoLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIitmKyIjIitpKG4ucmVsYXRpb24udHlwZTIpKyJFbmQpIik7dmFyIGQscCx5LGcsbT1lLnBvaW50cy5sZW5ndGgsdj1uZS5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyk7aWYoYT12Lngscz12LnksbSUyIT0wJiZtPjEpe3ZhciBiPW5lLmNhbGNDYXJkaW5hbGl0eVBvc2l0aW9uKCJub25lIiE9PW4ucmVsYXRpb24udHlwZTEsZS5wb2ludHMsZS5wb2ludHNbMF0pLHg9bmUuY2FsY0NhcmRpbmFsaXR5UG9zaXRpb24oIm5vbmUiIT09bi5yZWxhdGlvbi50eXBlMixlLnBvaW50cyxlLnBvaW50c1ttLTFdKTtvLmRlYnVnKCJjYXJkaW5hbGl0eV8xX3BvaW50ICIrSlNPTi5zdHJpbmdpZnkoYikpLG8uZGVidWcoImNhcmRpbmFsaXR5XzJfcG9pbnQgIitKU09OLnN0cmluZ2lmeSh4KSksZD1iLngscD1iLnkseT14LngsZz14Lnl9aWYodm9pZCAwIT09bi50aXRsZSl7dmFyIF89dC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNsYXNzTGFiZWwiKSxrPV8uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLmF0dHIoIngiLGEpLmF0dHIoInkiLHMpLmF0dHIoImZpbGwiLCJyZWQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQobi50aXRsZSk7d2luZG93LmxhYmVsPWs7dmFyIHc9ay5ub2RlKCkuZ2V0QkJveCgpO18uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4Iix3Lngtci5wYWRkaW5nLzIpLmF0dHIoInkiLHcueS1yLnBhZGRpbmcvMikuYXR0cigid2lkdGgiLHcud2lkdGgrci5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLHcuaGVpZ2h0K3IucGFkZGluZyl9KG8uaW5mbygiUmVuZGVyaW5nIHJlbGF0aW9uICIrSlNPTi5zdHJpbmdpZnkobikpLHZvaWQgMCE9PW4ucmVsYXRpb25UaXRsZTEmJiJub25lIiE9PW4ucmVsYXRpb25UaXRsZTEpJiZ0LmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiY2FyZGluYWxpdHkiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInR5cGUxIikuYXR0cigieCIsZCkuYXR0cigieSIscCkuYXR0cigiZmlsbCIsImJsYWNrIikuYXR0cigiZm9udC1zaXplIiwiNiIpLnRleHQobi5yZWxhdGlvblRpdGxlMSk7dm9pZCAwIT09bi5yZWxhdGlvblRpdGxlMiYmIm5vbmUiIT09bi5yZWxhdGlvblRpdGxlMiYmdC5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImNhcmRpbmFsaXR5IikuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJ0eXBlMiIpLmF0dHIoIngiLHkpLmF0dHIoInkiLGcpLmF0dHIoImZpbGwiLCJibGFjayIpLmF0dHIoImZvbnQtc2l6ZSIsIjYiKS50ZXh0KG4ucmVsYXRpb25UaXRsZTIpO0ZlKyt9O0llLnBhcnNlci55eT1PZTt2YXIgVmU9e30sR2U9e2RpdmlkZXJNYXJnaW46MTAscGFkZGluZzo1LHRleHRIZWlnaHQ6MTB9LFhlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyhWZSksbj0wO248ZS5sZW5ndGg7bisrKWlmKFZlW2Vbbl1dLmxhYmVsPT09dClyZXR1cm4gZVtuXX0sWmU9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7R2VbZV09dFtlXX0pKX0sS2U9ZnVuY3Rpb24odCxlKXtWZT17fSxJZS5wYXJzZXIueXkuY2xlYXIoKSxJZS5wYXJzZXIucGFyc2UodCksby5pbmZvKCJSZW5kZXJpbmcgZGlhZ3JhbSAiK3QpO3ZhciBuLHI9T2JqZWN0KHUuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtyLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpLChuPXIpLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJleHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDcgTDE4LDEzIFYgMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiZXh0ZW5zaW9uRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBWIDEzIEwxOCw3IFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJjb21wb3NpdGlvblN0YXJ0IikuYXR0cigiY2xhc3MiLCJleHRlbnNpb24iKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTkwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI0MCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJjb21wb3NpdGlvbkVuZCIpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksbi5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYWdncmVnYXRpb25FbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTgsNyBMOSwxMyBMMSw3IEw5LDEgWiIpLG4uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lTdGFydCIpLmF0dHIoImNsYXNzIiwiZXh0ZW5zaW9uIikuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSxuLmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJkZXBlbmRlbmN5RW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIik7dmFyIGk9bmV3IExlLmEuR3JhcGgoe211bHRpZ3JhcGg6ITB9KTtpLnNldEdyYXBoKHtpc011bHRpR3JhcGg6ITB9KSxpLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7Zm9yKHZhciBhPU9lLmdldENsYXNzZXMoKSxzPU9iamVjdC5rZXlzKGEpLGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIGw9YVtzW2NdXSxoPVdlKHIsbCxHZSk7VmVbaC5pZF09aCxpLnNldE5vZGUoaC5pZCxoKSxvLmluZm8oIk9yZyBoZWlnaHQ6ICIraC5oZWlnaHQpfU9lLmdldFJlbGF0aW9ucygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygidGpvaG8iK1hlKHQuaWQxKStYZSh0LmlkMikrSlNPTi5zdHJpbmdpZnkodCkpLGkuc2V0RWRnZShYZSh0LmlkMSksWGUodC5pZDIpLHtyZWxhdGlvbjp0fSx0LnRpdGxlfHwiREVGQVVMVCIpfSkpLEJlLmEubGF5b3V0KGkpLGkubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT10JiZ2b2lkIDAhPT1pLm5vZGUodCkmJihvLmRlYnVnKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KGkubm9kZSh0KSkpLE9iamVjdCh1LnNlbGVjdCkoIiMiK3dlKHQpKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisoaS5ub2RlKHQpLngtaS5ub2RlKHQpLndpZHRoLzIpKyIsIisoaS5ub2RlKHQpLnktaS5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSl9KSksaS5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PWkuZWRnZSh0KSYmKG8uZGVidWcoIkVkZ2UgIit0LnYrIiAtPiAiK3QudysiOiAiK0pTT04uc3RyaW5naWZ5KGkuZWRnZSh0KSkpLEhlKHIsaS5lZGdlKHQpLGkuZWRnZSh0KS5yZWxhdGlvbixHZSkpfSkpO3ZhciBmPXIubm9kZSgpLmdldEJCb3goKSxkPWYud2lkdGgrNDAscD1mLmhlaWdodCs0MDt0ZShyLHAsZCxHZS51c2VNYXhXaWR0aCk7dmFyIHk9IiIuY29uY2F0KGYueC0yMCwiICIpLmNvbmNhdChmLnktMjAsIiAiKS5jb25jYXQoZCwiICIpLmNvbmNhdChwKTtvLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KHkpKSxyLmF0dHIoInZpZXdCb3giLHkpfSxRZT17ZXh0ZW5zaW9uOmZ1bmN0aW9uKHQsZSxuKXtvLnRyYWNlKCJNYWtpbmcgbWFya2VycyBmb3IgIixuKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1leHRlbnNpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwxOTApLmF0dHIoIm1hcmtlckhlaWdodCIsMjQwKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSw3IEwxOCwxMyBWIDEgWiIpLHQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWV4dGVuc2lvbkVuZCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGV4dGVuc2lvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxLDEgViAxMyBMMTgsNyBaIil9LGNvbXBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY29tcG9zaXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGNvbXBvc2l0aW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY29tcG9zaXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjb21wb3NpdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGFnZ3JlZ2F0aW9uOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYWdncmVnYXRpb25TdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyIGFnZ3JlZ2F0aW9uICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItYWdncmVnYXRpb25FbmQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBhZ2dyZWdhdGlvbiAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxLDcgTDksMSBaIil9LGRlcGVuZGVuY3k6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1kZXBlbmRlbmN5U3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBkZXBlbmRlbmN5ICIrZSkuYXR0cigicmVmWCIsMCkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDE5MCkuYXR0cigibWFya2VySGVpZ2h0IiwyNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSA1LDcgTDksMTMgTDEsNyBMOSwxIFoiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1kZXBlbmRlbmN5RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgZGVwZW5kZW5jeSAiK2UpLmF0dHIoInJlZlgiLDE5KS5hdHRyKCJyZWZZIiw3KS5hdHRyKCJtYXJrZXJXaWR0aCIsMjApLmF0dHIoIm1hcmtlckhlaWdodCIsMjgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOCw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfSxwb2ludDpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLXBvaW50RW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIiksdC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItcG9pbnRTdGFydCIpLmF0dHIoImNsYXNzIiwibWFya2VyICIrZSkuYXR0cigidmlld0JveCIsIjAgMCAxMCAxMCIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTIpLmF0dHIoIm1hcmtlckhlaWdodCIsMTIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDUgTCAxMCAxMCBMIDEwIDAgeiIpLmF0dHIoImNsYXNzIiwiYXJyb3dNYXJrZXJQYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIxLDAiKX0sY2lyY2xlOmZ1bmN0aW9uKHQsZSl7dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKyItY2lyY2xlRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsMTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNpcmNsZVN0YXJ0IikuYXR0cigiY2xhc3MiLCJtYXJrZXIgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsLTEpLmF0dHIoInJlZlkiLDUpLmF0dHIoIm1hcmtlclVuaXRzIiwidXNlclNwYWNlT25Vc2UiKS5hdHRyKCJtYXJrZXJXaWR0aCIsMTEpLmF0dHIoIm1hcmtlckhlaWdodCIsMTEpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwiNSIpLmF0dHIoImN5IiwiNSIpLmF0dHIoInIiLCI1IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfSxjcm9zczpmdW5jdGlvbih0LGUpe3QuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzRW5kIikuYXR0cigiY2xhc3MiLCJtYXJrZXIgY3Jvc3MgIitlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDExIDExIikuYXR0cigicmVmWCIsMTIpLmF0dHIoInJlZlkiLDUuMikuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMSkuYXR0cigibWFya2VySGVpZ2h0IiwxMSkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDEsMSBsIDksOSBNIDEwLDEgbCAtOSw5IikuYXR0cigiY2xhc3MiLCJhcnJvd01hcmtlclBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwyKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpLHQuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsZSsiLWNyb3NzU3RhcnQiKS5hdHRyKCJjbGFzcyIsIm1hcmtlciBjcm9zcyAiK2UpLmF0dHIoInZpZXdCb3giLCIwIDAgMTEgMTEiKS5hdHRyKCJyZWZYIiwtMSkuYXR0cigicmVmWSIsNS4yKS5hdHRyKCJtYXJrZXJVbml0cyIsInVzZXJTcGFjZU9uVXNlIikuYXR0cigibWFya2VyV2lkdGgiLDExKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDExKS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMSwxIGwgOSw5IE0gMTAsMSBsIC05LDkiKS5hdHRyKCJjbGFzcyIsImFycm93TWFya2VyUGF0aCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLDIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMSwwIil9LGJhcmI6ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUrIi1iYXJiRW5kIikuYXR0cigicmVmWCIsMTkpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwxNCkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAxOSw3IEw5LDEzIEwxNCw3IEw5LDEgWiIpfX0sSmU9ZnVuY3Rpb24odCxlLG4scil7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXtRZVtlXSh0LG4scil9KSl9O2Z1bmN0aW9uIHRuKHQpe3JldHVybih0bj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBlbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10fHwiIjtpZigib2JqZWN0Ij09PXRuKGkpJiYoaT1pWzBdKSxldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSlyZXR1cm4gaT1pLnJlcGxhY2UoL1xcbnxcbi9nLCI8YnIgLz4iKSxvLmluZm8oInZlcnRleFRleHQiK2kpLGZ1bmN0aW9uKHQpe3ZhciBlLG4scj1PYmplY3QodS5zZWxlY3QpKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJmb3JlaWduT2JqZWN0IikpLGk9ci5hcHBlbmQoInhodG1sOmRpdiIpLGE9dC5sYWJlbCxvPXQuaXNOb2RlPyJub2RlTGFiZWwiOiJlZGdlTGFiZWwiO3JldHVybiBpLmh0bWwoJzxzcGFuIGNsYXNzPSInK28rJyIgJysodC5sYWJlbFN0eWxlPydzdHlsZT0iJyt0LmxhYmVsU3R5bGUrJyInOiIiKSsiPiIrYSsiPC9zcGFuPiIpLGU9aSwobj10LmxhYmVsU3R5bGUpJiZlLmF0dHIoInN0eWxlIixuKSxpLnN0eWxlKCJkaXNwbGF5IiwiaW5saW5lLWJsb2NrIiksaS5zdHlsZSgid2hpdGUtc3BhY2UiLCJub3dyYXAiKSxpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpLHIubm9kZSgpfSh7aXNOb2RlOnIsbGFiZWw6aS5yZXBsYWNlKC9mYVtscnNiXT86ZmEtW1x3LV0rL2csKGZ1bmN0aW9uKHQpe3JldHVybiI8aSBjbGFzcz0nIi5jb25jYXQodC5yZXBsYWNlKCI6IiwiICIpLCInPjwvaT4iKX0pKSxsYWJlbFN0eWxlOmUucmVwbGFjZSgiZmlsbDoiLCJjb2xvcjoiKX0pO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7YS5zZXRBdHRyaWJ1dGUoInN0eWxlIixlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO3ZhciBzPVtdO3M9InN0cmluZyI9PXR5cGVvZiBpP2kuc3BsaXQoL1xcbnxcbnw8YnJccypcLz8+L2dpKTpBcnJheS5pc0FycmF5KGkpP2k6W107Zm9yKHZhciBjPTA7YzxzLmxlbmd0aDtjKyspe3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO2wuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIiksbC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIiksbC5zZXRBdHRyaWJ1dGUoIngiLCIwIiksbj9sLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJ0aXRsZS1yb3ciKTpsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCJyb3ciKSxsLnRleHRDb250ZW50PXNbY10udHJpbSgpLGEuYXBwZW5kQ2hpbGQobCl9cmV0dXJuIGF9LG5uPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpO2k9bnx8Im5vZGUgZGVmYXVsdCI7dmFyIGE9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsaSkuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLG89YS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuYXR0cigic3R5bGUiLGUubGFiZWxTdHlsZSkscz1vLm5vZGUoKS5hcHBlbmRDaGlsZChlbihlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsITEscikpLGM9cy5nZXRCQm94KCk7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBsPXMuY2hpbGRyZW5bMF0saD1PYmplY3QodS5zZWxlY3QpKHMpO2M9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoLmF0dHIoIndpZHRoIixjLndpZHRoKSxoLmF0dHIoImhlaWdodCIsYy5oZWlnaHQpfXZhciBmPWUucGFkZGluZy8yO3JldHVybiBvLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1jLndpZHRoLzIrIiwgIistYy5oZWlnaHQvMisiKSIpLHtzaGFwZVN2ZzphLGJib3g6YyxoYWxmUGFkZGluZzpmLGxhYmVsOm99fSxybj1mdW5jdGlvbih0LGUpe3ZhciBuPWUubm9kZSgpLmdldEJCb3goKTt0LndpZHRoPW4ud2lkdGgsdC5oZWlnaHQ9bi5oZWlnaHR9O2Z1bmN0aW9uIGFuKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoImNsYXNzIiwibGFiZWwtY29udGFpbmVyIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLWUvMisiLCIrbi8yKyIpIil9dmFyIG9uPXt9LHNuPXt9LGNuPXt9LHVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8udHJhY2UoIkluIGlzRGVjZW5kYW50IixlLCIgIix0LCIgPSAiLHNuW2VdLmluZGV4T2YodCk+PTApLHNuW2VdLmluZGV4T2YodCk+PTB9LGxuPWZ1bmN0aW9uIHQoZSxuLHIsaSl7by53YXJuKCJDb3B5aW5nIGNoaWxkcmVuIG9mICIsZSwicm9vdCIsaSwiZGF0YSIsbi5ub2RlKGUpLGkpO3ZhciBhPW4uY2hpbGRyZW4oZSl8fFtdO2UhPT1pJiZhLnB1c2goZSksby53YXJuKCJDb3B5aW5nIChub2RlcykgY2x1c3RlcklkIixlLCJub2RlcyIsYSksYS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihuLmNoaWxkcmVuKGEpLmxlbmd0aD4wKXQoYSxuLHIsaSk7ZWxzZXt2YXIgcz1uLm5vZGUoYSk7by5pbmZvKCJjcCAiLGEsIiB0byAiLGksIiB3aXRoIHBhcmVudCAiLGUpLHIuc2V0Tm9kZShhLHMpLGkhPT1uLnBhcmVudChhKSYmKG8ud2FybigiU2V0dGluZyBwYXJlbnQiLGEsbi5wYXJlbnQoYSkpLHIuc2V0UGFyZW50KGEsbi5wYXJlbnQoYSkpKSxlIT09aSYmYSE9PWU/KG8uZGVidWcoIlNldHRpbmcgcGFyZW50IixhLGUpLHIuc2V0UGFyZW50KGEsZSkpOihvLmluZm8oIkluIGNvcHkgIixlLCJyb290IixpLCJkYXRhIixuLm5vZGUoZSksaSksby5kZWJ1ZygiTm90IFNldHRpbmcgcGFyZW50IGZvciBub2RlPSIsYSwiY2x1c3RlciE9PXJvb3RJZCIsZSE9PWksIm5vZGUhPT1jbHVzdGVySWQiLGEhPT1lKSk7dmFyIGM9bi5lZGdlcyhhKTtvLmRlYnVnKCJDb3B5aW5nIEVkZ2VzIixjKSxjLmZvckVhY2goKGZ1bmN0aW9uKHQpe28uaW5mbygiRWRnZSIsdCk7dmFyIGE9bi5lZGdlKHQudix0LncsdC5uYW1lKTtvLmluZm8oIkVkZ2UgZGF0YSIsYSxpKTt0cnl7IWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uaW5mbygiRGVjZW5kYW50cyBvZiAiLGUsIiBpcyAiLHNuW2VdKSxvLmluZm8oIkVkZ2UgaXMgIix0KSx0LnYhPT1lJiYodC53IT09ZSYmKHNuW2VdPyhvLmluZm8oIkhlcmUgIiksc25bZV0uaW5kZXhPZih0LnYpPj0wfHwoISF1bih0LnYsZSl8fCghIXVuKHQudyxlKXx8c25bZV0uaW5kZXhPZih0LncpPj0wKSkpOihvLmRlYnVnKCJUaWx0LCAiLGUsIixub3QgaW4gZGVjZW5kYW50cyIpLCExKSkpfSh0LGkpP28uaW5mbygiU2tpcHBpbmcgY29weSBvZiBlZGdlICIsdC52LCItLVx4M2UiLHQudywiIHJvb3RJZDogIixpLCIgY2x1c3RlcklkOiIsZSk6KG8uaW5mbygiQ29weWluZyBhcyAiLHQudix0LncsYSx0Lm5hbWUpLHIuc2V0RWRnZSh0LnYsdC53LGEsdC5uYW1lKSxvLmluZm8oIm5ld0dyYXBoIGVkZ2VzICIsci5lZGdlcygpLHIuZWRnZShyLmVkZ2VzKClbMF0pKSl9Y2F0Y2godCl7by5lcnJvcih0KX19KSl9by5kZWJ1ZygiUmVtb3Zpbmcgbm9kZSIsYSksbi5yZW1vdmVOb2RlKGEpfSkpfSxobj1mdW5jdGlvbiB0KGUsbil7by50cmFjZSgiU2VhcmNoaW5nIixlKTt2YXIgcj1uLmNoaWxkcmVuKGUpO2lmKG8udHJhY2UoIlNlYXJjaGluZyBjaGlsZHJlbiBvZiBpZCAiLGUsciksci5sZW5ndGg8MSlyZXR1cm4gby50cmFjZSgiVGhpcyBpcyBhIHZhbGlkIG5vZGUiLGUpLGU7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXQocltpXSxuKTtpZihhKXJldHVybiBvLnRyYWNlKCJGb3VuZCByZXBsYWNlbWVudCBmb3IiLGUsIiA9PiAiLGEpLGF9fSxmbj1mdW5jdGlvbih0KXtyZXR1cm4gb25bdF0mJm9uW3RdLmV4dGVybmFsQ29ubmVjdGlvbnMmJm9uW3RdP29uW3RdLmlkOnR9LGRuPWZ1bmN0aW9uKHQsZSl7IXR8fGU+MTA/by5kZWJ1ZygiT3B0aW5nIG91dCwgbm8gZ3JhcGggIik6KG8uZGVidWcoIk9wdGluZyBpbiwgZ3JhcGggIiksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuY2hpbGRyZW4oZSkubGVuZ3RoPjAmJihvLndhcm4oIkNsdXN0ZXIgaWRlbnRpZmllZCIsZSwiIFJlcGxhY2VtZW50IGlkIGluIGVkZ2VzOiAiLGhuKGUsdCkpLHNuW2VdPWZ1bmN0aW9uIHQoZSxuKXtmb3IodmFyIHI9bi5jaGlsZHJlbihlKSxpPVtdLmNvbmNhdChyKSxhPTA7YTxyLmxlbmd0aDthKyspY25bclthXV09ZSxpPWkuY29uY2F0KHQoclthXSxuKSk7cmV0dXJuIGl9KGUsdCksb25bZV09e2lkOmhuKGUsdCksY2x1c3RlckRhdGE6dC5ub2RlKGUpfSl9KSksdC5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXQuY2hpbGRyZW4oZSkscj10LmVkZ2VzKCk7bi5sZW5ndGg+MD8oby5kZWJ1ZygiQ2x1c3RlciBpZGVudGlmaWVkIixlLHNuKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudiE9PWUmJnQudyE9PWUmJih1bih0LnYsZSledW4odC53LGUpJiYoby53YXJuKCJFZGdlOiAiLHQsIiBsZWF2ZXMgY2x1c3RlciAiLGUpLG8ud2FybigiRGVjZW5kYW50cyBvZiBYWFggIixlLCI6ICIsc25bZV0pLG9uW2VdLmV4dGVybmFsQ29ubmVjdGlvbnM9ITApKX0pKSk6by5kZWJ1ZygiTm90IGEgY2x1c3RlciAiLGUsc24pfSkpLHQuZWRnZXMoKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj10LmVkZ2UoZSk7by53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeShlKSksby53YXJuKCJFZGdlICIrZS52KyIgLT4gIitlLncrIjogIitKU09OLnN0cmluZ2lmeSh0LmVkZ2UoZSkpKTt2YXIgcj1lLnYsaT1lLnc7by53YXJuKCJGaXggWFhYIixvbiwiaWRzOiIsZS52LGUudywiVHJhbnNsYXRlaW5nOiAiLG9uW2Uudl0sIiAtLS0gIixvbltlLnddKSwob25bZS52XXx8b25bZS53XSkmJihvLndhcm4oIkZpeGluZyBhbmQgdHJpeGluZyAtIHJlbW92aW5nIFhYWCIsZS52LGUudyxlLm5hbWUpLHI9Zm4oZS52KSxpPWZuKGUudyksdC5yZW1vdmVFZGdlKGUudixlLncsZS5uYW1lKSxyIT09ZS52JiYobi5mcm9tQ2x1c3Rlcj1lLnYpLGkhPT1lLncmJihuLnRvQ2x1c3Rlcj1lLncpLG8ud2FybigiRml4IFJlcGxhY2luZyB3aXRoIFhYWCIscixpLGUubmFtZSksdC5zZXRFZGdlKHIsaSxuLGUubmFtZSkpfSkpLG8ud2FybigiQWRqdXN0ZWQgR3JhcGgiLExlLmEuanNvbi53cml0ZSh0KSkscG4odCwwKSxvLnRyYWNlKG9uKSl9LHBuPWZ1bmN0aW9uIHQoZSxuKXtpZihvLndhcm4oImV4dHJhY3RvciAtICIsbixMZS5hLmpzb24ud3JpdGUoZSksZS5jaGlsZHJlbigiRCIpKSxuPjEwKW8uZXJyb3IoIkJhaWxpbmcgb3V0Iik7ZWxzZXtmb3IodmFyIHI9ZS5ub2RlcygpLGk9ITEsYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdLGM9ZS5jaGlsZHJlbihzKTtpPWl8fGMubGVuZ3RoPjB9aWYoaSl7by5kZWJ1ZygiTm9kZXMgPSAiLHIsbik7Zm9yKHZhciB1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBsPXJbdV07aWYoby5kZWJ1ZygiRXh0cmFjdGluZyBub2RlIixsLG9uLG9uW2xdJiYhb25bbF0uZXh0ZXJuYWxDb25uZWN0aW9ucywhZS5wYXJlbnQobCksZS5ub2RlKGwpLGUuY2hpbGRyZW4oIkQiKSwiIERlcHRoICIsbiksb25bbF0paWYoIW9uW2xdLmV4dGVybmFsQ29ubmVjdGlvbnMmJmUuY2hpbGRyZW4obCkmJmUuY2hpbGRyZW4obCkubGVuZ3RoPjApe28ud2FybigiQ2x1c3RlciB3aXRob3V0IGV4dGVybmFsIGNvbm5lY3Rpb25zLCB3aXRob3V0IGEgcGFyZW50IGFuZCB3aXRoIGNoaWxkcmVuIixsLG4pO3ZhciBoPSJUQiI9PT1lLmdyYXBoKCkucmFua2Rpcj8iTFIiOiJUQiI7b25bbF0mJm9uW2xdLmNsdXN0ZXJEYXRhJiZvbltsXS5jbHVzdGVyRGF0YS5kaXImJihoPW9uW2xdLmNsdXN0ZXJEYXRhLmRpcixvLndhcm4oIkZpeGluZyBkaXIiLG9uW2xdLmNsdXN0ZXJEYXRhLmRpcixoKSk7dmFyIGY9bmV3IExlLmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpoLG5vZGVzZXA6NTAscmFua3NlcDo1MCxtYXJnaW54OjgsbWFyZ2lueTo4fSkuc2V0RGVmYXVsdEVkZ2VMYWJlbCgoZnVuY3Rpb24oKXtyZXR1cm57fX0pKTtvLndhcm4oIk9sZCBncmFwaCBiZWZvcmUgY29weSIsTGUuYS5qc29uLndyaXRlKGUpKSxsbihsLGUsZixsKSxlLnNldE5vZGUobCx7Y2x1c3Rlck5vZGU6ITAsaWQ6bCxjbHVzdGVyRGF0YTpvbltsXS5jbHVzdGVyRGF0YSxsYWJlbFRleHQ6b25bbF0ubGFiZWxUZXh0LGdyYXBoOmZ9KSxvLndhcm4oIk5ldyBncmFwaCBhZnRlciBjb3B5IG5vZGU6ICgiLGwsIikiLExlLmEuanNvbi53cml0ZShmKSksby5kZWJ1ZygiT2xkIGdyYXBoIGFmdGVyIGNvcHkiLExlLmEuanNvbi53cml0ZShlKSl9ZWxzZSBvLndhcm4oIkNsdXN0ZXIgKiogIixsLCIgKipub3QgbWVldGluZyB0aGUgY3JpdGVyaWEgIWV4dGVybmFsQ29ubmVjdGlvbnM6Iiwhb25bbF0uZXh0ZXJuYWxDb25uZWN0aW9ucywiIG5vIHBhcmVudDogIiwhZS5wYXJlbnQobCksIiBjaGlsZHJlbiAiLGUuY2hpbGRyZW4obCkmJmUuY2hpbGRyZW4obCkubGVuZ3RoPjAsZS5jaGlsZHJlbigiRCIpLG4pLG8uZGVidWcob24pO2Vsc2Ugby5kZWJ1ZygiTm90IGEgY2x1c3RlciIsbCxuKX1yPWUubm9kZXMoKSxvLndhcm4oIk5ldyBsaXN0IG9mIG5vZGVzIixyKTtmb3IodmFyIGQ9MDtkPHIubGVuZ3RoO2QrKyl7dmFyIHA9cltkXSx5PWUubm9kZShwKTtvLndhcm4oIiBOb3cgbmV4dCBsZXZlbCIscCx5KSx5LmNsdXN0ZXJOb2RlJiZ0KHkuZ3JhcGgsbisxKX19ZWxzZSBvLmRlYnVnKCJEb25lLCBubyBub2RlIGhhcyBjaGlsZHJlbiIsZS5ub2RlcygpKX19LHluPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KGUsbil7aWYoMD09PW4ubGVuZ3RoKXJldHVybltdO3ZhciByPU9iamVjdC5hc3NpZ24obik7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9ZS5jaGlsZHJlbihuKSxhPXQoZSxpKTtyPXIuY29uY2F0KGEpfSkpLHJ9KHQsdC5jaGlsZHJlbigpKX0sZ249bigxNzApO3ZhciBtbj1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT10LngsYT10Lnksbz1pLXIueCxzPWEtci55LGM9TWF0aC5zcXJ0KGUqZSpzKnMrbipuKm8qbyksdT1NYXRoLmFicyhlKm4qby9jKTtyLng8aSYmKHU9LXUpO3ZhciBsPU1hdGguYWJzKGUqbipzL2MpO3JldHVybiByLnk8YSYmKGw9LWwpLHt4OmkrdSx5OmErbH19O3ZhciB2bj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG1uKHQsZSxlLG4pfTtmdW5jdGlvbiBibih0LGUpe3JldHVybiB0KmU+MH12YXIgeG49ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYSxvLHMsYyx1LGwsaCxmLGQscCx5LGc7aWYoaT1lLnktdC55LG89dC54LWUueCxjPWUueCp0LnktdC54KmUueSxmPWkqbi54K28qbi55K2MsZD1pKnIueCtvKnIueStjLCEoMCE9PWYmJjAhPT1kJiZibihmLGQpfHwoYT1yLnktbi55LHM9bi54LXIueCx1PXIueCpuLnktbi54KnIueSxsPWEqdC54K3MqdC55K3UsaD1hKmUueCtzKmUueSt1LDAhPT1sJiYwIT09aCYmYm4obCxoKXx8MD09KHA9aSpzLWEqbykpKSlyZXR1cm4geT1NYXRoLmFicyhwLzIpLHt4OihnPW8qdS1zKmMpPDA/KGcteSkvcDooZyt5KS9wLHk6KGc9YSpjLWkqdSk8MD8oZy15KS9wOihnK3kpL3B9fSxfbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC54LGk9dC55LGE9W10sbz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkscz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7ImZ1bmN0aW9uIj09dHlwZW9mIGUuZm9yRWFjaD9lLmZvckVhY2goKGZ1bmN0aW9uKHQpe289TWF0aC5taW4obyx0LngpLHM9TWF0aC5taW4ocyx0LnkpfSkpOihvPU1hdGgubWluKG8sZS54KSxzPU1hdGgubWluKHMsZS55KSk7Zm9yKHZhciBjPXItdC53aWR0aC8yLW8sdT1pLXQuaGVpZ2h0LzItcyxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBoPWVbbF0sZj1lW2w8ZS5sZW5ndGgtMT9sKzE6MF0sZD14bih0LG4se3g6YytoLngseTp1K2gueX0se3g6YytmLngseTp1K2YueX0pO2QmJmEucHVzaChkKX1pZighYS5sZW5ndGgpcmV0dXJuIHQ7YS5sZW5ndGg+MSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXQueC1uLngsaT10Lnktbi55LGE9TWF0aC5zcXJ0KHIqcitpKmkpLG89ZS54LW4ueCxzPWUueS1uLnksYz1NYXRoLnNxcnQobypvK3Mqcyk7cmV0dXJuIGE8Yz8tMTphPT09Yz8wOjF9KSk7cmV0dXJuIGFbMF19O3ZhciBrbj1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaT10LngsYT10Lnksbz1lLngtaSxzPWUueS1hLGM9dC53aWR0aC8yLHU9dC5oZWlnaHQvMjtyZXR1cm4gTWF0aC5hYnMocykqYz5NYXRoLmFicyhvKSp1PyhzPDAmJih1PS11KSxuPTA9PT1zPzA6dSpvL3Mscj11KToobzwwJiYoYz0tYyksbj1jLHI9MD09PW8/MDpjKnMvbykse3g6aStuLHk6YStyfX0sd249e25vZGU6bi5uKGduKS5hLGNpcmNsZTp2bixlbGxpcHNlOm1uLHBvbHlnb246X24scmVjdDprbn07ZnVuY3Rpb24gVG4odCl7cmV0dXJuKFRuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIEVuPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGk9NzAsYT0xMDsiTFIiPT09biYmKGk9MTAsYT03MCk7dmFyIG89ci5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMSppLzIpLmF0dHIoInkiLC0xKmEvMikuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigiY2xhc3MiLCJmb3JrLWpvaW4iKTtyZXR1cm4gcm4oZSxvKSxlLmhlaWdodD1lLmhlaWdodCtlLnBhZGRpbmcvMixlLndpZHRoPWUud2lkdGgrZS5wYWRkaW5nLzIsZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnJlY3QoZSx0KX0scn0sQ249e3F1ZXN0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcrKGkuaGVpZ2h0K2UucGFkZGluZykscz1be3g6YS8yLHk6MH0se3g6YSx5Oi1hLzJ9LHt4OmEvMix5Oi1hfSx7eDowLHk6LWEvMn1dO28uaW5mbygiUXVlc3Rpb24gbWFpbiAoQ2lyY2xlKSIpO3ZhciBjPWFuKHIsYSxhLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvLndhcm4oIkludGVyc2VjdCBjYWxsZWQiKSx3bi5wb2x5Z29uKGUscyx0KX0scn0scmVjdDpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSwibm9kZSAiK2UuY2xhc3NlcywhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9bi5oYWxmUGFkZGluZztvLnRyYWNlKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigiY2xhc3MiLCJiYXNpYyBsYWJlbC1jb250YWluZXIiKS5hdHRyKCJzdHlsZSIsZS5zdHlsZSkuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLHJuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnJlY3QoZSx0KX0scn0scmVjdFdpdGhUaXRsZTpmdW5jdGlvbih0LGUpe3ZhciBuO249ZS5jbGFzc2VzPyJub2RlICIrZS5jbGFzc2VzOiJub2RlIGRlZmF1bHQiO3ZhciByPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLG4pLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxpPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksYT1yLmluc2VydCgibGluZSIpLHM9ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYz1lLmxhYmVsVGV4dC5mbGF0P2UubGFiZWxUZXh0LmZsYXQoKTplLmxhYmVsVGV4dCxsPSIiO2w9Im9iamVjdCI9PT1UbihjKT9jWzBdOmMsby5pbmZvKCJMYWJlbCB0ZXh0IGFiYzc5IixsLGMsIm9iamVjdCI9PT1UbihjKSk7dmFyIGgsZj1zLm5vZGUoKS5hcHBlbmRDaGlsZChlbihsLGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKGV0KGhlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgZD1mLmNoaWxkcmVuWzBdLHA9T2JqZWN0KHUuc2VsZWN0KShmKTtoPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscC5hdHRyKCJ3aWR0aCIsaC53aWR0aCkscC5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX1vLmluZm8oIlRleHQgMiIsYyk7dmFyIHk9Yy5zbGljZSgxLGMubGVuZ3RoKSxnPWYuZ2V0QkJveCgpLG09cy5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4oeS5qb2luP3kuam9pbigiPGJyLz4iKTp5LGUubGFiZWxTdHlsZSwhMCwhMCkpO2lmKGV0KGhlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgdj1tLmNoaWxkcmVuWzBdLGI9T2JqZWN0KHUuc2VsZWN0KShtKTtoPXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYi5hdHRyKCJ3aWR0aCIsaC53aWR0aCksYi5hdHRyKCJoZWlnaHQiLGguaGVpZ2h0KX12YXIgeD1lLnBhZGRpbmcvMjtyZXR1cm4gT2JqZWN0KHUuc2VsZWN0KShtKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKGgud2lkdGg+Zy53aWR0aD8wOihnLndpZHRoLWgud2lkdGgpLzIpKyIsICIrKGcuaGVpZ2h0K3grNSkrIikiKSxPYmplY3QodS5zZWxlY3QpKGYpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoaC53aWR0aDxnLndpZHRoPzA6LShnLndpZHRoLWgud2lkdGgpLzIpKyIsIDApIiksaD1zLm5vZGUoKS5nZXRCQm94KCkscy5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistaC53aWR0aC8yKyIsICIrKC1oLmhlaWdodC8yLXgrMykrIikiKSxpLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtaC53aWR0aC8yLXgpLmF0dHIoInkiLC1oLmhlaWdodC8yLXgpLmF0dHIoIndpZHRoIixoLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixoLmhlaWdodCtlLnBhZGRpbmcpLGEuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieDEiLC1oLndpZHRoLzIteCkuYXR0cigieDIiLGgud2lkdGgvMit4KS5hdHRyKCJ5MSIsLWguaGVpZ2h0LzIteCtnLmhlaWdodCt4KS5hdHRyKCJ5MiIsLWguaGVpZ2h0LzIteCtnLmhlaWdodCt4KSxybihlLGkpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5yZWN0KGUsdCl9LHJ9LGNob2ljZTpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQiKS5hdHRyKCJpZCIsZS5kb21JZHx8ZS5pZCkscj1be3g6MCx5OjE0fSx7eDoxNCx5OjB9LHt4OjAseTotMTR9LHt4Oi0xNCx5OjB9XSxpPW4uaW5zZXJ0KCJwb2x5Z29uIiwiOmZpcnN0LWNoaWxkIikuYXR0cigicG9pbnRzIixyLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQueCsiLCIrdC55fSkpLmpvaW4oIiAiKSk7cmV0dXJuIGkuYXR0cigiY2xhc3MiLCJzdGF0ZS1zdGFydCIpLmF0dHIoInIiLDcpLmF0dHIoIndpZHRoIiwyOCkuYXR0cigiaGVpZ2h0IiwyOCksZS53aWR0aD0yOCxlLmhlaWdodD0yOCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24uY2lyY2xlKGUsMTQsdCl9LG59LGNpcmNsZTpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmcscz1yLmluc2VydCgiY2lyY2xlIiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigic3R5bGUiLGUuc3R5bGUpLmF0dHIoInJ4IixlLnJ4KS5hdHRyKCJyeSIsZS5yeSkuYXR0cigiciIsaS53aWR0aC8yK2EpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLG8uaW5mbygiQ2lyY2xlIG1haW4iKSxybihlLHMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBvLmluZm8oIkNpcmNsZSBpbnRlcnNlY3QiLGUsaS53aWR0aC8yK2EsdCksd24uY2lyY2xlKGUsaS53aWR0aC8yK2EsdCl9LHJ9LHN0YWRpdW06ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLmhlaWdodCtlLnBhZGRpbmcsbz1pLndpZHRoK2EvNCtlLnBhZGRpbmcscz1yLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsYS8yKS5hdHRyKCJyeSIsYS8yKS5hdHRyKCJ4Iiwtby8yKS5hdHRyKCJ5IiwtYS8yKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixhKTtyZXR1cm4gcm4oZSxzKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24ucmVjdChlLHQpfSxyfSxoZXhhZ29uOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS5oZWlnaHQrZS5wYWRkaW5nLG89YS80LHM9aS53aWR0aCsyKm8rZS5wYWRkaW5nLGM9W3t4Om8seTowfSx7eDpzLW8seTowfSx7eDpzLHk6LWEvMn0se3g6cy1vLHk6LWF9LHt4Om8seTotYX0se3g6MCx5Oi1hLzJ9XSx1PWFuKHIscyxhLGMpO3JldHVybiB1LmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLHUpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUsYyx0KX0scn0scmVjdF9sZWZ0X2ludl9hcnJvdzpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi1vLzIseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDotby8yLHk6LW99LHt4OjAseTotby8yfV07cmV0dXJuIGFuKHIsYSxvLHMpLmF0dHIoInN0eWxlIixlLnN0eWxlKSxlLndpZHRoPWErbyxlLmhlaWdodD1vLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0sbGVhbl9yaWdodDpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4Oi0yKm8vNix5OjB9LHt4OmEtby82LHk6MH0se3g6YSsyKm8vNix5Oi1vfSx7eDpvLzYseTotb31dLGM9YW4ocixhLG8scyk7cmV0dXJuIGMuYXR0cigic3R5bGUiLGUuc3R5bGUpLHJuKGUsYyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnBvbHlnb24oZSxzLHQpfSxyfSxsZWFuX2xlZnQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDoyKm8vNix5OjB9LHt4OmErby82LHk6MH0se3g6YS0yKm8vNix5Oi1vfSx7eDotby82LHk6LW99XSxjPWFuKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0sdHJhcGV6b2lkOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1pLmhlaWdodCtlLnBhZGRpbmcscz1be3g6LTIqby82LHk6MH0se3g6YSsyKm8vNix5OjB9LHt4OmEtby82LHk6LW99LHt4Om8vNix5Oi1vfV0sYz1hbihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSkscm4oZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24ucG9seWdvbihlLHMsdCl9LHJ9LGludl90cmFwZXpvaWQ6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDpvLzYseTowfSx7eDphLW8vNix5OjB9LHt4OmErMipvLzYseTotb30se3g6LTIqby82LHk6LW99XSxjPWFuKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0scmVjdF9yaWdodF9pbnZfYXJyb3c6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsdm9pZCAwLCEwKSxyPW4uc2hhcGVTdmcsaT1uLmJib3gsYT1pLndpZHRoK2UucGFkZGluZyxvPWkuaGVpZ2h0K2UucGFkZGluZyxzPVt7eDowLHk6MH0se3g6YStvLzIseTowfSx7eDphLHk6LW8vMn0se3g6YStvLzIseTotb30se3g6MCx5Oi1vfV0sYz1hbihyLGEsbyxzKTtyZXR1cm4gYy5hdHRyKCJzdHlsZSIsZS5zdHlsZSkscm4oZSxjKSxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gd24ucG9seWdvbihlLHMsdCl9LHJ9LGN5bGluZGVyOmZ1bmN0aW9uKHQsZSl7dmFyIG49bm4odCxlLHZvaWQgMCwhMCkscj1uLnNoYXBlU3ZnLGk9bi5iYm94LGE9aS53aWR0aCtlLnBhZGRpbmcsbz1hLzIscz1vLygyLjUrYS81MCksYz1pLmhlaWdodCtzK2UucGFkZGluZyx1PSJNIDAsIitzKyIgYSAiK28rIiwiK3MrIiAwLDAsMCAiK2ErIiAwIGEgIitvKyIsIitzKyIgMCwwLDAgIistYSsiIDAgbCAwLCIrYysiIGEgIitvKyIsIitzKyIgMCwwLDAgIithKyIgMCBsIDAsIistYyxsPXIuYXR0cigibGFiZWwtb2Zmc2V0LXkiLHMpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJkIix1KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistYS8yKyIsIistKGMvMitzKSsiKSIpO3JldHVybiBybihlLGwpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3ZhciBuPXduLnJlY3QoZSx0KSxyPW4ueC1lLng7aWYoMCE9byYmKE1hdGguYWJzKHIpPGUud2lkdGgvMnx8TWF0aC5hYnMocik9PWUud2lkdGgvMiYmTWF0aC5hYnMobi55LWUueSk+ZS5oZWlnaHQvMi1zKSl7dmFyIGk9cypzKigxLXIqci8obypvKSk7MCE9aSYmKGk9TWF0aC5zcXJ0KGkpKSxpPXMtaSx0LnktZS55PjAmJihpPS1pKSxuLnkrPWl9cmV0dXJuIG59LHJ9LHN0YXJ0OmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsIm5vZGUgZGVmYXVsdCIpLmF0dHIoImlkIixlLmRvbUlkfHxlLmlkKSxyPW4uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKTtyZXR1cm4gci5hdHRyKCJjbGFzcyIsInN0YXRlLXN0YXJ0IikuYXR0cigiciIsNykuYXR0cigid2lkdGgiLDE0KS5hdHRyKCJoZWlnaHQiLDE0KSxybihlLHIpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5jaXJjbGUoZSw3LHQpfSxufSxlbmQ6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZSBkZWZhdWx0IikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLHI9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpO3JldHVybiBpLmF0dHIoImNsYXNzIiwic3RhdGUtc3RhcnQiKS5hdHRyKCJyIiw3KS5hdHRyKCJ3aWR0aCIsMTQpLmF0dHIoImhlaWdodCIsMTQpLHIuYXR0cigiY2xhc3MiLCJzdGF0ZS1lbmQiKS5hdHRyKCJyIiw1KS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApLHJuKGUsaSksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLmNpcmNsZShlLDcsdCl9LG59LG5vdGU6ZnVuY3Rpb24odCxlKXt2YXIgbj1ubih0LGUsIm5vZGUgIitlLmNsYXNzZXMsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPW4uaGFsZlBhZGRpbmc7by5pbmZvKCJDbGFzc2VzID0gIixlLmNsYXNzZXMpO3ZhciBzPXIuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIik7cmV0dXJuIHMuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IiwtaS53aWR0aC8yLWEpLmF0dHIoInkiLC1pLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixpLndpZHRoK2UucGFkZGluZykuYXR0cigiaGVpZ2h0IixpLmhlaWdodCtlLnBhZGRpbmcpLHJuKGUscyksZS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHduLnJlY3QoZSx0KX0scn0sc3Vicm91dGluZTpmdW5jdGlvbih0LGUpe3ZhciBuPW5uKHQsZSx2b2lkIDAsITApLHI9bi5zaGFwZVN2ZyxpPW4uYmJveCxhPWkud2lkdGgrZS5wYWRkaW5nLG89aS5oZWlnaHQrZS5wYWRkaW5nLHM9W3t4OjAseTowfSx7eDphLHk6MH0se3g6YSx5Oi1vfSx7eDowLHk6LW99LHt4OjAseTowfSx7eDotOCx5OjB9LHt4OmErOCx5OjB9LHt4OmErOCx5Oi1vfSx7eDotOCx5Oi1vfSx7eDotOCx5OjB9XSxjPWFuKHIsYSxvLHMpO3JldHVybiBjLmF0dHIoInN0eWxlIixlLnN0eWxlKSxybihlLGMpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5wb2x5Z29uKGUscyx0KX0scn0sZm9yazpFbixqb2luOkVuLGNsYXNzX2JveDpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5wYWRkaW5nLzI7bj1lLmNsYXNzZXM/Im5vZGUgIitlLmNsYXNzZXM6Im5vZGUgZGVmYXVsdCI7dmFyIGk9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsbikuYXR0cigiaWQiLGUuZG9tSWR8fGUuaWQpLGE9aS5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxvPWkuaW5zZXJ0KCJsaW5lIikscz1pLmluc2VydCgibGluZSIpLGM9MCxsPTQsaD1pLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibGFiZWwiKSxmPTAsZD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9ucyYmZS5jbGFzc0RhdGEuYW5ub3RhdGlvbnNbMF0scD1lLmNsYXNzRGF0YS5hbm5vdGF0aW9uc1swXT8iwqsiK2UuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdKyLCuyI6IiIseT1oLm5vZGUoKS5hcHBlbmRDaGlsZChlbihwLGUubGFiZWxTdHlsZSwhMCwhMCkpLGc9eS5nZXRCQm94KCk7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBtPXkuY2hpbGRyZW5bMF0sdj1PYmplY3QodS5zZWxlY3QpKHkpO2c9bS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2LmF0dHIoIndpZHRoIixnLndpZHRoKSx2LmF0dHIoImhlaWdodCIsZy5oZWlnaHQpfWUuY2xhc3NEYXRhLmFubm90YXRpb25zWzBdJiYobCs9Zy5oZWlnaHQrNCxjKz1nLndpZHRoKTt2YXIgYj1lLmNsYXNzRGF0YS5pZDt2b2lkIDAhPT1lLmNsYXNzRGF0YS50eXBlJiYiIiE9PWUuY2xhc3NEYXRhLnR5cGUmJihoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzP2IrPSImbHQ7IitlLmNsYXNzRGF0YS50eXBlKyImZ3Q7IjpiKz0iPCIrZS5jbGFzc0RhdGEudHlwZSsiPiIpO3ZhciB4PWgubm9kZSgpLmFwcGVuZENoaWxkKGVuKGIsZS5sYWJlbFN0eWxlLCEwLCEwKSk7T2JqZWN0KHUuc2VsZWN0KSh4KS5hdHRyKCJjbGFzcyIsImNsYXNzVGl0bGUiKTt2YXIgXz14LmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGs9eC5jaGlsZHJlblswXSx3PU9iamVjdCh1LnNlbGVjdCkoeCk7Xz1rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHcuYXR0cigid2lkdGgiLF8ud2lkdGgpLHcuYXR0cigiaGVpZ2h0IixfLmhlaWdodCl9bCs9Xy5oZWlnaHQrNCxfLndpZHRoPmMmJihjPV8ud2lkdGgpO3ZhciBUPVtdO2UuY2xhc3NEYXRhLm1lbWJlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49UGUodCkuZGlzcGxheVRleHQ7aGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKG49bi5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIHI9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4obixlLmxhYmVsU3R5bGUsITAsITApKSxpPXIuZ2V0QkJveCgpO2lmKGV0KGhlKCkuZmxvd2NoYXJ0Lmh0bWxMYWJlbHMpKXt2YXIgYT1yLmNoaWxkcmVuWzBdLG89T2JqZWN0KHUuc2VsZWN0KShyKTtpPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksby5hdHRyKCJ3aWR0aCIsaS53aWR0aCksby5hdHRyKCJoZWlnaHQiLGkuaGVpZ2h0KX1pLndpZHRoPmMmJihjPWkud2lkdGgpLGwrPWkuaGVpZ2h0KzQsVC5wdXNoKHIpfSkpLGwrPTg7dmFyIEU9W107aWYoZS5jbGFzc0RhdGEubWV0aG9kcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1QZSh0KSxyPW4uZGlzcGxheVRleHQ7aGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyYmKHI9ci5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKSk7dmFyIGk9aC5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4ocixuLmNzc1N0eWxlP24uY3NzU3R5bGU6ZS5sYWJlbFN0eWxlLCEwLCEwKSksYT1pLmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIG89aS5jaGlsZHJlblswXSxzPU9iamVjdCh1LnNlbGVjdCkoaSk7YT1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHMuYXR0cigid2lkdGgiLGEud2lkdGgpLHMuYXR0cigiaGVpZ2h0IixhLmhlaWdodCl9YS53aWR0aD5jJiYoYz1hLndpZHRoKSxsKz1hLmhlaWdodCs0LEUucHVzaChpKX0pKSxsKz04LGQpe3ZhciBDPShjLWcud2lkdGgpLzI7T2JqZWN0KHUuc2VsZWN0KSh5KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoICIrKC0xKmMvMitDKSsiLCAiKy0xKmwvMisiKSIpLGY9Zy5oZWlnaHQrNH12YXIgUz0oYy1fLndpZHRoKS8yO3JldHVybiBPYmplY3QodS5zZWxlY3QpKHgpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSggIisoLTEqYy8yK1MpKyIsICIrKC0xKmwvMitmKSsiKSIpLGYrPV8uaGVpZ2h0KzQsby5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWMvMi1yKS5hdHRyKCJ4MiIsYy8yK3IpLmF0dHIoInkxIiwtbC8yLXIrOCtmKS5hdHRyKCJ5MiIsLWwvMi1yKzgrZiksZis9OCxULmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdCh1LnNlbGVjdCkodCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1jLzIrIiwgIisoLTEqbC8yK2YrNCkrIikiKSxmKz1fLmhlaWdodCs0fSkpLGYrPTgscy5hdHRyKCJjbGFzcyIsImRpdmlkZXIiKS5hdHRyKCJ4MSIsLWMvMi1yKS5hdHRyKCJ4MiIsYy8yK3IpLmF0dHIoInkxIiwtbC8yLXIrOCtmKS5hdHRyKCJ5MiIsLWwvMi1yKzgrZiksZis9OCxFLmZvckVhY2goKGZ1bmN0aW9uKHQpe09iamVjdCh1LnNlbGVjdCkodCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCAiKy1jLzIrIiwgIisoLTEqbC8yK2YpKyIpIiksZis9Xy5oZWlnaHQrNH0pKSxhLmF0dHIoImNsYXNzIiwib3V0ZXIgdGl0bGUtc3RhdGUiKS5hdHRyKCJ4IiwtYy8yLXIpLmF0dHIoInkiLC1sLzItcikuYXR0cigid2lkdGgiLGMrZS5wYWRkaW5nKS5hdHRyKCJoZWlnaHQiLGwrZS5wYWRkaW5nKSxybihlLGEpLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5yZWN0KGUsdCl9LGl9fSxTbj17fSxBbj1mdW5jdGlvbih0KXt2YXIgZT1Tblt0LmlkXTtvLnRyYWNlKCJUcmFuc2Zvcm1pbmcgbm9kZSIsdC5kaWZmLHQsInRyYW5zbGF0ZSgiKyh0LngtdC53aWR0aC8yLTUpKyIsICIrdC53aWR0aC8yKyIpIik7dmFyIG49dC5kaWZmfHwwO3JldHVybiB0LmNsdXN0ZXJOb2RlP2UuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKHQueCtuLXQud2lkdGgvMikrIiwgIisodC55LXQuaGVpZ2h0LzItOCkrIikiKTplLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3QueCsiLCAiK3QueSsiKSIpLG59LE1uPXtyZWN0OmZ1bmN0aW9uKHQsZSl7by50cmFjZSgiQ3JlYXRpbmcgc3ViZ3JhcGggcmVjdCBmb3IgIixlLmlkLGUpO3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJjbHVzdGVyIisoZS5jbGFzcz8iICIrZS5jbGFzczoiIikpLmF0dHIoImlkIixlLmlkKSxyPW4uaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIiksaT1uLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3Rlci1sYWJlbCIpLGE9aS5ub2RlKCkuYXBwZW5kQ2hpbGQoZW4oZS5sYWJlbFRleHQsZS5sYWJlbFN0eWxlLHZvaWQgMCwhMCkpLHM9YS5nZXRCQm94KCk7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBjPWEuY2hpbGRyZW5bMF0sbD1PYmplY3QodS5zZWxlY3QpKGEpO3M9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsLmF0dHIoIndpZHRoIixzLndpZHRoKSxsLmF0dHIoImhlaWdodCIscy5oZWlnaHQpfXZhciBoPTAqZS5wYWRkaW5nLGY9aC8yLGQ9ZS53aWR0aDw9cy53aWR0aCtoP3Mud2lkdGgraDplLndpZHRoO2Uud2lkdGg8PXMud2lkdGgraD9lLmRpZmY9KHMud2lkdGgtZS53aWR0aCkvMjplLmRpZmY9LWUucGFkZGluZy8yLG8udHJhY2UoIkRhdGEgIixlLEpTT04uc3RyaW5naWZ5KGUpKSxyLmF0dHIoInN0eWxlIixlLnN0eWxlKS5hdHRyKCJyeCIsZS5yeCkuYXR0cigicnkiLGUucnkpLmF0dHIoIngiLGUueC1kLzIpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkKS5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0K2gpLGkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrKGUueC1zLndpZHRoLzIpKyIsICIrKGUueS1lLmhlaWdodC8yK2UucGFkZGluZy8zKSsiKSIpO3ZhciBwPXIubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gZS53aWR0aD1wLndpZHRoLGUuaGVpZ2h0PXAuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBrbihlLHQpfSxufSxyb3VuZGVkV2l0aFRpdGxlOmZ1bmN0aW9uKHQsZSl7dmFyIG49dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsZS5jbGFzc2VzKS5hdHRyKCJpZCIsZS5pZCkscj1uLmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLGk9bi5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImNsdXN0ZXItbGFiZWwiKSxhPW4uYXBwZW5kKCJyZWN0Iiksbz1pLm5vZGUoKS5hcHBlbmRDaGlsZChlbihlLmxhYmVsVGV4dCxlLmxhYmVsU3R5bGUsdm9pZCAwLCEwKSkscz1vLmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGM9by5jaGlsZHJlblswXSxsPU9iamVjdCh1LnNlbGVjdCkobyk7cz1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGwuYXR0cigid2lkdGgiLHMud2lkdGgpLGwuYXR0cigiaGVpZ2h0IixzLmhlaWdodCl9cz1vLmdldEJCb3goKTt2YXIgaD0wKmUucGFkZGluZyxmPWgvMixkPWUud2lkdGg8PXMud2lkdGgrZS5wYWRkaW5nP3Mud2lkdGgrZS5wYWRkaW5nOmUud2lkdGg7ZS53aWR0aDw9cy53aWR0aCtlLnBhZGRpbmc/ZS5kaWZmPShzLndpZHRoKzAqZS5wYWRkaW5nLWUud2lkdGgpLzI6ZS5kaWZmPS1lLnBhZGRpbmcvMixyLmF0dHIoImNsYXNzIiwib3V0ZXIiKS5hdHRyKCJ4IixlLngtZC8yLWYpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWYpLmF0dHIoIndpZHRoIixkK2gpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQraCksYS5hdHRyKCJjbGFzcyIsImlubmVyIikuYXR0cigieCIsZS54LWQvMi1mKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMi1mK3MuaGVpZ2h0LTEpLmF0dHIoIndpZHRoIixkK2gpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQraC1zLmhlaWdodC0zKSxpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLngtcy53aWR0aC8yKSsiLCAiKyhlLnktZS5oZWlnaHQvMi1lLnBhZGRpbmcvMysoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/NTozKSkrIikiKTt2YXIgcD1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUuaGVpZ2h0PXAuaGVpZ2h0LGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBrbihlLHQpfSxufSxub3RlR3JvdXA6ZnVuY3Rpb24odCxlKXt2YXIgbj10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm90ZS1jbHVzdGVyIikuYXR0cigiaWQiLGUuaWQpLHI9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPTAqZS5wYWRkaW5nLGE9aS8yO3IuYXR0cigicngiLGUucngpLmF0dHIoInJ5IixlLnJ5KS5hdHRyKCJ4IixlLngtZS53aWR0aC8yLWEpLmF0dHIoInkiLGUueS1lLmhlaWdodC8yLWEpLmF0dHIoIndpZHRoIixlLndpZHRoK2kpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQraSkuYXR0cigiZmlsbCIsIm5vbmUiKTt2YXIgbz1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9by53aWR0aCxlLmhlaWdodD1vLmhlaWdodCxlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4ga24oZSx0KX0sbn0sZGl2aWRlcjpmdW5jdGlvbih0LGUpe3ZhciBuPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLGUuY2xhc3NlcykuYXR0cigiaWQiLGUuaWQpLHI9bi5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKSxpPTAqZS5wYWRkaW5nLGE9aS8yO3IuYXR0cigiY2xhc3MiLCJkaXZpZGVyIikuYXR0cigieCIsZS54LWUud2lkdGgvMi1hKS5hdHRyKCJ5IixlLnktZS5oZWlnaHQvMikuYXR0cigid2lkdGgiLGUud2lkdGgraSkuYXR0cigiaGVpZ2h0IixlLmhlaWdodCtpKTt2YXIgbz1yLm5vZGUoKS5nZXRCQm94KCk7cmV0dXJuIGUud2lkdGg9by53aWR0aCxlLmhlaWdodD1vLmhlaWdodCxlLmRpZmY9LWUucGFkZGluZy8yLGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBrbihlLHQpfSxufX0sT249e30sTm49e30sQm49e307ZnVuY3Rpb24gRG4odCxlKXtoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzJiZ0JiYodC5zdHlsZS53aWR0aD05KmUubGVuZ3RoKyJweCIsdC5zdHlsZS5oZWlnaHQ9IjEycHgiKX12YXIgTG49ZnVuY3Rpb24odCxlKXtvLndhcm4oImFiYzg4IGN1dFBhdGhBdEludGVyc2VjdCIsdCxlKTt2YXIgbj1bXSxyPXRbMF0saT0hMTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZihvLmluZm8oImFiYzg4IGNoZWNraW5nIHBvaW50Iix0LGUpLGZ1bmN0aW9uKHQsZSl7dmFyIG49dC54LHI9dC55LGk9TWF0aC5hYnMoZS54LW4pLGE9TWF0aC5hYnMoZS55LXIpLG89dC53aWR0aC8yLHM9dC5oZWlnaHQvMjtyZXR1cm4gaT49b3x8YT49c30oZSx0KXx8aSlvLndhcm4oImFiYzg4IG91dHNpZGUiLHQscikscj10LGl8fG4ucHVzaCh0KTtlbHNle3ZhciBhPWZ1bmN0aW9uKHQsZSxuKXtvLndhcm4oImludGVyc2VjdGlvbiBjYWxjIGFiYzg5OlxuICBvdXRzaWRlUG9pbnQ6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KGUpLCJcbiAgaW5zaWRlUG9pbnQgOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobiksIlxuICBub2RlICAgICAgICA6IHg6IikuY29uY2F0KHQueCwiIHk6IikuY29uY2F0KHQueSwiIHc6IikuY29uY2F0KHQud2lkdGgsIiBoOiIpLmNvbmNhdCh0LmhlaWdodCkpO3ZhciByPXQueCxpPXQueSxhPU1hdGguYWJzKHItbi54KSxzPXQud2lkdGgvMixjPW4ueDxlLng/cy1hOnMrYSx1PXQuaGVpZ2h0LzIsbD1NYXRoLmFicyhlLnktbi55KSxoPU1hdGguYWJzKGUueC1uLngpO2lmKE1hdGguYWJzKGktZS55KSpzPk1hdGguYWJzKHItZS54KSp1KXt2YXIgZj1uLnk8ZS55P2UueS11LWk6aS11LWUueTtjPWgqZi9sO3ZhciBkPXt4Om4ueDxlLng/bi54K2M6bi54LWgrYyx5Om4ueTxlLnk/bi55K2wtZjpuLnktbCtmfTtyZXR1cm4gMD09PWMmJihkLng9ZS54LGQueT1lLnkpLDA9PT1oJiYoZC54PWUueCksMD09PWwmJihkLnk9ZS55KSxvLndhcm4oImFiYzg5IHRvcHAvYm90dCBjYWxjLCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQoZiwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KGMpLGQpLGR9dmFyIHA9bCooYz1uLng8ZS54P2UueC1zLXI6ci1zLWUueCkvaCx5PW4ueDxlLng/bi54K2gtYzpuLngtaCtjLGc9bi55PGUueT9uLnkrcDpuLnktcDtyZXR1cm4gby53YXJuKCJzaWRlcyBjYWxjIGFiYzg5LCBRICIuY29uY2F0KGwsIiwgcSAiKS5jb25jYXQocCwiLCBSICIpLmNvbmNhdChoLCIsIHIgIikuY29uY2F0KGMpLHtfeDp5LF95Omd9KSwwPT09YyYmKHk9ZS54LGc9ZS55KSwwPT09aCYmKHk9ZS54KSwwPT09bCYmKGc9ZS55KSx7eDp5LHk6Z319KGUscix0KTtvLndhcm4oImFiYzg4IGluc2lkZSIsdCxyLGEpLG8ud2FybigiYWJjODggaW50ZXJzZWN0aW9uIixhKTt2YXIgcz0hMTtuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3M9c3x8dC54PT09YS54JiZ0Lnk9PT1hLnl9KSksbi5maW5kKChmdW5jdGlvbih0KXtyZXR1cm4gdC54PT09YS54JiZ0Lnk9PT1hLnl9KSk/by53YXJuKCJhYmM4OCBubyBpbnRlcnNlY3QiLGEsbik6bi5wdXNoKGEpLGk9ITB9fSkpLG8ud2FybigiYWJjODggcmV0dXJuaW5nIHBvaW50cyIsbiksbn0sSW49ZnVuY3Rpb24gdChlLG4scixpKXtvLmluZm8oIkdyYXBoIGluIHJlY3Vyc2l2ZSByZW5kZXI6IFhYWCIsTGUuYS5qc29uLndyaXRlKG4pLGkpO3ZhciBhPW4uZ3JhcGgoKS5yYW5rZGlyO28udHJhY2UoIkRpciBpbiByZWN1cnNpdmUgcmVuZGVyIC0gZGlyOiIsYSk7dmFyIHM9ZS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsInJvb3QiKTtuLm5vZGVzKCk/by5pbmZvKCJSZWN1cnNpdmUgcmVuZGVyIFhYWCIsbi5ub2RlcygpKTpvLmluZm8oIk5vIG5vZGVzIGZvdW5kIGZvciIsbiksbi5lZGdlcygpLmxlbmd0aD4wJiZvLnRyYWNlKCJSZWN1cnNpdmUgZWRnZXMiLG4uZWRnZShuLmVkZ2VzKClbMF0pKTt2YXIgYz1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiY2x1c3RlcnMiKSxsPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlUGF0aHMiKSxoPXMuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlTGFiZWxzIiksZj1zLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwibm9kZXMiKTtuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHM9bi5ub2RlKGUpO2lmKHZvaWQgMCE9PWkpe3ZhciBjPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaS5jbHVzdGVyRGF0YSkpO28uaW5mbygiU2V0dGluZyBkYXRhIGZvciBjbHVzdGVyIFhYWCAoIixlLCIpICIsYyxpKSxuLnNldE5vZGUoaS5pZCxjKSxuLnBhcmVudChlKXx8KG8udHJhY2UoIlNldHRpbmcgcGFyZW50IixlLGkuaWQpLG4uc2V0UGFyZW50KGUsaS5pZCxjKSl9aWYoby5pbmZvKCIoSW5zZXJ0KSBOb2RlIFhYWCIrZSsiOiAiK0pTT04uc3RyaW5naWZ5KG4ubm9kZShlKSkpLHMmJnMuY2x1c3Rlck5vZGUpe28uaW5mbygiQ2x1c3RlciBpZGVudGlmaWVkIixlLHMud2lkdGgsbi5ub2RlKGUpKTt2YXIgdT10KGYscy5ncmFwaCxyLG4ubm9kZShlKSksbD11LmVsZW07cm4ocyxsKSxzLmRpZmY9dS5kaWZmfHwwLG8uaW5mbygiTm9kZSBib3VuZHMgKGFiYzEyMykiLGUscyxzLndpZHRoLHMueCxzLnkpLGZ1bmN0aW9uKHQsZSl7U25bZS5pZF09dH0obCxzKSxvLndhcm4oIlJlY3Vyc2l2ZSByZW5kZXIgY29tcGxldGUgIixsLHMpfWVsc2Ugbi5jaGlsZHJlbihlKS5sZW5ndGg+MD8oby5pbmZvKCJDbHVzdGVyIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCBYWFgiLGUscy5pZCxzLG4pLG8uaW5mbyhobihzLmlkLG4pKSxvbltzLmlkXT17aWQ6aG4ocy5pZCxuKSxub2RlOnN9KTooby5pbmZvKCJOb2RlIC0gdGhlIG5vbiByZWN1cnNpdmUgcGF0aCIsZSxzLmlkLHMpLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcixpO2UubGluaz8ocj10Lmluc2VydCgic3ZnOmEiKS5hdHRyKCJ4bGluazpocmVmIixlLmxpbmspLmF0dHIoInRhcmdldCIsZS5saW5rVGFyZ2V0fHwiX2JsYW5rIiksaT1DbltlLnNoYXBlXShyLGUsbikpOnI9aT1DbltlLnNoYXBlXSh0LGUsbiksZS50b29sdGlwJiZpLmF0dHIoInRpdGxlIixlLnRvb2x0aXApLGUuY2xhc3MmJmkuYXR0cigiY2xhc3MiLCJub2RlIGRlZmF1bHQgIitlLmNsYXNzKSxTbltlLmlkXT1yLGUuaGF2ZUNhbGxiYWNrJiZTbltlLmlkXS5hdHRyKCJjbGFzcyIsU25bZS5pZF0uYXR0cigiY2xhc3MiKSsiIGNsaWNrYWJsZSIpfShmLG4ubm9kZShlKSxhKSl9KSksbi5lZGdlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uZWRnZSh0LnYsdC53LHQubmFtZSk7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSksby5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIix0LCIgIixKU09OLnN0cmluZ2lmeShuLmVkZ2UodCkpKSxvLmluZm8oIkZpeCIsb24sImlkczoiLHQudix0LncsIlRyYW5zbGF0ZWluZzogIixvblt0LnZdLG9uW3Qud10pLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZW4oZS5sYWJlbCxlLmxhYmVsU3R5bGUpLHI9dC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImVkZ2VMYWJlbCIpLGk9ci5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIik7aS5ub2RlKCkuYXBwZW5kQ2hpbGQobik7dmFyIGEsbz1uLmdldEJCb3goKTtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIHM9bi5jaGlsZHJlblswXSxjPU9iamVjdCh1LnNlbGVjdCkobik7bz1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGMuYXR0cigid2lkdGgiLG8ud2lkdGgpLGMuYXR0cigiaGVpZ2h0IixvLmhlaWdodCl9aWYoaS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistby53aWR0aC8yKyIsICIrLW8uaGVpZ2h0LzIrIikiKSxObltlLmlkXT1yLGUud2lkdGg9by53aWR0aCxlLmhlaWdodD1vLmhlaWdodCxlLnN0YXJ0TGFiZWxMZWZ0KXt2YXIgbD1lbihlLnN0YXJ0TGFiZWxMZWZ0LGUubGFiZWxTdHlsZSksaD10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGY9aC5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT1mLm5vZGUoKS5hcHBlbmRDaGlsZChsKTt2YXIgZD1sLmdldEJCb3goKTtmLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1kLndpZHRoLzIrIiwgIistZC5oZWlnaHQvMisiKSIpLEJuW2UuaWRdfHwoQm5bZS5pZF09e30pLEJuW2UuaWRdLnN0YXJ0TGVmdD1oLERuKGEsZS5zdGFydExhYmVsTGVmdCl9aWYoZS5zdGFydExhYmVsUmlnaHQpe3ZhciBwPWVuKGUuc3RhcnRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSkseT10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLGc9eS5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT15Lm5vZGUoKS5hcHBlbmRDaGlsZChwKSxnLm5vZGUoKS5hcHBlbmRDaGlsZChwKTt2YXIgbT1wLmdldEJCb3goKTtnLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1tLndpZHRoLzIrIiwgIistbS5oZWlnaHQvMisiKSIpLEJuW2UuaWRdfHwoQm5bZS5pZF09e30pLEJuW2UuaWRdLnN0YXJ0UmlnaHQ9eSxEbihhLGUuc3RhcnRMYWJlbFJpZ2h0KX1pZihlLmVuZExhYmVsTGVmdCl7dmFyIHY9ZW4oZS5lbmRMYWJlbExlZnQsZS5sYWJlbFN0eWxlKSxiPXQuaW5zZXJ0KCJnIikuYXR0cigiY2xhc3MiLCJlZGdlVGVybWluYWxzIikseD1iLmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiaW5uZXIiKTthPXgubm9kZSgpLmFwcGVuZENoaWxkKHYpO3ZhciBfPXYuZ2V0QkJveCgpO3guYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrLV8ud2lkdGgvMisiLCAiKy1fLmhlaWdodC8yKyIpIiksYi5ub2RlKCkuYXBwZW5kQ2hpbGQodiksQm5bZS5pZF18fChCbltlLmlkXT17fSksQm5bZS5pZF0uZW5kTGVmdD1iLERuKGEsZS5lbmRMYWJlbExlZnQpfWlmKGUuZW5kTGFiZWxSaWdodCl7dmFyIGs9ZW4oZS5lbmRMYWJlbFJpZ2h0LGUubGFiZWxTdHlsZSksdz10Lmluc2VydCgiZyIpLmF0dHIoImNsYXNzIiwiZWRnZVRlcm1pbmFscyIpLFQ9dy5pbnNlcnQoImciKS5hdHRyKCJjbGFzcyIsImlubmVyIik7YT1ULm5vZGUoKS5hcHBlbmRDaGlsZChrKTt2YXIgRT1rLmdldEJCb3goKTtULmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1FLndpZHRoLzIrIiwgIistRS5oZWlnaHQvMisiKSIpLHcubm9kZSgpLmFwcGVuZENoaWxkKGspLEJuW2UuaWRdfHwoQm5bZS5pZF09e30pLEJuW2UuaWRdLmVuZFJpZ2h0PXcsRG4oYSxlLmVuZExhYmVsUmlnaHQpfX0oaCxlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7by5pbmZvKCJFZGdlICIrdC52KyIgLT4gIit0LncrIjogIitKU09OLnN0cmluZ2lmeSh0KSl9KSksby5pbmZvKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKSxvLmluZm8oIiMjIyAgICAgICAgICAgICAgICBMYXlvdXQgICAgICAgICAgICAgICAgICMjIyIpLG8uaW5mbygiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIiksby5pbmZvKG4pLEJlLmEubGF5b3V0KG4pLG8uaW5mbygiR3JhcGggYWZ0ZXIgbGF5b3V0OiIsTGUuYS5qc29uLndyaXRlKG4pKTt2YXIgZD0wO3JldHVybiB5bihuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLm5vZGUodCk7by5pbmZvKCJQb3NpdGlvbiAiK3QrIjogIitKU09OLnN0cmluZ2lmeShuLm5vZGUodCkpKSxvLmluZm8oIlBvc2l0aW9uICIrdCsiOiAoIitlLngsIiwiK2UueSwiKSB3aWR0aDogIixlLndpZHRoLCIgaGVpZ2h0OiAiLGUuaGVpZ2h0KSxlJiZlLmNsdXN0ZXJOb2RlP0FuKGUpOm4uY2hpbGRyZW4odCkubGVuZ3RoPjA/KCFmdW5jdGlvbih0LGUpe28udHJhY2UoIkluc2VydGluZyBjbHVzdGVyIik7dmFyIG49ZS5zaGFwZXx8InJlY3QiO09uW2UuaWRdPU1uW25dKHQsZSl9KGMsZSksb25bZS5pZF0ubm9kZT1lKTpBbihlKX0pKSxuLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5lZGdlKHQpO28uaW5mbygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkoZSksZSksZnVuY3Rpb24odCxlKXtvLmluZm8oIk1vdmluZyBsYWJlbCBhYmM3OCAiLHQuaWQsdC5sYWJlbCxOblt0LmlkXSk7dmFyIG49ZS51cGRhdGVkUGF0aD9lLnVwZGF0ZWRQYXRoOmUub3JpZ2luYWxQYXRoO2lmKHQubGFiZWwpe3ZhciByPU5uW3QuaWRdLGk9dC54LGE9dC55O2lmKG4pe3ZhciBzPW5lLmNhbGNMYWJlbFBvc2l0aW9uKG4pO28uaW5mbygiTW92aW5nIGxhYmVsIGZyb20gKCIsaSwiLCIsYSwiKSB0byAoIixzLngsIiwiLHMueSwiKSBhYmM3OCIpfXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCAiK2ErIikiKX1pZih0LnN0YXJ0TGFiZWxMZWZ0KXt2YXIgYz1Cblt0LmlkXS5zdGFydExlZnQsdT10LngsbD10Lnk7aWYobil7dmFyIGg9bmUuY2FsY1Rlcm1pbmFsTGFiZWxQb3NpdGlvbih0LmFycm93VHlwZVN0YXJ0PzEwOjAsInN0YXJ0X2xlZnQiLG4pO3U9aC54LGw9aC55fWMuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdSsiLCAiK2wrIikiKX1pZih0LnN0YXJ0TGFiZWxSaWdodCl7dmFyIGY9Qm5bdC5pZF0uc3RhcnRSaWdodCxkPXQueCxwPXQueTtpZihuKXt2YXIgeT1uZS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlU3RhcnQ/MTA6MCwic3RhcnRfcmlnaHQiLG4pO2Q9eS54LHA9eS55fWYuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrZCsiLCAiK3ArIikiKX1pZih0LmVuZExhYmVsTGVmdCl7dmFyIGc9Qm5bdC5pZF0uZW5kTGVmdCxtPXQueCx2PXQueTtpZihuKXt2YXIgYj1uZS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9sZWZ0IixuKTttPWIueCx2PWIueX1nLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK20rIiwgIit2KyIpIil9aWYodC5lbmRMYWJlbFJpZ2h0KXt2YXIgeD1Cblt0LmlkXS5lbmRSaWdodCxfPXQueCxrPXQueTtpZihuKXt2YXIgdz1uZS5jYWxjVGVybWluYWxMYWJlbFBvc2l0aW9uKHQuYXJyb3dUeXBlRW5kPzEwOjAsImVuZF9yaWdodCIsbik7Xz13Lngsaz13Lnl9eC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitfKyIsICIraysiKSIpfX0oZSxmdW5jdGlvbih0LGUsbixyLGksYSl7dmFyIHM9bi5wb2ludHMsYz0hMSxsPWEubm9kZShlLnYpLGg9YS5ub2RlKGUudyk7by5pbmZvKCJhYmM4OCBJbnNlcnRFZGdlOiAiLG4pLGguaW50ZXJzZWN0JiZsLmludGVyc2VjdCYmKChzPXMuc2xpY2UoMSxuLnBvaW50cy5sZW5ndGgtMSkpLnVuc2hpZnQobC5pbnRlcnNlY3Qoc1swXSkpLG8uaW5mbygiTGFzdCBwb2ludCIsc1tzLmxlbmd0aC0xXSxoLGguaW50ZXJzZWN0KHNbcy5sZW5ndGgtMV0pKSxzLnB1c2goaC5pbnRlcnNlY3Qoc1tzLmxlbmd0aC0xXSkpKSxuLnRvQ2x1c3RlciYmKG8uaW5mbygidG8gY2x1c3RlciBhYmM4OCIscltuLnRvQ2x1c3Rlcl0pLHM9TG4obi5wb2ludHMscltuLnRvQ2x1c3Rlcl0ubm9kZSksYz0hMCksbi5mcm9tQ2x1c3RlciYmKG8uaW5mbygiZnJvbSBjbHVzdGVyIGFiYzg4IixyW24uZnJvbUNsdXN0ZXJdKSxzPUxuKHMucmV2ZXJzZSgpLHJbbi5mcm9tQ2x1c3Rlcl0ubm9kZSkucmV2ZXJzZSgpLGM9ITApO3ZhciBmLGQ9cy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiFOdW1iZXIuaXNOYU4odC55KX0pKTtmPSgiZ3JhcGgiPT09aXx8ImZsb3djaGFydCI9PT1pKSYmbi5jdXJ2ZXx8dS5jdXJ2ZUJhc2lzO3ZhciBwLHk9T2JqZWN0KHUubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUoZik7c3dpdGNoKG4udGhpY2tuZXNzKXtjYXNlIm5vcm1hbCI6cD0iZWRnZS10aGlja25lc3Mtbm9ybWFsIjticmVhaztjYXNlInRoaWNrIjpwPSJlZGdlLXRoaWNrbmVzcy10aGljayI7YnJlYWs7ZGVmYXVsdDpwPSIifXN3aXRjaChuLnBhdHRlcm4pe2Nhc2Uic29saWQiOnArPSIgZWRnZS1wYXR0ZXJuLXNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6cCs9IiBlZGdlLXBhdHRlcm4tZG90dGVkIjticmVhaztjYXNlImRhc2hlZCI6cCs9IiBlZGdlLXBhdHRlcm4tZGFzaGVkIn12YXIgZz10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkoZCkpLmF0dHIoImlkIixuLmlkKS5hdHRyKCJjbGFzcyIsIiAiK3ArKG4uY2xhc3Nlcz8iICIrbi5jbGFzc2VzOiIiKSkuYXR0cigic3R5bGUiLG4uc3R5bGUpLG09IiI7c3dpdGNoKGhlKCkuc3RhdGUuYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKG09KG09KG09d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksby5pbmZvKCJhcnJvd1R5cGVTdGFydCIsbi5hcnJvd1R5cGVTdGFydCksby5pbmZvKCJhcnJvd1R5cGVFbmQiLG4uYXJyb3dUeXBlRW5kKSxuLmFycm93VHlwZVN0YXJ0KXtjYXNlImFycm93X2Nyb3NzIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1jcm9zc1N0YXJ0KSIpO2JyZWFrO2Nhc2UiYXJyb3dfcG9pbnQiOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLXBvaW50U3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19iYXJiIjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1iYXJiU3RhcnQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWNpcmNsZVN0YXJ0KSIpO2JyZWFrO2Nhc2UiYWdncmVnYXRpb24iOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWFnZ3JlZ2F0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJleHRlbnNpb24iOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWV4dGVuc2lvblN0YXJ0KSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOmcuYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbSsiIyIraSsiLWNvbXBvc2l0aW9uU3RhcnQpIik7YnJlYWs7Y2FzZSJkZXBlbmRlbmN5IjpnLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK20rIiMiK2krIi1kZXBlbmRlbmN5U3RhcnQpIil9c3dpdGNoKG4uYXJyb3dUeXBlRW5kKXtjYXNlImFycm93X2Nyb3NzIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIitpKyItY3Jvc3NFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19wb2ludCI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLXBvaW50RW5kKSIpO2JyZWFrO2Nhc2UiYXJyb3dfYmFyYiI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWJhcmJFbmQpIik7YnJlYWs7Y2FzZSJhcnJvd19jaXJjbGUiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1jaXJjbGVFbmQpIik7YnJlYWs7Y2FzZSJhZ2dyZWdhdGlvbiI6Zy5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiIyIraSsiLWFnZ3JlZ2F0aW9uRW5kKSIpO2JyZWFrO2Nhc2UiZXh0ZW5zaW9uIjpnLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjIitpKyItZXh0ZW5zaW9uRW5kKSIpO2JyZWFrO2Nhc2UiY29tcG9zaXRpb24iOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1jb21wb3NpdGlvbkVuZCkiKTticmVhaztjYXNlImRlcGVuZGVuY3kiOmcuYXR0cigibWFya2VyLWVuZCIsInVybCgiK20rIiMiK2krIi1kZXBlbmRlbmN5RW5kKSIpfXZhciB2PXt9O3JldHVybiBjJiYodi51cGRhdGVkUGF0aD1zKSx2Lm9yaWdpbmFsUGF0aD1uLnBvaW50cyx2fShsLHQsZSxvbixyLG4pKX0pKSxuLm5vZGVzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5ub2RlKHQpO28uaW5mbyh0LGUudHlwZSxlLmRpZmYpLCJncm91cCI9PT1lLnR5cGUmJihkPWUuZGlmZil9KSkse2VsZW06cyxkaWZmOmR9fSxSbj1mdW5jdGlvbih0LGUsbixyLGkpe0plKHQsbixyLGkpLFNuPXt9LE5uPXt9LEJuPXt9LE9uPXt9LHNuPXt9LGNuPXt9LG9uPXt9LG8ud2FybigiR3JhcGggYXQgZmlyc3Q6IixMZS5hLmpzb24ud3JpdGUoZSkpLGRuKGUpLG8ud2FybigiR3JhcGggYWZ0ZXI6IixMZS5hLmpzb24ud3JpdGUoZSkpLEluKHQsZSxyKX07SWUucGFyc2VyLnl5PU9lO3ZhciBGbj17ZGl2aWRlck1hcmdpbjoxMCxwYWRkaW5nOjUsdGV4dEhlaWdodDoxMH0sUG49ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Rm5bZV09dFtlXX0pKX0sam49ZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgY2xhc3MiKSxPZS5jbGVhcigpLEllLnBhcnNlci5wYXJzZSh0KTt2YXIgbj1oZSgpLmZsb3djaGFydDtvLmluZm8oImNvbmZpZzoiLG4pO3ZhciByPW4ubm9kZVNwYWNpbmd8fDUwLGk9bi5yYW5rU3BhY2luZ3x8NTAsYT1uZXcgTGUuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLnNldEdyYXBoKHtyYW5rZGlyOk9lLmdldERpcmVjdGlvbigpLG5vZGVzZXA6cixyYW5rc2VwOmksbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSkscz1PZS5nZXRDbGFzc2VzKCksYz1PZS5nZXRSZWxhdGlvbnMoKTtvLmluZm8oYyksZnVuY3Rpb24odCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtvLmluZm8oImtleXM6IixuKSxvLmluZm8odCksbi5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgcj10W25dLGk9IiI7ci5jc3NDbGFzc2VzLmxlbmd0aD4wJiYoaT1pKyIgIityLmNzc0NsYXNzZXMuam9pbigiICIpKTt2YXIgYT17bGFiZWxTdHlsZToiIn0scz12b2lkIDAhPT1yLnRleHQ/ci50ZXh0OnIuaWQsYz0iIjtzd2l0Y2goci50eXBlKXtjYXNlImNsYXNzIjpjPSJjbGFzc19ib3giO2JyZWFrO2RlZmF1bHQ6Yz0iY2xhc3NfYm94In1lLnNldE5vZGUoci5pZCx7bGFiZWxTdHlsZTphLmxhYmVsU3R5bGUsc2hhcGU6YyxsYWJlbFRleHQ6cyxjbGFzc0RhdGE6cixyeDowLHJ5OjAsY2xhc3M6aSxzdHlsZTphLnN0eWxlLGlkOnIuaWQsZG9tSWQ6ci5kb21JZCxoYXZlQ2FsbGJhY2s6ci5oYXZlQ2FsbGJhY2ssbGluazpyLmxpbmssd2lkdGg6Imdyb3VwIj09PXIudHlwZT81MDA6dm9pZCAwLHR5cGU6ci50eXBlLHBhZGRpbmc6aGUoKS5mbG93Y2hhcnQucGFkZGluZ30pLG8uaW5mbygic2V0Tm9kZSIse2xhYmVsU3R5bGU6YS5sYWJlbFN0eWxlLHNoYXBlOmMsbGFiZWxUZXh0OnMscng6MCxyeTowLGNsYXNzOmksc3R5bGU6YS5zdHlsZSxpZDpyLmlkLHdpZHRoOiJncm91cCI9PT1yLnR5cGU/NTAwOnZvaWQgMCx0eXBlOnIudHlwZSxwYWRkaW5nOmhlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0ocyxhKSxmdW5jdGlvbih0LGUpe3ZhciBuPTA7dC5mb3JFYWNoKChmdW5jdGlvbihyKXtuKys7dmFyIGk9e2NsYXNzZXM6InJlbGF0aW9uIn07aS5wYXR0ZXJuPTE9PXIucmVsYXRpb24ubGluZVR5cGU/ImRhc2hlZCI6InNvbGlkIixpLmlkPSJpZCIrbiwiYXJyb3dfb3BlbiI9PT1yLnR5cGU/aS5hcnJvd2hlYWQ9Im5vbmUiOmkuYXJyb3doZWFkPSJub3JtYWwiLG8uaW5mbyhpLHIpLGkuc3RhcnRMYWJlbFJpZ2h0PSJub25lIj09PXIucmVsYXRpb25UaXRsZTE/IiI6ci5yZWxhdGlvblRpdGxlMSxpLmVuZExhYmVsTGVmdD0ibm9uZSI9PT1yLnJlbGF0aW9uVGl0bGUyPyIiOnIucmVsYXRpb25UaXRsZTIsaS5hcnJvd1R5cGVTdGFydD1ZbihyLnJlbGF0aW9uLnR5cGUxKSxpLmFycm93VHlwZUVuZD1ZbihyLnJlbGF0aW9uLnR5cGUyKTt2YXIgYT0iIixzPSIiO2lmKHZvaWQgMCE9PXIuc3R5bGUpe3ZhciBjPVV0KHIuc3R5bGUpO2E9Yy5zdHlsZSxzPWMubGFiZWxTdHlsZX1lbHNlIGE9ImZpbGw6bm9uZSI7aS5zdHlsZT1hLGkubGFiZWxTdHlsZT1zLHZvaWQgMCE9PXIuaW50ZXJwb2xhdGU/aS5jdXJ2ZT1ZdChyLmludGVycG9sYXRlLHUuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2kuY3VydmU9WXQodC5kZWZhdWx0SW50ZXJwb2xhdGUsdS5jdXJ2ZUxpbmVhcik6aS5jdXJ2ZT1ZdChGbi5jdXJ2ZSx1LmN1cnZlTGluZWFyKSxyLnRleHQ9ci50aXRsZSx2b2lkIDA9PT1yLnRleHQ/dm9pZCAwIT09ci5zdHlsZSYmKGkuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKTooaS5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsaS5sYWJlbHBvcz0iYyIsaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscz8oaS5sYWJlbFR5cGU9Imh0bWwiLGkubGFiZWw9JzxzcGFuIGNsYXNzPSJlZGdlTGFiZWwiPicrci50ZXh0KyI8L3NwYW4+Iik6KGkubGFiZWxUeXBlPSJ0ZXh0IixpLmxhYmVsPXIudGV4dC5yZXBsYWNlKG50LmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PXIuc3R5bGUmJihpLnN0eWxlPWkuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksaS5sYWJlbFN0eWxlPWkubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksZS5zZXRFZGdlKHIuaWQxLHIuaWQyLGksbil9KSl9KGMsYSk7dmFyIGw9T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTtsLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpO3ZhciBoPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrIiBnIik7Um4oaCxhLFsiYWdncmVnYXRpb24iLCJleHRlbnNpb24iLCJjb21wb3NpdGlvbiIsImRlcGVuZGVuY3kiXSwiY2xhc3NEaWFncmFtIixlKTt2YXIgZj1sLm5vZGUoKS5nZXRCQm94KCksZD1mLndpZHRoKzE2LHA9Zi5oZWlnaHQrMTY7aWYoby5kZWJ1ZygibmV3IFZpZXdCb3ggMCAwICIuY29uY2F0KGQsIiAiKS5jb25jYXQocCksInRyYW5zbGF0ZSgiLmNvbmNhdCg4LWEuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KDgtYS5fbGFiZWwubWFyZ2lueSwiKSIpKSx0ZShsLHAsZCxuLnVzZU1heFdpZHRoKSxsLmF0dHIoInZpZXdCb3giLCIwIDAgIi5jb25jYXQoZCwiICIpLmNvbmNhdChwKSksbC5zZWxlY3QoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoOC1hLl9sYWJlbC5tYXJnaW54LCIsICIpLmNvbmNhdCg4LWYueSwiKSIpKSwhbi5odG1sTGFiZWxzKWZvcih2YXIgeT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxnPTA7Zzx5Lmxlbmd0aDtnKyspe3ZhciBtPXlbZ10sdj1tLmdldEJCb3goKSxiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Yi5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxiLnNldEF0dHJpYnV0ZSgicnkiLDApLGIuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdi53aWR0aCksYi5zZXRBdHRyaWJ1dGUoImhlaWdodCIsdi5oZWlnaHQpLG0uaW5zZXJ0QmVmb3JlKGIsbS5maXJzdENoaWxkKX19O2Z1bmN0aW9uIFluKHQpe3ZhciBlO3N3aXRjaCh0KXtjYXNlIDA6ZT0iYWdncmVnYXRpb24iO2JyZWFrO2Nhc2UgMTplPSJleHRlbnNpb24iO2JyZWFrO2Nhc2UgMjplPSJjb21wb3NpdGlvbiI7YnJlYWs7Y2FzZSAzOmU9ImRlcGVuZGVuY3kiO2JyZWFrO2RlZmF1bHQ6ZT0ibm9uZSJ9cmV0dXJuIGV9dmFyIHpuPXt9LFVuPVtdLCRuPSIiLHFuPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT16blt0XSYmKHpuW3RdPXthdHRyaWJ1dGVzOltdfSxvLmluZm8oIkFkZGVkIG5ldyBlbnRpdHkgOiIsdCkpLHpuW3RdfSxXbj17Q2FyZGluYWxpdHk6e1pFUk9fT1JfT05FOiJaRVJPX09SX09ORSIsWkVST19PUl9NT1JFOiJaRVJPX09SX01PUkUiLE9ORV9PUl9NT1JFOiJPTkVfT1JfTU9SRSIsT05MWV9PTkU6Ik9OTFlfT05FIn0sSWRlbnRpZmljYXRpb246e05PTl9JREVOVElGWUlORzoiTk9OX0lERU5USUZZSU5HIixJREVOVElGWUlORzoiSURFTlRJRllJTkcifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLmVyfSxhZGRFbnRpdHk6cW4sYWRkQXR0cmlidXRlczpmdW5jdGlvbih0LGUpe3ZhciBuLHI9cW4odCk7Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlyLmF0dHJpYnV0ZXMucHVzaChlW25dKSxvLmRlYnVnKCJBZGRlZCBhdHRyaWJ1dGUgIixlW25dLmF0dHJpYnV0ZU5hbWUpfSxnZXRFbnRpdGllczpmdW5jdGlvbigpe3JldHVybiB6bn0sYWRkUmVsYXRpb25zaGlwOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXtlbnRpdHlBOnQscm9sZUE6ZSxlbnRpdHlCOm4scmVsU3BlYzpyfTtVbi5wdXNoKGkpLG8uZGVidWcoIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgOiIsaSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gVW59LGNsZWFyOmZ1bmN0aW9uKCl7em49e30sVW49W10sJG49IiJ9LHNldFRpdGxlOmZ1bmN0aW9uKHQpeyRuPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuICRufX0sSG49big3NiksVm49bi5uKEhuKSxHbj17T05MWV9PTkVfU1RBUlQ6Ik9OTFlfT05FX1NUQVJUIixPTkxZX09ORV9FTkQ6Ik9OTFlfT05FX0VORCIsWkVST19PUl9PTkVfU1RBUlQ6IlpFUk9fT1JfT05FX1NUQVJUIixaRVJPX09SX09ORV9FTkQ6IlpFUk9fT1JfT05FX0VORCIsT05FX09SX01PUkVfU1RBUlQ6Ik9ORV9PUl9NT1JFX1NUQVJUIixPTkVfT1JfTU9SRV9FTkQ6Ik9ORV9PUl9NT1JFX0VORCIsWkVST19PUl9NT1JFX1NUQVJUOiJaRVJPX09SX01PUkVfU1RBUlQiLFpFUk9fT1JfTU9SRV9FTkQ6IlpFUk9fT1JfTU9SRV9FTkQifSxYbj1Hbixabj1mdW5jdGlvbih0LGUpe3ZhciBuO3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsR24uT05MWV9PTkVfU1RBUlQpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwxOCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTggTTE1LDAgTDE1LDE4IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixHbi5PTkxZX09ORV9FTkQpLmF0dHIoInJlZlgiLDE4KS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMTgpLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMywwIEwzLDE4IE05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEduLlpFUk9fT1JfT05FX1NUQVJUKS5hdHRyKCJyZWZYIiwwKS5hdHRyKCJyZWZZIiw5KS5hdHRyKCJtYXJrZXJXaWR0aCIsMzApLmF0dHIoIm1hcmtlckhlaWdodCIsMTgpLmF0dHIoIm9yaWVudCIsImF1dG8iKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwid2hpdGUiKS5hdHRyKCJjeCIsMjEpLmF0dHIoImN5Iiw5KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk05LDAgTDksMTgiKSwobj10LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEduLlpFUk9fT1JfT05FX0VORCkuYXR0cigicmVmWCIsMzApLmF0dHIoInJlZlkiLDkpLmF0dHIoIm1hcmtlcldpZHRoIiwzMCkuYXR0cigibWFya2VySGVpZ2h0IiwxOCkuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsOSkuYXR0cigiciIsNiksbi5hcHBlbmQoInBhdGgiKS5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoImQiLCJNMjEsMCBMMjEsMTgiKSx0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLEduLk9ORV9PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw0NSkuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFEgMTgsMCAzNiwxOCBRIDE4LDM2IDAsMTggTTQyLDkgTDQyLDI3IiksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixHbi5PTkVfT1JfTU9SRV9FTkQpLmF0dHIoInJlZlgiLDI3KS5hdHRyKCJyZWZZIiwxOCkuYXR0cigibWFya2VyV2lkdGgiLDQ1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDM2KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTMsOSBMMywyNyBNOSwxOCBRMjcsMCA0NSwxOCBRMjcsMzYgOSwxOCIpLChuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsR24uWkVST19PUl9NT1JFX1NUQVJUKS5hdHRyKCJyZWZYIiwxOCkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw0OCkuYXR0cigiY3kiLDE4KS5hdHRyKCJyIiw2KSxuLmFwcGVuZCgicGF0aCIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZCIsIk0wLDE4IFExOCwwIDM2LDE4IFExOCwzNiAwLDE4IiksKG49dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixHbi5aRVJPX09SX01PUkVfRU5EKS5hdHRyKCJyZWZYIiwzOSkuYXR0cigicmVmWSIsMTgpLmF0dHIoIm1hcmtlcldpZHRoIiw1NykuYXR0cigibWFya2VySGVpZ2h0IiwzNikuYXR0cigib3JpZW50IiwiYXV0byIpKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImN4Iiw5KS5hdHRyKCJjeSIsMTgpLmF0dHIoInIiLDYpLG4uYXBwZW5kKCJwYXRoIikuYXR0cigic3Ryb2tlIixlLnN0cm9rZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJkIiwiTTIxLDE4IFEzOSwwIDU3LDE4IFEzOSwzNiAyMSwxOCIpfSxLbj17fSxRbj1mdW5jdGlvbih0LGUsbil7dmFyIHI7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKGkpe3ZhciBhPXQuYXBwZW5kKCJnIikuYXR0cigiaWQiLGkpO3I9dm9pZCAwPT09cj9pOnI7dmFyIG89ImVudGl0eS0iK2kscz1hLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsMCkuYXR0cigieSIsMCkuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIraGUoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIitLbi5mb250U2l6ZSsicHgiKS50ZXh0KGkpLGM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPUtuLmVudGl0eVBhZGRpbmcvMyxpPUtuLmVudGl0eVBhZGRpbmcvMyxhPS44NSpLbi5mb250U2l6ZSxvPWUubm9kZSgpLmdldEJCb3goKSxzPVtdLGM9MCx1PTAsbD1vLmhlaWdodCsyKnIsaD0xO24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9IiIuY29uY2F0KGUubm9kZSgpLmlkLCItYXR0ci0iKS5jb25jYXQoaCksbz10LmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5TGFiZWwiKS5hdHRyKCJpZCIsIiIuY29uY2F0KGksIi10eXBlIikpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigidGV4dC1hbmNob3IiLCJsZWZ0IikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitoZSgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK2ErInB4IikudGV4dChuLmF0dHJpYnV0ZVR5cGUpLGY9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIGVudGl0eUxhYmVsIikuYXR0cigiaWQiLCIiLmNvbmNhdChpLCItbmFtZSIpKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoInRleHQtYW5jaG9yIiwibGVmdCIpLmF0dHIoInN0eWxlIiwiZm9udC1mYW1pbHk6ICIraGUoKS5mb250RmFtaWx5KyI7IGZvbnQtc2l6ZTogIithKyJweCIpLnRleHQobi5hdHRyaWJ1dGVOYW1lKTtzLnB1c2goe3RuOm8sbm46Zn0pO3ZhciBkPW8ubm9kZSgpLmdldEJCb3goKSxwPWYubm9kZSgpLmdldEJCb3goKTtjPU1hdGgubWF4KGMsZC53aWR0aCksdT1NYXRoLm1heCh1LHAud2lkdGgpLGwrPU1hdGgubWF4KGQuaGVpZ2h0LHAuaGVpZ2h0KSsyKnIsaCs9MX0pKTt2YXIgZj17d2lkdGg6TWF0aC5tYXgoS24ubWluRW50aXR5V2lkdGgsTWF0aC5tYXgoby53aWR0aCsyKktuLmVudGl0eVBhZGRpbmcsYyt1KzQqaSkpLGhlaWdodDpuLmxlbmd0aD4wP2w6TWF0aC5tYXgoS24ubWluRW50aXR5SGVpZ2h0LG8uaGVpZ2h0KzIqS24uZW50aXR5UGFkZGluZyl9LGQ9TWF0aC5tYXgoMCxmLndpZHRoLShjK3UpLTQqaSk7aWYobi5sZW5ndGg+MCl7ZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmLndpZHRoLzIrIiwiKyhyK28uaGVpZ2h0LzIpKyIpIik7dmFyIHA9by5oZWlnaHQrMipyLHk9ImF0dHJpYnV0ZUJveE9kZCI7cy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1wK3IrTWF0aC5tYXgoZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KS8yO2UudG4uYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciBhPXQuaW5zZXJ0KCJyZWN0IiwiIyIrZS50bi5ub2RlKCkuaWQpLmF0dHIoImNsYXNzIiwiZXIgIi5jb25jYXQoeSkpLmF0dHIoImZpbGwiLEtuLmZpbGwpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjEwMCUiKS5hdHRyKCJzdHJva2UiLEtuLnN0cm9rZSkuYXR0cigieCIsMCkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLGMrMippK2QvMikuYXR0cigiaGVpZ2h0IixlLnRuLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KzIqcik7ZS5ubi5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocGFyc2VGbG9hdChhLmF0dHIoIndpZHRoIikpK2kpKyIsIituKyIpIiksdC5pbnNlcnQoInJlY3QiLCIjIitlLm5uLm5vZGUoKS5pZCkuYXR0cigiY2xhc3MiLCJlciAiLmNvbmNhdCh5KSkuYXR0cigiZmlsbCIsS24uZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsS24uc3Ryb2tlKS5hdHRyKCJ4IiwiIi5jb25jYXQoYS5hdHRyKCJ4IikrYS5hdHRyKCJ3aWR0aCIpKSkuYXR0cigieSIscCkuYXR0cigid2lkdGgiLHUrMippK2QvMikuYXR0cigiaGVpZ2h0IixlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KzIqcikscCs9TWF0aC5tYXgoZS50bi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCxlLm5uLm5vZGUoKS5nZXRCQm94KCkuaGVpZ2h0KSsyKnIseT0iYXR0cmlidXRlQm94T2RkIj09eT8iYXR0cmlidXRlQm94RXZlbiI6ImF0dHJpYnV0ZUJveE9kZCJ9KSl9ZWxzZSBmLmhlaWdodD1NYXRoLm1heChLbi5taW5FbnRpdHlIZWlnaHQsbCksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitmLndpZHRoLzIrIiwiK2YuaGVpZ2h0LzIrIikiKTtyZXR1cm4gZn0oYSxzLGVbaV0uYXR0cmlidXRlcyksdT1jLndpZHRoLGw9Yy5oZWlnaHQsaD1hLmluc2VydCgicmVjdCIsIiMiK28pLmF0dHIoImNsYXNzIiwiZXIgZW50aXR5Qm94IikuYXR0cigiZmlsbCIsS24uZmlsbCkuYXR0cigiZmlsbC1vcGFjaXR5IiwiMTAwJSIpLmF0dHIoInN0cm9rZSIsS24uc3Ryb2tlKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsdSkuYXR0cigiaGVpZ2h0IixsKS5ub2RlKCkuZ2V0QkJveCgpO24uc2V0Tm9kZShpLHt3aWR0aDpoLndpZHRoLGhlaWdodDpoLmhlaWdodCxzaGFwZToicmVjdCIsaWQ6aX0pfSkpLHJ9LEpuPWZ1bmN0aW9uKHQpe3JldHVybih0LmVudGl0eUErdC5yb2xlQSt0LmVudGl0eUIpLnJlcGxhY2UoL1xzL2csIiIpfSx0cj0wLGVyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspS25bZVtuXV09dFtlW25dXX0sbnI9ZnVuY3Rpb24odCxlKXtvLmluZm8oIkRyYXdpbmcgRVIgZGlhZ3JhbSIpLFduLmNsZWFyKCk7dmFyIG49Vm4uYS5wYXJzZXI7bi55eT1Xbjt0cnl7bi5wYXJzZSh0KX1jYXRjaCh0KXtvLmRlYnVnKCJQYXJzaW5nIGZhaWxlZCIpfXZhciByLGk9T2JqZWN0KHUuc2VsZWN0KSgiW2lkPSciLmNvbmNhdChlLCInXSIpKTtabihpLEtuKSxyPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGRpcmVjdGVkOiEwLGNvbXBvdW5kOiExfSkuc2V0R3JhcGgoe3JhbmtkaXI6S24ubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7dmFyIGEscyxjPVFuKGksV24uZ2V0RW50aXRpZXMoKSxyKSxsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZS5zZXRFZGdlKHQuZW50aXR5QSx0LmVudGl0eUIse3JlbGF0aW9uc2hpcDp0fSxKbih0KSl9KSksdH0oV24uZ2V0UmVsYXRpb25zaGlwcygpLHIpO0JlLmEubGF5b3V0KHIpLGE9aSwocz1yKS5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PXMubm9kZSh0KSYmYS5zZWxlY3QoIiMiK3QpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMikrIiwiKyhzLm5vZGUodCkueS1zLm5vZGUodCkuaGVpZ2h0LzIpKyIgKSIpfSkpLGwuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuLHIpe3RyKys7dmFyIGk9bi5lZGdlKGUuZW50aXR5QSxlLmVudGl0eUIsSm4oZSkpLGE9T2JqZWN0KHUubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUodS5jdXJ2ZUJhc2lzKSxvPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsYShpLnBvaW50cykpLmF0dHIoInN0cm9rZSIsS24uc3Ryb2tlKS5hdHRyKCJmaWxsIiwibm9uZSIpO2UucmVsU3BlYy5yZWxUeXBlPT09V24uSWRlbnRpZmljYXRpb24uTk9OX0lERU5USUZZSU5HJiZvLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLCI4LDgiKTt2YXIgcz0iIjtzd2l0Y2goS24uYXJyb3dNYXJrZXJBYnNvbHV0ZSYmKHM9KHM9KHM9d2luZG93LmxvY2F0aW9uLnByb3RvY29sKyIvLyIrd2luZG93LmxvY2F0aW9uLmhvc3Qrd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLnJlcGxhY2UoL1woL2csIlxcKCIpKS5yZXBsYWNlKC9cKS9nLCJcXCkiKSksZS5yZWxTcGVjLmNhcmRBKXtjYXNlIFduLkNhcmRpbmFsaXR5LlpFUk9fT1JfT05FOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK1huLlpFUk9fT1JfT05FX0VORCsiKSIpO2JyZWFrO2Nhc2UgV24uQ2FyZGluYWxpdHkuWkVST19PUl9NT1JFOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK1huLlpFUk9fT1JfTU9SRV9FTkQrIikiKTticmVhaztjYXNlIFduLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOm8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK1huLk9ORV9PUl9NT1JFX0VORCsiKSIpO2JyZWFrO2Nhc2UgV24uQ2FyZGluYWxpdHkuT05MWV9PTkU6by5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrcysiIyIrWG4uT05MWV9PTkVfRU5EKyIpIil9c3dpdGNoKGUucmVsU3BlYy5jYXJkQil7Y2FzZSBXbi5DYXJkaW5hbGl0eS5aRVJPX09SX09ORTpvLmF0dHIoIm1hcmtlci1zdGFydCIsInVybCgiK3MrIiMiK1huLlpFUk9fT1JfT05FX1NUQVJUKyIpIik7YnJlYWs7Y2FzZSBXbi5DYXJkaW5hbGl0eS5aRVJPX09SX01PUkU6by5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIitzKyIjIitYbi5aRVJPX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIFduLkNhcmRpbmFsaXR5Lk9ORV9PUl9NT1JFOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrWG4uT05FX09SX01PUkVfU1RBUlQrIikiKTticmVhaztjYXNlIFduLkNhcmRpbmFsaXR5Lk9OTFlfT05FOm8uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrcysiIyIrWG4uT05MWV9PTkVfU1RBUlQrIikiKX12YXIgYz1vLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpLGw9by5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCguNSpjKSxoPSJyZWwiK3RyLGY9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVyIHJlbGF0aW9uc2hpcExhYmVsIikuYXR0cigiaWQiLGgpLmF0dHIoIngiLGwueCkuYXR0cigieSIsbC55KS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitoZSgpLmZvbnRGYW1pbHkrIjsgZm9udC1zaXplOiAiK0tuLmZvbnRTaXplKyJweCIpLnRleHQoZS5yb2xlQSkubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIiMiK2gpLmF0dHIoImNsYXNzIiwiZXIgcmVsYXRpb25zaGlwTGFiZWxCb3giKS5hdHRyKCJ4IixsLngtZi53aWR0aC8yKS5hdHRyKCJ5IixsLnktZi5oZWlnaHQvMikuYXR0cigid2lkdGgiLGYud2lkdGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQpLmF0dHIoImZpbGwiLCJ3aGl0ZSIpLmF0dHIoImZpbGwtb3BhY2l0eSIsIjg1JSIpfShpLHQscixjKX0pKTt2YXIgaD1Lbi5kaWFncmFtUGFkZGluZyxmPWkubm9kZSgpLmdldEJCb3goKSxkPWYud2lkdGgrMipoLHA9Zi5oZWlnaHQrMipoO3RlKGkscCxkLEtuLnVzZU1heFdpZHRoKSxpLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChmLngtaCwiICIpLmNvbmNhdChmLnktaCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApKX07ZnVuY3Rpb24gcnIodCl7cmV0dXJuKHJyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9ZnVuY3Rpb24gaXIodCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGFyKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBhcih0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gYXIodCxlKX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYXIodCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgb3Isc3IsY3I9MCx1cj1oZSgpLGxyPXt9LGhyPVtdLGZyPVtdLGRyPVtdLHByPXt9LHlyPXt9LGdyPTAsbXI9ITAsdnI9W10sYnI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKGxyKSxuPTA7bjxlLmxlbmd0aDtuKyspaWYobHJbZVtuXV0uaWQ9PT10KXJldHVybiBscltlW25dXS5kb21JZDtyZXR1cm4gdH0seHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9e3N0YXJ0OnQsZW5kOmUsdHlwZTp2b2lkIDAsdGV4dDoiIn07dm9pZCAwIT09KHI9bi50ZXh0KSYmKGkudGV4dD1udC5zYW5pdGl6ZVRleHQoci50cmltKCksdXIpLCciJz09PWkudGV4dFswXSYmJyInPT09aS50ZXh0W2kudGV4dC5sZW5ndGgtMV0mJihpLnRleHQ9aS50ZXh0LnN1YnN0cmluZygxLGkudGV4dC5sZW5ndGgtMSkpKSx2b2lkIDAhPT1uJiYoaS50eXBlPW4udHlwZSxpLnN0cm9rZT1uLnN0cm9rZSxpLmxlbmd0aD1uLmxlbmd0aCksaHIucHVzaChpKX0sX3I9ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dDt2b2lkIDAhPT1scltuXSYmbHJbbl0uY2xhc3Nlcy5wdXNoKGUpLHZvaWQgMCE9PXByW25dJiZwcltuXS5jbGFzc2VzLnB1c2goZSl9KSl9LGtyPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh1LnNlbGVjdCkoIi5tZXJtYWlkVG9vbHRpcCIpO251bGw9PT0oZS5fZ3JvdXBzfHxlKVswXVswXSYmKGU9T2JqZWN0KHUuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiY2xhc3MiLCJtZXJtYWlkVG9vbHRpcCIpLnN0eWxlKCJvcGFjaXR5IiwwKSksT2JqZWN0KHUuc2VsZWN0KSh0KS5zZWxlY3QoInN2ZyIpLnNlbGVjdEFsbCgiZy5ub2RlIikub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0KHUuc2VsZWN0KSh0aGlzKTtpZihudWxsIT09dC5hdHRyKCJ0aXRsZSIpKXt2YXIgbj10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2UudHJhbnNpdGlvbigpLmR1cmF0aW9uKDIwMCkuc3R5bGUoIm9wYWNpdHkiLCIuOSIpLGUuaHRtbCh0LmF0dHIoInRpdGxlIikpLnN0eWxlKCJsZWZ0Iix3aW5kb3cuc2Nyb2xsWCtuLmxlZnQrKG4ucmlnaHQtbi5sZWZ0KS8yKyJweCIpLnN0eWxlKCJ0b3AiLHdpbmRvdy5zY3JvbGxZK24udG9wLTE0K2RvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKyJweCIpLHQuY2xhc3NlZCgiaG92ZXIiLCEwKX19KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtlLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKCJvcGFjaXR5IiwwKSxPYmplY3QodS5zZWxlY3QpKHRoaXMpLmNsYXNzZWQoImhvdmVyIiwhMSl9KSl9O3ZyLnB1c2goa3IpO3ZhciB3cj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGRyLmxlbmd0aDtlKyspaWYoZHJbZV0uaWQ9PT10KXJldHVybiBlO3JldHVybi0xfSxUcj0tMSxFcj1bXSxDcj1mdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qubm9kZXMuaW5kZXhPZihlKT49MCYmKG49ITApfSkpLG59LFNyPWZ1bmN0aW9uKHQsZSl7dmFyIG49W107cmV0dXJuIHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24ocixpKXtDcihlLHIpfHxuLnB1c2godC5ub2Rlc1tpXSl9KSkse25vZGVzOm59fSxBcj17cGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4pe3ljLnBhcnNlRGlyZWN0aXZlKHRoaXMsdCxlLG4pfSxkZWZhdWx0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIGFlLmZsb3djaGFydH0sYWRkVmVydGV4OmZ1bmN0aW9uKHQsZSxuLHIsaSxhKXt2YXIgbyxzPXQ7dm9pZCAwIT09cyYmMCE9PXMudHJpbSgpLmxlbmd0aCYmKHZvaWQgMD09PWxyW3NdJiYobHJbc109e2lkOnMsZG9tSWQ6ImZsb3djaGFydC0iK3MrIi0iK2NyLHN0eWxlczpbXSxjbGFzc2VzOltdfSksY3IrKyx2b2lkIDAhPT1lPyh1cj1oZSgpLCciJz09PShvPW50LnNhbml0aXplVGV4dChlLnRyaW0oKSx1cikpWzBdJiYnIic9PT1vW28ubGVuZ3RoLTFdJiYobz1vLnN1YnN0cmluZygxLG8ubGVuZ3RoLTEpKSxscltzXS50ZXh0PW8pOnZvaWQgMD09PWxyW3NdLnRleHQmJihscltzXS50ZXh0PXQpLHZvaWQgMCE9PW4mJihscltzXS50eXBlPW4pLG51bGwhPXImJnIuZm9yRWFjaCgoZnVuY3Rpb24odCl7bHJbc10uc3R5bGVzLnB1c2godCl9KSksbnVsbCE9aSYmaS5mb3JFYWNoKChmdW5jdGlvbih0KXtscltzXS5jbGFzc2VzLnB1c2godCl9KSksdm9pZCAwIT09YSYmKGxyW3NdLmRpcj1hKSl9LGxvb2tVcERvbUlkOmJyLGFkZExpbms6ZnVuY3Rpb24odCxlLG4scil7dmFyIGksYTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihhPTA7YTxlLmxlbmd0aDthKyspeHIodFtpXSxlW2FdLG4scil9LHVwZGF0ZUxpbmtJbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ImRlZmF1bHQiPT09dD9oci5kZWZhdWx0SW50ZXJwb2xhdGU9ZTpoclt0XS5pbnRlcnBvbGF0ZT1lfSkpfSx1cGRhdGVMaW5rOmZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXsiZGVmYXVsdCI9PT10P2hyLmRlZmF1bHRTdHlsZT1lOigtMT09PW5lLmlzU3Vic3RyaW5nSW5BcnJheSgiZmlsbCIsZSkmJmUucHVzaCgiZmlsbDpub25lIiksaHJbdF0uc3R5bGU9ZSl9KSl9LGFkZENsYXNzOmZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZnJbdF0mJihmclt0XT17aWQ6dCxzdHlsZXM6W10sdGV4dFN0eWxlczpbXX0pLG51bGwhPWUmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5tYXRjaCgiY29sb3IiKSl7dmFyIG49ZS5yZXBsYWNlKCJmaWxsIiwiYmdGaWxsIikucmVwbGFjZSgiY29sb3IiLCJmaWxsIik7ZnJbdF0udGV4dFN0eWxlcy5wdXNoKG4pfWZyW3RdLnN0eWxlcy5wdXNoKGUpfSkpfSxzZXREaXJlY3Rpb246ZnVuY3Rpb24odCl7KG9yPXQpLm1hdGNoKC8uKjwvKSYmKG9yPSJSTCIpLG9yLm1hdGNoKC8uKlxeLykmJihvcj0iQlQiKSxvci5tYXRjaCgvLio+LykmJihvcj0iTFIiKSxvci5tYXRjaCgvLip2LykmJihvcj0iVEIiKX0sc2V0Q2xhc3M6X3Isc2V0VG9vbHRpcDpmdW5jdGlvbih0LGUpe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2b2lkIDAhPT1lJiYoeXJbImdlbi0xIj09PXNyP2JyKHQpOnRdPW50LnNhbml0aXplVGV4dChlLHVyKSl9KSl9LGdldFRvb2x0aXA6ZnVuY3Rpb24odCl7cmV0dXJuIHlyW3RdfSxzZXRDbGlja0V2ZW50OmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1icih0KTtpZigibG9vc2UiPT09aGUoKS5zZWN1cml0eUxldmVsJiZ2b2lkIDAhPT1lKXt2YXIgaT1bXTtpZigic3RyaW5nIj09dHlwZW9mIG4pe2k9bi5zcGxpdCgvLCg/PSg/Oig/OlteIl0qIil7Mn0pKlteIl0qJCkvKTtmb3IodmFyIGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS50cmltKCk7JyInPT09by5jaGFyQXQoMCkmJiciJz09PW8uY2hhckF0KG8ubGVuZ3RoLTEpJiYobz1vLnN1YnN0cigxLG8ubGVuZ3RoLTIpKSxpW2FdPW99fTA9PT1pLmxlbmd0aCYmaS5wdXNoKHQpLHZvaWQgMCE9PWxyW3RdJiYobHJbdF0uaGF2ZUNhbGxiYWNrPSEwLHZyLnB1c2goKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2lkPSInLmNvbmNhdChyLCciXScpKTtudWxsIT09dCYmdC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7bmUucnVuRnVuYy5hcHBseShuZSxbZV0uY29uY2F0KGlyKGkpKSl9KSwhMSl9KSkpfX0odCxlLG4pfSkpLF9yKHQsImNsaWNrYWJsZSIpfSxzZXRMaW5rOmZ1bmN0aW9uKHQsZSxuKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09bHJbdF0mJihsclt0XS5saW5rPW5lLmZvcm1hdFVybChlLHVyKSxsclt0XS5saW5rVGFyZ2V0PW4pfSkpLF9yKHQsImNsaWNrYWJsZSIpfSxiaW5kRnVuY3Rpb25zOmZ1bmN0aW9uKHQpe3ZyLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UodCl9KSl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBvci50cmltKCl9LGdldFZlcnRpY2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGxyfSxnZXRFZGdlczpmdW5jdGlvbigpe3JldHVybiBocn0sZ2V0Q2xhc3NlczpmdW5jdGlvbigpe3JldHVybiBmcn0sY2xlYXI6ZnVuY3Rpb24odCl7bHI9e30sZnI9e30saHI9W10sKHZyPVtdKS5wdXNoKGtyKSxkcj1bXSxwcj17fSxncj0wLHlyPVtdLG1yPSEwLHNyPXR8fCJnZW4tMSJ9LHNldEdlbjpmdW5jdGlvbih0KXtzcj10fHwiZ2VuLTEifSxkZWZhdWx0U3R5bGU6ZnVuY3Rpb24oKXtyZXR1cm4iZmlsbDojZmZhO3N0cm9rZTogI2Y2Njsgc3Ryb2tlLXdpZHRoOiAzcHg7IHN0cm9rZS1kYXNoYXJyYXk6IDUsIDU7ZmlsbDojZmZhO3N0cm9rZTogIzY2NjsifSxhZGRTdWJHcmFwaDpmdW5jdGlvbih0LGUsbil7dmFyIHI9dC50cmltKCksaT1uO3Q9PT1uJiZuLm1hdGNoKC9ccy8pJiYocj12b2lkIDApO3ZhciBhPVtdLHM9ZnVuY3Rpb24odCl7dmFyIGUsbj17Ym9vbGVhbjp7fSxudW1iZXI6e30sc3RyaW5nOnt9fSxyPVtdO3JldHVybntub2RlTGlzdDp0LmZpbHRlcigoZnVuY3Rpb24odCl7dmFyIGk9cnIodCk7cmV0dXJuIHQuc3RtdCYmImRpciI9PT10LnN0bXQ/KGU9dC52YWx1ZSwhMSk6IiIhPT10LnRyaW0oKSYmKGkgaW4gbj8hbltpXS5oYXNPd25Qcm9wZXJ0eSh0KSYmKG5baV1bdF09ITApOiEoci5pbmRleE9mKHQpPj0wKSYmci5wdXNoKHQpKX0pKSxkaXI6ZX19KGEuY29uY2F0LmFwcGx5KGEsZSkpLGM9cy5ub2RlTGlzdCx1PXMuZGlyO2lmKGE9YywiZ2VuLTEiPT09c3Ipe28ud2FybigiTE9PS0lORyBVUCIpO2Zvcih2YXIgbD0wO2w8YS5sZW5ndGg7bCsrKWFbbF09YnIoYVtsXSl9cj1yfHwic3ViR3JhcGgiK2dyLGk9aXx8IiIsaT1udC5zYW5pdGl6ZVRleHQoaSx1ciksZ3IrPTE7dmFyIGg9e2lkOnIsbm9kZXM6YSx0aXRsZTppLnRyaW0oKSxjbGFzc2VzOltdLGRpcjp1fTtyZXR1cm4gby5pbmZvKCJBZGRpbmciLGguaWQsaC5ub2RlcyxoLmRpciksaC5ub2Rlcz1TcihoLGRyKS5ub2Rlcyxkci5wdXNoKGgpLHByW3JdPWgscn0sZ2V0RGVwdGhGaXJzdFBvczpmdW5jdGlvbih0KXtyZXR1cm4gRXJbdF19LGluZGV4Tm9kZXM6ZnVuY3Rpb24oKXtUcj0tMSxkci5sZW5ndGg+MCYmZnVuY3Rpb24gdChlLG4pe3ZhciByPWRyW25dLm5vZGVzO2lmKCEoKFRyKz0xKT4yZTMpKXtpZihFcltUcl09bixkcltuXS5pZD09PWUpcmV0dXJue3Jlc3VsdDohMCxjb3VudDowfTtmb3IodmFyIGk9MCxhPTE7aTxyLmxlbmd0aDspe3ZhciBvPXdyKHJbaV0pO2lmKG8+PTApe3ZhciBzPXQoZSxvKTtpZihzLnJlc3VsdClyZXR1cm57cmVzdWx0OiEwLGNvdW50OmErcy5jb3VudH07YSs9cy5jb3VudH1pKz0xfXJldHVybntyZXN1bHQ6ITEsY291bnQ6YX19fSgibm9uZSIsZHIubGVuZ3RoLTEpfSxnZXRTdWJHcmFwaHM6ZnVuY3Rpb24oKXtyZXR1cm4gZHJ9LGRlc3RydWN0TGluazpmdW5jdGlvbih0LGUpe3ZhciBuLHI9ZnVuY3Rpb24odCl7dmFyIGU9dC50cmltKCksbj1lLnNsaWNlKDAsLTEpLHI9ImFycm93X29wZW4iO3N3aXRjaChlLnNsaWNlKC0xKSl7Y2FzZSJ4IjpyPSJhcnJvd19jcm9zcyIsIngiPT09ZVswXSYmKHI9ImRvdWJsZV8iK3Isbj1uLnNsaWNlKDEpKTticmVhaztjYXNlIj4iOnI9ImFycm93X3BvaW50IiwiPCI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpO2JyZWFrO2Nhc2UibyI6cj0iYXJyb3dfY2lyY2xlIiwibyI9PT1lWzBdJiYocj0iZG91YmxlXyIrcixuPW4uc2xpY2UoMSkpfXZhciBpPSJub3JtYWwiLGE9bi5sZW5ndGgtMTsiPSI9PT1uWzBdJiYoaT0idGhpY2siKTt2YXIgbz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTAsaT0wO2k8bjsrK2kpZVtpXT09PXQmJisrcjtyZXR1cm4gcn0oIi4iLG4pO3JldHVybiBvJiYoaT0iZG90dGVkIixhPW8pLHt0eXBlOnIsc3Ryb2tlOmksbGVuZ3RoOmF9fSh0KTtpZihlKXtpZigobj1mdW5jdGlvbih0KXt2YXIgZT10LnRyaW0oKSxuPSJhcnJvd19vcGVuIjtzd2l0Y2goZVswXSl7Y2FzZSI8IjpuPSJhcnJvd19wb2ludCIsZT1lLnNsaWNlKDEpO2JyZWFrO2Nhc2UieCI6bj0iYXJyb3dfY3Jvc3MiLGU9ZS5zbGljZSgxKTticmVhaztjYXNlIm8iOm49ImFycm93X2NpcmNsZSIsZT1lLnNsaWNlKDEpfXZhciByPSJub3JtYWwiO3JldHVybi0xIT09ZS5pbmRleE9mKCI9IikmJihyPSJ0aGljayIpLC0xIT09ZS5pbmRleE9mKCIuIikmJihyPSJkb3R0ZWQiKSx7dHlwZTpuLHN0cm9rZTpyfX0oZSkpLnN0cm9rZSE9PXIuc3Ryb2tlKXJldHVybnt0eXBlOiJJTlZBTElEIixzdHJva2U6IklOVkFMSUQifTtpZigiYXJyb3dfb3BlbiI9PT1uLnR5cGUpbi50eXBlPXIudHlwZTtlbHNle2lmKG4udHlwZSE9PXIudHlwZSlyZXR1cm57dHlwZToiSU5WQUxJRCIsc3Ryb2tlOiJJTlZBTElEIn07bi50eXBlPSJkb3VibGVfIituLnR5cGV9cmV0dXJuImRvdWJsZV9hcnJvdyI9PT1uLnR5cGUmJihuLnR5cGU9ImRvdWJsZV9hcnJvd19wb2ludCIpLG4ubGVuZ3RoPXIubGVuZ3RoLG59cmV0dXJuIHJ9LGxleDp7Zmlyc3RHcmFwaDpmdW5jdGlvbigpe3JldHVybiEhbXImJihtcj0hMSwhMCl9fSxleGlzdHM6Q3IsbWFrZVVuaXE6U3J9LE1yPW4oMjcpLE9yPW4ubihNciksTnI9big4KSxCcj1uLm4oTnIpLERyPW4oNTEpLExyPW4ubihEcik7ZnVuY3Rpb24gSXIodCxlLG4pe3ZhciByPS45KihlLndpZHRoK2UuaGVpZ2h0KSxpPVt7eDpyLzIseTowfSx7eDpyLHk6LXIvMn0se3g6ci8yLHk6LXJ9LHt4OjAseTotci8yfV0sYT1Icih0LHIscixpKTtyZXR1cm4gbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIEJyLmEuaW50ZXJzZWN0LnBvbHlnb24obixpLHQpfSxhfWZ1bmN0aW9uIFJyKHQsZSxuKXt2YXIgcj1lLmhlaWdodCxpPXIvNCxhPWUud2lkdGgrMippLG89W3t4OmkseTowfSx7eDphLWkseTowfSx7eDphLHk6LXIvMn0se3g6YS1pLHk6LXJ9LHt4OmkseTotcn0se3g6MCx5Oi1yLzJ9XSxzPUhyKHQsYSxyLG8pO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gQnIuYS5pbnRlcnNlY3QucG9seWdvbihuLG8sdCl9LHN9ZnVuY3Rpb24gRnIodCxlLG4pe3ZhciByPWUud2lkdGgsaT1lLmhlaWdodCxhPVt7eDotaS8yLHk6MH0se3g6cix5OjB9LHt4OnIseTotaX0se3g6LWkvMix5Oi1pfSx7eDowLHk6LWkvMn1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBQcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBqcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjIqaS82LHk6MH0se3g6citpLzYseTowfSx7eDpyLTIqaS82LHk6LWl9LHt4Oi1pLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBZcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4Oi0yKmkvNix5OjB9LHt4OnIrMippLzYseTowfSx7eDpyLWkvNix5Oi1pfSx7eDppLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiB6cih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OmkvNix5OjB9LHt4OnItaS82LHk6MH0se3g6cisyKmkvNix5Oi1pfSx7eDotMippLzYseTotaX1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBVcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPWUuaGVpZ2h0LGE9W3t4OjAseTowfSx7eDpyK2kvMix5OjB9LHt4OnIseTotaS8yfSx7eDpyK2kvMix5Oi1pfSx7eDowLHk6LWl9XSxvPUhyKHQscixpLGEpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gQnIuYS5pbnRlcnNlY3QucG9seWdvbihuLGEsdCl9LG99ZnVuY3Rpb24gJHIodCxlLG4pe3ZhciByPWUuaGVpZ2h0LGk9ZS53aWR0aCtyLzQsYT10Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInJ4IixyLzIpLmF0dHIoInJ5IixyLzIpLmF0dHIoIngiLC1pLzIpLmF0dHIoInkiLC1yLzIpLmF0dHIoIndpZHRoIixpKS5hdHRyKCJoZWlnaHQiLHIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gQnIuYS5pbnRlcnNlY3QucmVjdChuLHQpfSxhfWZ1bmN0aW9uIHFyKHQsZSxuKXt2YXIgcj1lLndpZHRoLGk9ZS5oZWlnaHQsYT1be3g6MCx5OjB9LHt4OnIseTowfSx7eDpyLHk6LWl9LHt4OjAseTotaX0se3g6MCx5OjB9LHt4Oi04LHk6MH0se3g6cis4LHk6MH0se3g6cis4LHk6LWl9LHt4Oi04LHk6LWl9LHt4Oi04LHk6MH1dLG89SHIodCxyLGksYSk7cmV0dXJuIG4uaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiBCci5hLmludGVyc2VjdC5wb2x5Z29uKG4sYSx0KX0sb31mdW5jdGlvbiBXcih0LGUsbil7dmFyIHI9ZS53aWR0aCxpPXIvMixhPWkvKDIuNStyLzUwKSxvPWUuaGVpZ2h0K2Escz0iTSAwLCIrYSsiIGEgIitpKyIsIithKyIgMCwwLDAgIityKyIgMCBhICIraSsiLCIrYSsiIDAsMCwwICIrLXIrIiAwIGwgMCwiK28rIiBhICIraSsiLCIrYSsiIDAsMCwwICIrcisiIDAgbCAwLCIrLW8sYz10LmF0dHIoImxhYmVsLW9mZnNldC15IixhKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJkIixzKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIistci8yKyIsIistKG8vMithKSsiKSIpO3JldHVybiBuLmludGVyc2VjdD1mdW5jdGlvbih0KXt2YXIgZT1Cci5hLmludGVyc2VjdC5yZWN0KG4sdCkscj1lLngtbi54O2lmKDAhPWkmJihNYXRoLmFicyhyKTxuLndpZHRoLzJ8fE1hdGguYWJzKHIpPT1uLndpZHRoLzImJk1hdGguYWJzKGUueS1uLnkpPm4uaGVpZ2h0LzItYSkpe3ZhciBvPWEqYSooMS1yKnIvKGkqaSkpOzAhPW8mJihvPU1hdGguc3FydChvKSksbz1hLW8sdC55LW4ueT4wJiYobz0tbyksZS55Kz1vfXJldHVybiBlfSxjfWZ1bmN0aW9uIEhyKHQsZSxuLHIpe3JldHVybiB0Lmluc2VydCgicG9seWdvbiIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoInBvaW50cyIsci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngrIiwiK3QueX0pKS5qb2luKCIgIikpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1lLzIrIiwiK24vMisiKSIpfXZhciBWcj17YWRkVG9SZW5kZXI6ZnVuY3Rpb24odCl7dC5zaGFwZXMoKS5xdWVzdGlvbj1Jcix0LnNoYXBlcygpLmhleGFnb249UnIsdC5zaGFwZXMoKS5zdGFkaXVtPSRyLHQuc2hhcGVzKCkuc3Vicm91dGluZT1xcix0LnNoYXBlcygpLmN5bGluZGVyPVdyLHQuc2hhcGVzKCkucmVjdF9sZWZ0X2ludl9hcnJvdz1Gcix0LnNoYXBlcygpLmxlYW5fcmlnaHQ9UHIsdC5zaGFwZXMoKS5sZWFuX2xlZnQ9anIsdC5zaGFwZXMoKS50cmFwZXpvaWQ9WXIsdC5zaGFwZXMoKS5pbnZfdHJhcGV6b2lkPXpyLHQuc2hhcGVzKCkucmVjdF9yaWdodF9pbnZfYXJyb3c9VXJ9LGFkZFRvUmVuZGVyVjI6ZnVuY3Rpb24odCl7dCh7cXVlc3Rpb246SXJ9KSx0KHtoZXhhZ29uOlJyfSksdCh7c3RhZGl1bTokcn0pLHQoe3N1YnJvdXRpbmU6cXJ9KSx0KHtjeWxpbmRlcjpXcn0pLHQoe3JlY3RfbGVmdF9pbnZfYXJyb3c6RnJ9KSx0KHtsZWFuX3JpZ2h0OlByfSksdCh7bGVhbl9sZWZ0OmpyfSksdCh7dHJhcGV6b2lkOllyfSksdCh7aW52X3RyYXBlem9pZDp6cn0pLHQoe3JlY3RfcmlnaHRfaW52X2Fycm93OlVyfSl9fSxHcj17fSxYcj1mdW5jdGlvbih0LGUsbil7dmFyIHI9T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChuLCciXScpKTtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihuKXt2YXIgaT10W25dLGE9ImRlZmF1bHQiO2kuY2xhc3Nlcy5sZW5ndGg+MCYmKGE9aS5jbGFzc2VzLmpvaW4oIiAiKSk7dmFyIHMsYz1VdChpLnN0eWxlcyksdT12b2lkIDAhPT1pLnRleHQ/aS50ZXh0OmkuaWQ7aWYoZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscykpe3ZhciBsPXtsYWJlbDp1LnJlcGxhY2UoL2ZhW2xyc2JdPzpmYS1bXHctXSsvZywoZnVuY3Rpb24odCl7cmV0dXJuIjxpIGNsYXNzPSciLmNvbmNhdCh0LnJlcGxhY2UoIjoiLCIgIiksIic+PC9pPiIpfSkpfTsocz1McigpKHIsbCkubm9kZSgpKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHMpfWVsc2V7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInRleHQiKTtoLnNldEF0dHJpYnV0ZSgic3R5bGUiLGMubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKTtmb3IodmFyIGY9dS5zcGxpdChudC5saW5lQnJlYWtSZWdleCksZD0wO2Q8Zi5sZW5ndGg7ZCsrKXt2YXIgcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTtwLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLHAuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLHAuc2V0QXR0cmlidXRlKCJ4IiwiMSIpLHAudGV4dENvbnRlbnQ9ZltkXSxoLmFwcGVuZENoaWxkKHApfXM9aH12YXIgeT0wLGc9IiI7c3dpdGNoKGkudHlwZSl7Y2FzZSJyb3VuZCI6eT01LGc9InJlY3QiO2JyZWFrO2Nhc2Uic3F1YXJlIjpnPSJyZWN0IjticmVhaztjYXNlImRpYW1vbmQiOmc9InF1ZXN0aW9uIjticmVhaztjYXNlImhleGFnb24iOmc9ImhleGFnb24iO2JyZWFrO2Nhc2Uib2RkIjpnPSJyZWN0X2xlZnRfaW52X2Fycm93IjticmVhaztjYXNlImxlYW5fcmlnaHQiOmc9ImxlYW5fcmlnaHQiO2JyZWFrO2Nhc2UibGVhbl9sZWZ0IjpnPSJsZWFuX2xlZnQiO2JyZWFrO2Nhc2UidHJhcGV6b2lkIjpnPSJ0cmFwZXpvaWQiO2JyZWFrO2Nhc2UiaW52X3RyYXBlem9pZCI6Zz0iaW52X3RyYXBlem9pZCI7YnJlYWs7Y2FzZSJvZGRfcmlnaHQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UiY2lyY2xlIjpnPSJjaXJjbGUiO2JyZWFrO2Nhc2UiZWxsaXBzZSI6Zz0iZWxsaXBzZSI7YnJlYWs7Y2FzZSJzdGFkaXVtIjpnPSJzdGFkaXVtIjticmVhaztjYXNlInN1YnJvdXRpbmUiOmc9InN1YnJvdXRpbmUiO2JyZWFrO2Nhc2UiY3lsaW5kZXIiOmc9ImN5bGluZGVyIjticmVhaztjYXNlImdyb3VwIjpnPSJyZWN0IjticmVhaztkZWZhdWx0Omc9InJlY3QifW8ud2FybigiQWRkaW5nIG5vZGUiLGkuaWQsaS5kb21JZCksZS5zZXROb2RlKEFyLmxvb2tVcERvbUlkKGkuaWQpLHtsYWJlbFR5cGU6InN2ZyIsbGFiZWxTdHlsZTpjLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbDpzLHJ4Onkscnk6eSxjbGFzczphLHN0eWxlOmMuc3R5bGUsaWQ6QXIubG9va1VwRG9tSWQoaS5pZCl9KX0pKX0sWnI9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGk9MDtpZih2b2lkIDAhPT10LmRlZmF1bHRTdHlsZSl7dmFyIGE9VXQodC5kZWZhdWx0U3R5bGUpO249YS5zdHlsZSxyPWEubGFiZWxTdHlsZX10LmZvckVhY2goKGZ1bmN0aW9uKGEpe2krKzt2YXIgbz0iTC0iK2Euc3RhcnQrIi0iK2EuZW5kLHM9IkxTLSIrYS5zdGFydCxjPSJMRS0iK2EuZW5kLGw9e307ImFycm93X29wZW4iPT09YS50eXBlP2wuYXJyb3doZWFkPSJub25lIjpsLmFycm93aGVhZD0ibm9ybWFsIjt2YXIgaD0iIixmPSIiO2lmKHZvaWQgMCE9PWEuc3R5bGUpe3ZhciBkPVV0KGEuc3R5bGUpO2g9ZC5zdHlsZSxmPWQubGFiZWxTdHlsZX1lbHNlIHN3aXRjaChhLnN0cm9rZSl7Y2FzZSJub3JtYWwiOmg9ImZpbGw6bm9uZSIsdm9pZCAwIT09biYmKGg9biksdm9pZCAwIT09ciYmKGY9cik7YnJlYWs7Y2FzZSJkb3R0ZWQiOmg9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmg9IiBzdHJva2Utd2lkdGg6IDMuNXB4O2ZpbGw6bm9uZSJ9bC5zdHlsZT1oLGwubGFiZWxTdHlsZT1mLHZvaWQgMCE9PWEuaW50ZXJwb2xhdGU/bC5jdXJ2ZT1ZdChhLmludGVycG9sYXRlLHUuY3VydmVMaW5lYXIpOnZvaWQgMCE9PXQuZGVmYXVsdEludGVycG9sYXRlP2wuY3VydmU9WXQodC5kZWZhdWx0SW50ZXJwb2xhdGUsdS5jdXJ2ZUxpbmVhcik6bC5jdXJ2ZT1ZdChHci5jdXJ2ZSx1LmN1cnZlTGluZWFyKSx2b2lkIDA9PT1hLnRleHQ/dm9pZCAwIT09YS5zdHlsZSYmKGwuYXJyb3doZWFkU3R5bGU9ImZpbGw6ICMzMzMiKToobC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIsbC5sYWJlbHBvcz0iYyIsZXQoaGUoKS5mbG93Y2hhcnQuaHRtbExhYmVscyk/KGwubGFiZWxUeXBlPSJodG1sIixsLmxhYmVsPSc8c3BhbiBpZD0iTC0nLmNvbmNhdChvLCciIGNsYXNzPSJlZGdlTGFiZWwgTC0nKS5jb25jYXQocywiJyBMLSIpLmNvbmNhdChjLCciPicpLmNvbmNhdChhLnRleHQucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSksIjwvc3Bhbj4iKSk6KGwubGFiZWxUeXBlPSJ0ZXh0IixsLmxhYmVsPWEudGV4dC5yZXBsYWNlKG50LmxpbmVCcmVha1JlZ2V4LCJcbiIpLHZvaWQgMD09PWEuc3R5bGUmJihsLnN0eWxlPWwuc3R5bGV8fCJzdHJva2U6ICMzMzM7IHN0cm9rZS13aWR0aDogMS41cHg7ZmlsbDpub25lIiksbC5sYWJlbFN0eWxlPWwubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpKSksbC5pZD1vLGwuY2xhc3M9cysiICIrYyxsLm1pbmxlbj1hLmxlbmd0aHx8MSxlLnNldEVkZ2UoQXIubG9va1VwRG9tSWQoYS5zdGFydCksQXIubG9va1VwRG9tSWQoYS5lbmQpLGwsaSl9KSl9LEtyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1PYmplY3Qua2V5cyh0KSxuPTA7bjxlLmxlbmd0aDtuKyspR3JbZVtuXV09dFtlW25dXX0sUXI9ZnVuY3Rpb24odCl7by5pbmZvKCJFeHRyYWN0aW5nIGNsYXNzZXMiKSxBci5jbGVhcigpO3RyeXt2YXIgZT1Pci5hLnBhcnNlcjtyZXR1cm4gZS55eT1BcixlLnBhcnNlKHQpLEFyLmdldENsYXNzZXMoKX1jYXRjaCh0KXtyZXR1cm59fSxKcj1mdW5jdGlvbih0LGUpe28uaW5mbygiRHJhd2luZyBmbG93Y2hhcnQiKSxBci5jbGVhcigpLEFyLnNldEdlbigiZ2VuLTEiKTt2YXIgbj1Pci5hLnBhcnNlcjtuLnl5PUFyLG4ucGFyc2UodCk7dmFyIHI9QXIuZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09ciYmKHI9IlREIik7Zm9yKHZhciBpLGE9aGUoKS5mbG93Y2hhcnQscz1hLm5vZGVTcGFjaW5nfHw1MCxjPWEucmFua1NwYWNpbmd8fDUwLGw9bmV3IExlLmEuR3JhcGgoe211bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cmFua2RpcjpyLG5vZGVzZXA6cyxyYW5rc2VwOmMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksaD1Bci5nZXRTdWJHcmFwaHMoKSxmPWgubGVuZ3RoLTE7Zj49MDtmLS0paT1oW2ZdLEFyLmFkZFZlcnRleChpLmlkLGkudGl0bGUsImdyb3VwIix2b2lkIDAsaS5jbGFzc2VzKTt2YXIgZD1Bci5nZXRWZXJ0aWNlcygpO28ud2FybigiR2V0IHZlcnRpY2VzIixkKTt2YXIgcD1Bci5nZXRFZGdlcygpLHk9MDtmb3IoeT1oLmxlbmd0aC0xO3k+PTA7eS0tKXtpPWhbeV0sT2JqZWN0KHUuc2VsZWN0QWxsKSgiY2x1c3RlciIpLmFwcGVuZCgidGV4dCIpO2Zvcih2YXIgZz0wO2c8aS5ub2Rlcy5sZW5ndGg7ZysrKW8ud2FybigiU2V0dGluZyBzdWJncmFwaCIsaS5ub2Rlc1tnXSxBci5sb29rVXBEb21JZChpLm5vZGVzW2ddKSxBci5sb29rVXBEb21JZChpLmlkKSksbC5zZXRQYXJlbnQoQXIubG9va1VwRG9tSWQoaS5ub2Rlc1tnXSksQXIubG9va1VwRG9tSWQoaS5pZCkpfVhyKGQsbCxlKSxacihwLGwpO3ZhciBtPW5ldygwLEJyLmEucmVuZGVyKTtWci5hZGRUb1JlbmRlcihtKSxtLmFycm93cygpLm5vbmU9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIixlKS5hdHRyKCJ2aWV3Qm94IiwiMCAwIDEwIDEwIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJzdHJva2VXaWR0aCIpLmF0dHIoIm1hcmtlcldpZHRoIiw4KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDYpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAwIDAgTCAwIDAgeiIpO0JyLmEudXRpbC5hcHBseVN0eWxlKGksbltyKyJTdHlsZSJdKX0sbS5hcnJvd3MoKS5ub3JtYWw9ZnVuY3Rpb24odCxlKXt0LmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLGUpLmF0dHIoInZpZXdCb3giLCIwIDAgMTAgMTAiKS5hdHRyKCJyZWZYIiw5KS5hdHRyKCJyZWZZIiw1KS5hdHRyKCJtYXJrZXJVbml0cyIsInN0cm9rZVdpZHRoIikuYXR0cigibWFya2VyV2lkdGgiLDgpLmF0dHIoIm1hcmtlckhlaWdodCIsNikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKS5hdHRyKCJjbGFzcyIsImFycm93aGVhZFBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwxKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjEsMCIpfTt2YXIgdj1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpO3YuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksby53YXJuKGwpO3ZhciBiPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrIiBnIik7bShiLGwpLGIuc2VsZWN0QWxsKCJnLm5vZGUiKS5hdHRyKCJ0aXRsZSIsKGZ1bmN0aW9uKCl7cmV0dXJuIEFyLmdldFRvb2x0aXAodGhpcy5pZCl9KSk7dmFyIHg9YS5kaWFncmFtUGFkZGluZyxfPXYubm9kZSgpLmdldEJCb3goKSxrPV8ud2lkdGgrMip4LHc9Xy5oZWlnaHQrMip4O3RlKHYsdyxrLGEudXNlTWF4V2lkdGgpO3ZhciBUPSIiLmNvbmNhdChfLngteCwiICIpLmNvbmNhdChfLnkteCwiICIpLmNvbmNhdChrLCIgIikuY29uY2F0KHcpO2ZvcihvLmRlYnVnKCJ2aWV3Qm94ICIuY29uY2F0KFQpKSx2LmF0dHIoInZpZXdCb3giLFQpLEFyLmluZGV4Tm9kZXMoInN1YkdyYXBoIit5KSx5PTA7eTxoLmxlbmd0aDt5KyspaWYoInVuZGVmaW5lZCIhPT0oaT1oW3ldKS50aXRsZSl7dmFyIEU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytBci5sb29rVXBEb21JZChpLmlkKSsnIl0gcmVjdCcpLEM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrZSsnIFtpZD0iJytBci5sb29rVXBEb21JZChpLmlkKSsnIl0nKSxTPUVbMF0ueC5iYXNlVmFsLnZhbHVlLEE9RVswXS55LmJhc2VWYWwudmFsdWUsTT1FWzBdLndpZHRoLmJhc2VWYWwudmFsdWUsTz1PYmplY3QodS5zZWxlY3QpKENbMF0pLnNlbGVjdCgiLmxhYmVsIik7Ty5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIi5jb25jYXQoUytNLzIsIiwgIikuY29uY2F0KEErMTQsIikiKSksTy5hdHRyKCJpZCIsZSsiVGV4dCIpO2Zvcih2YXIgTj0wO048aS5jbGFzc2VzLmxlbmd0aDtOKyspQ1swXS5jbGFzc0xpc3QuYWRkKGkuY2xhc3Nlc1tOXSl9ZXQoYS5odG1sTGFiZWxzKTtmb3IodmFyIEI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkPSInK2UrJyJdIC5lZGdlTGFiZWwgLmxhYmVsJyksRD0wO0Q8Qi5sZW5ndGg7RCsrKXt2YXIgTD1CW0RdLEk9TC5nZXRCQm94KCksUj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVjdCIpO1Iuc2V0QXR0cmlidXRlKCJyeCIsMCksUi5zZXRBdHRyaWJ1dGUoInJ5IiwwKSxSLnNldEF0dHJpYnV0ZSgid2lkdGgiLEkud2lkdGgpLFIuc2V0QXR0cmlidXRlKCJoZWlnaHQiLEkuaGVpZ2h0KSxMLmluc2VydEJlZm9yZShSLEwuZmlyc3RDaGlsZCl9T2JqZWN0LmtleXMoZCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49ZFt0XTtpZihuLmxpbmspe3ZhciByPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrJyBbaWQ9IicrQXIubG9va1VwRG9tSWQodCkrJyJdJyk7aWYocil7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImEiKTtpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNsYXNzIixuLmNsYXNzZXMuam9pbigiICIpKSxpLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImhyZWYiLG4ubGluayksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWwiLCJub29wZW5lciIpLG4ubGlua1RhcmdldCYmaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0YXJnZXQiLG4ubGlua1RhcmdldCk7dmFyIGE9ci5pbnNlcnQoKGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSwiOmZpcnN0LWNoaWxkIiksbz1yLnNlbGVjdCgiLmxhYmVsLWNvbnRhaW5lciIpO28mJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBvLm5vZGUoKX0pKTt2YXIgcz1yLnNlbGVjdCgiLmxhYmVsIik7cyYmYS5hcHBlbmQoKGZ1bmN0aW9uKCl7cmV0dXJuIHMubm9kZSgpfSkpfX19KSl9LHRpPXt9LGVpPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KG4sJyJdJykpO09iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPXRbbl0sYT0iZGVmYXVsdCI7aS5jbGFzc2VzLmxlbmd0aD4wJiYoYT1pLmNsYXNzZXMuam9pbigiICIpKTt2YXIgcyxjPVV0KGkuc3R5bGVzKSx1PXZvaWQgMCE9PWkudGV4dD9pLnRleHQ6aS5pZDtpZihldChoZSgpLmZsb3djaGFydC5odG1sTGFiZWxzKSl7dmFyIGw9e2xhYmVsOnUucmVwbGFjZSgvZmFbbHJzYl0/OmZhLVtcdy1dKy9nLChmdW5jdGlvbih0KXtyZXR1cm4iPGkgY2xhc3M9JyIuY29uY2F0KHQucmVwbGFjZSgiOiIsIiAiKSwiJz48L2k+Iil9KSl9OyhzPUxyKCkocixsKS5ub2RlKCkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyl9ZWxzZXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGV4dCIpO2guc2V0QXR0cmlidXRlKCJzdHlsZSIsYy5sYWJlbFN0eWxlLnJlcGxhY2UoImNvbG9yOiIsImZpbGw6IikpO2Zvcih2YXIgZj11LnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0c3BhbiIpO3Auc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsInhtbDpzcGFjZSIsInByZXNlcnZlIikscC5zZXRBdHRyaWJ1dGUoImR5IiwiMWVtIikscC5zZXRBdHRyaWJ1dGUoIngiLCIxIikscC50ZXh0Q29udGVudD1mW2RdLGguYXBwZW5kQ2hpbGQocCl9cz1ofXZhciB5PTAsZz0iIjtzd2l0Y2goaS50eXBlKXtjYXNlInJvdW5kIjp5PTUsZz0icmVjdCI7YnJlYWs7Y2FzZSJzcXVhcmUiOmc9InJlY3QiO2JyZWFrO2Nhc2UiZGlhbW9uZCI6Zz0icXVlc3Rpb24iO2JyZWFrO2Nhc2UiaGV4YWdvbiI6Zz0iaGV4YWdvbiI7YnJlYWs7Y2FzZSJvZGQiOmc9InJlY3RfbGVmdF9pbnZfYXJyb3ciO2JyZWFrO2Nhc2UibGVhbl9yaWdodCI6Zz0ibGVhbl9yaWdodCI7YnJlYWs7Y2FzZSJsZWFuX2xlZnQiOmc9ImxlYW5fbGVmdCI7YnJlYWs7Y2FzZSJ0cmFwZXpvaWQiOmc9InRyYXBlem9pZCI7YnJlYWs7Y2FzZSJpbnZfdHJhcGV6b2lkIjpnPSJpbnZfdHJhcGV6b2lkIjticmVhaztjYXNlIm9kZF9yaWdodCI6Zz0icmVjdF9sZWZ0X2ludl9hcnJvdyI7YnJlYWs7Y2FzZSJjaXJjbGUiOmc9ImNpcmNsZSI7YnJlYWs7Y2FzZSJlbGxpcHNlIjpnPSJlbGxpcHNlIjticmVhaztjYXNlInN0YWRpdW0iOmc9InN0YWRpdW0iO2JyZWFrO2Nhc2Uic3Vicm91dGluZSI6Zz0ic3Vicm91dGluZSI7YnJlYWs7Y2FzZSJjeWxpbmRlciI6Zz0iY3lsaW5kZXIiO2JyZWFrO2Nhc2UiZ3JvdXAiOmc9InJlY3QiO2JyZWFrO2RlZmF1bHQ6Zz0icmVjdCJ9ZS5zZXROb2RlKGkuaWQse2xhYmVsU3R5bGU6Yy5sYWJlbFN0eWxlLHNoYXBlOmcsbGFiZWxUZXh0OnUscng6eSxyeTp5LGNsYXNzOmEsc3R5bGU6Yy5zdHlsZSxpZDppLmlkLGxpbms6aS5saW5rLGxpbmtUYXJnZXQ6aS5saW5rVGFyZ2V0LHRvb2x0aXA6QXIuZ2V0VG9vbHRpcChpLmlkKXx8IiIsZG9tSWQ6QXIubG9va1VwRG9tSWQoaS5pZCksaGF2ZUNhbGxiYWNrOmkuaGF2ZUNhbGxiYWNrLHdpZHRoOiJncm91cCI9PT1pLnR5cGU/NTAwOnZvaWQgMCxkaXI6aS5kaXIsdHlwZTppLnR5cGUscGFkZGluZzpoZSgpLmZsb3djaGFydC5wYWRkaW5nfSksby5pbmZvKCJzZXROb2RlIix7bGFiZWxTdHlsZTpjLmxhYmVsU3R5bGUsc2hhcGU6ZyxsYWJlbFRleHQ6dSxyeDp5LHJ5OnksY2xhc3M6YSxzdHlsZTpjLnN0eWxlLGlkOmkuaWQsZG9tSWQ6QXIubG9va1VwRG9tSWQoaS5pZCksd2lkdGg6Imdyb3VwIj09PWkudHlwZT81MDA6dm9pZCAwLHR5cGU6aS50eXBlLGRpcjppLmRpcixwYWRkaW5nOmhlKCkuZmxvd2NoYXJ0LnBhZGRpbmd9KX0pKX0sbmk9ZnVuY3Rpb24odCxlKXtvLmluZm8oImFiYzc4IGVkZ2VzID0gIix0KTt2YXIgbixyLGk9MCxhPXt9O2lmKHZvaWQgMCE9PXQuZGVmYXVsdFN0eWxlKXt2YXIgcz1VdCh0LmRlZmF1bHRTdHlsZSk7bj1zLnN0eWxlLHI9cy5sYWJlbFN0eWxlfXQuZm9yRWFjaCgoZnVuY3Rpb24ocyl7aSsrO3ZhciBjPSJMLSIrcy5zdGFydCsiLSIrcy5lbmQ7dm9pZCAwPT09YVtjXT8oYVtjXT0wLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTooYVtjXSsrLG8uaW5mbygiYWJjNzggbmV3IGVudHJ5IixjLGFbY10pKTt2YXIgbD1jKyItIithW2NdO28uaW5mbygiYWJjNzggbmV3IGxpbmsgaWQgdG8gYmUgdXNlZCBpcyIsYyxsLGFbY10pO3ZhciBoPSJMUy0iK3Muc3RhcnQsZj0iTEUtIitzLmVuZCxkPXtzdHlsZToiIixsYWJlbFN0eWxlOiIifTtzd2l0Y2goZC5taW5sZW49cy5sZW5ndGh8fDEsImFycm93X29wZW4iPT09cy50eXBlP2QuYXJyb3doZWFkPSJub25lIjpkLmFycm93aGVhZD0ibm9ybWFsIixkLmFycm93VHlwZVN0YXJ0PSJhcnJvd19vcGVuIixkLmFycm93VHlwZUVuZD0iYXJyb3dfb3BlbiIscy50eXBlKXtjYXNlImRvdWJsZV9hcnJvd19jcm9zcyI6ZC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY3Jvc3MiO2Nhc2UiYXJyb3dfY3Jvc3MiOmQuYXJyb3dUeXBlRW5kPSJhcnJvd19jcm9zcyI7YnJlYWs7Y2FzZSJkb3VibGVfYXJyb3dfcG9pbnQiOmQuYXJyb3dUeXBlU3RhcnQ9ImFycm93X3BvaW50IjtjYXNlImFycm93X3BvaW50IjpkLmFycm93VHlwZUVuZD0iYXJyb3dfcG9pbnQiO2JyZWFrO2Nhc2UiZG91YmxlX2Fycm93X2NpcmNsZSI6ZC5hcnJvd1R5cGVTdGFydD0iYXJyb3dfY2lyY2xlIjtjYXNlImFycm93X2NpcmNsZSI6ZC5hcnJvd1R5cGVFbmQ9ImFycm93X2NpcmNsZSJ9dmFyIHA9IiIseT0iIjtzd2l0Y2gocy5zdHJva2Upe2Nhc2Uibm9ybWFsIjpwPSJmaWxsOm5vbmU7Iix2b2lkIDAhPT1uJiYocD1uKSx2b2lkIDAhPT1yJiYoeT1yKSxkLnRoaWNrbmVzcz0ibm9ybWFsIixkLnBhdHRlcm49InNvbGlkIjticmVhaztjYXNlImRvdHRlZCI6ZC50aGlja25lc3M9Im5vcm1hbCIsZC5wYXR0ZXJuPSJkb3R0ZWQiLGQuc3R5bGU9ImZpbGw6bm9uZTtzdHJva2Utd2lkdGg6MnB4O3N0cm9rZS1kYXNoYXJyYXk6MzsiO2JyZWFrO2Nhc2UidGhpY2siOmQudGhpY2tuZXNzPSJ0aGljayIsZC5wYXR0ZXJuPSJzb2xpZCIsZC5zdHlsZT0ic3Ryb2tlLXdpZHRoOiAzLjVweDtmaWxsOm5vbmU7In1pZih2b2lkIDAhPT1zLnN0eWxlKXt2YXIgZz1VdChzLnN0eWxlKTtwPWcuc3R5bGUseT1nLmxhYmVsU3R5bGV9ZC5zdHlsZT1kLnN0eWxlKz1wLGQubGFiZWxTdHlsZT1kLmxhYmVsU3R5bGUrPXksdm9pZCAwIT09cy5pbnRlcnBvbGF0ZT9kLmN1cnZlPVl0KHMuaW50ZXJwb2xhdGUsdS5jdXJ2ZUxpbmVhcik6dm9pZCAwIT09dC5kZWZhdWx0SW50ZXJwb2xhdGU/ZC5jdXJ2ZT1ZdCh0LmRlZmF1bHRJbnRlcnBvbGF0ZSx1LmN1cnZlTGluZWFyKTpkLmN1cnZlPVl0KHRpLmN1cnZlLHUuY3VydmVMaW5lYXIpLHZvaWQgMD09PXMudGV4dD92b2lkIDAhPT1zLnN0eWxlJiYoZC5hcnJvd2hlYWRTdHlsZT0iZmlsbDogIzMzMyIpOihkLmFycm93aGVhZFN0eWxlPSJmaWxsOiAjMzMzIixkLmxhYmVscG9zPSJjIiksZC5sYWJlbFR5cGU9InRleHQiLGQubGFiZWw9cy50ZXh0LnJlcGxhY2UobnQubGluZUJyZWFrUmVnZXgsIlxuIiksdm9pZCAwPT09cy5zdHlsZSYmKGQuc3R5bGU9ZC5zdHlsZXx8InN0cm9rZTogIzMzMzsgc3Ryb2tlLXdpZHRoOiAxLjVweDtmaWxsOm5vbmU7IiksZC5sYWJlbFN0eWxlPWQubGFiZWxTdHlsZS5yZXBsYWNlKCJjb2xvcjoiLCJmaWxsOiIpLGQuaWQ9bCxkLmNsYXNzZXM9ImZsb3djaGFydC1saW5rICIraCsiICIrZixlLnNldEVkZ2Uocy5zdGFydCxzLmVuZCxkLGkpfSkpfSxyaT1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXRpW2Vbbl1dPXRbZVtuXV19LGlpPWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIGZsb3djaGFydCIpLEFyLmNsZWFyKCksQXIuc2V0R2VuKCJnZW4tMiIpO3ZhciBuPU9yLmEucGFyc2VyO24ueXk9QXIsbi5wYXJzZSh0KTt2YXIgcj1Bci5nZXREaXJlY3Rpb24oKTt2b2lkIDA9PT1yJiYocj0iVEQiKTt2YXIgaSxhPWhlKCkuZmxvd2NoYXJ0LHM9YS5ub2RlU3BhY2luZ3x8NTAsYz1hLnJhbmtTcGFjaW5nfHw1MCxsPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cixub2Rlc2VwOnMscmFua3NlcDpjLG1hcmdpbng6OCxtYXJnaW55Ojh9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpLGg9QXIuZ2V0U3ViR3JhcGhzKCk7by5pbmZvKCJTdWJncmFwaHMgLSAiLGgpO2Zvcih2YXIgZj1oLmxlbmd0aC0xO2Y+PTA7Zi0tKWk9aFtmXSxvLmluZm8oIlN1YmdyYXBoIC0gIixpKSxBci5hZGRWZXJ0ZXgoaS5pZCxpLnRpdGxlLCJncm91cCIsdm9pZCAwLGkuY2xhc3NlcyxpLmRpcik7dmFyIGQ9QXIuZ2V0VmVydGljZXMoKSxwPUFyLmdldEVkZ2VzKCk7by5pbmZvKHApO3ZhciB5PTA7Zm9yKHk9aC5sZW5ndGgtMTt5Pj0wO3ktLSl7aT1oW3ldLE9iamVjdCh1LnNlbGVjdEFsbCkoImNsdXN0ZXIiKS5hcHBlbmQoInRleHQiKTtmb3IodmFyIGc9MDtnPGkubm9kZXMubGVuZ3RoO2crKylvLmluZm8oIlNldHRpbmcgdXAgc3ViZ3JhcGhzIixpLm5vZGVzW2ddLGkuaWQpLGwuc2V0UGFyZW50KGkubm9kZXNbZ10saS5pZCl9ZWkoZCxsLGUpLG5pKHAsbCk7dmFyIG09T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTttLmF0dHIoInhtbG5zOnhsaW5rIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpO3ZhciB2PU9iamVjdCh1LnNlbGVjdCkoIiMiK2UrIiBnIik7Um4odixsLFsicG9pbnQiLCJjaXJjbGUiLCJjcm9zcyJdLCJmbG93Y2hhcnQiLGUpO3ZhciBiPWEuZGlhZ3JhbVBhZGRpbmcseD1tLm5vZGUoKS5nZXRCQm94KCksXz14LndpZHRoKzIqYixrPXguaGVpZ2h0KzIqYjtpZihvLmRlYnVnKCJuZXcgVmlld0JveCAwIDAgIi5jb25jYXQoXywiICIpLmNvbmNhdChrKSwidHJhbnNsYXRlKCIuY29uY2F0KGItbC5fbGFiZWwubWFyZ2lueCwiLCAiKS5jb25jYXQoYi1sLl9sYWJlbC5tYXJnaW55LCIpIikpLHRlKG0sayxfLGEudXNlTWF4V2lkdGgpLG0uYXR0cigidmlld0JveCIsIjAgMCAiLmNvbmNhdChfLCIgIikuY29uY2F0KGspKSxtLnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiLmNvbmNhdChiLWwuX2xhYmVsLm1hcmdpbngsIiwgIikuY29uY2F0KGIteC55LCIpIikpLEFyLmluZGV4Tm9kZXMoInN1YkdyYXBoIit5KSwhYS5odG1sTGFiZWxzKWZvcih2YXIgdz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWQ9IicrZSsnIl0gLmVkZ2VMYWJlbCAubGFiZWwnKSxUPTA7VDx3Lmxlbmd0aDtUKyspe3ZhciBFPXdbVF0sQz1FLmdldEJCb3goKSxTPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJyZWN0Iik7Uy5zZXRBdHRyaWJ1dGUoInJ4IiwwKSxTLnNldEF0dHJpYnV0ZSgicnkiLDApLFMuc2V0QXR0cmlidXRlKCJ3aWR0aCIsQy53aWR0aCksUy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsQy5oZWlnaHQpLEUuaW5zZXJ0QmVmb3JlKFMsRS5maXJzdENoaWxkKX1PYmplY3Qua2V5cyhkKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1kW3RdO2lmKG4ubGluayl7dmFyIHI9T2JqZWN0KHUuc2VsZWN0KSgiIyIrZSsnIFtpZD0iJyt0KyciXScpO2lmKHIpe3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhIik7aS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjbGFzcyIsbi5jbGFzc2VzLmpvaW4oIiAiKSksaS5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJocmVmIixuLmxpbmspLGkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicmVsIiwibm9vcGVuZXIiKSxuLmxpbmtUYXJnZXQmJmkuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidGFyZ2V0IixuLmxpbmtUYXJnZXQpO3ZhciBhPXIuaW5zZXJ0KChmdW5jdGlvbigpe3JldHVybiBpfSksIjpmaXJzdC1jaGlsZCIpLG89ci5zZWxlY3QoIi5sYWJlbC1jb250YWluZXIiKTtvJiZhLmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gby5ub2RlKCl9KSk7dmFyIHM9ci5zZWxlY3QoIi5sYWJlbCIpO3MmJmEuYXBwZW5kKChmdW5jdGlvbigpe3JldHVybiBzLm5vZGUoKX0pKX19fSkpfTtmdW5jdGlvbiBhaSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gb2kodCl9KHQpfHxmdW5jdGlvbih0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9dFtTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT10WyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20odCl9KHQpfHxmdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybjtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIG9pKHQsZSk7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLnNsaWNlKDgsLTEpOyJPYmplY3QiPT09biYmdC5jb25zdHJ1Y3RvciYmKG49dC5jb25zdHJ1Y3Rvci5uYW1lKTtpZigiTWFwIj09PW58fCJTZXQiPT09bilyZXR1cm4gQXJyYXkuZnJvbSh0KTtpZigiQXJndW1lbnRzIj09PW58fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKXJldHVybiBvaSh0LGUpfSh0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBvaSh0LGUpeyhudWxsPT1lfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfXZhciBzaSxjaSx1aT0iIixsaT0iIixoaT0iIixmaT1bXSxkaT0iIixwaT1bXSx5aT1bXSxnaT0iIixtaT1bImFjdGl2ZSIsImRvbmUiLCJjcml0IiwibWlsZXN0b25lIl0sdmk9W10sYmk9ITEseGk9ITEsX2k9MCxraT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQuaXNvV2Vla2RheSgpPj02JiZuLmluZGV4T2YoIndlZWtlbmRzIik+PTB8fChuLmluZGV4T2YodC5mb3JtYXQoImRkZGQiKS50b0xvd2VyQ2FzZSgpKT49MHx8bi5pbmRleE9mKHQuZm9ybWF0KGUudHJpbSgpKSk+PTApfSx3aT1mdW5jdGlvbih0LGUsbil7aWYobi5sZW5ndGgmJiF0Lm1hbnVhbEVuZFRpbWUpe3ZhciByPWkoKSh0LnN0YXJ0VGltZSxlLCEwKTtyLmFkZCgxLCJkIik7dmFyIGE9aSgpKHQuZW5kVGltZSxlLCEwKSxvPVRpKHIsYSxlLG4pO3QuZW5kVGltZT1hLnRvRGF0ZSgpLHQucmVuZGVyRW5kVGltZT1vfX0sVGk9ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPSExLGE9bnVsbDt0PD1lOylpfHwoYT1lLnRvRGF0ZSgpKSwoaT1raSh0LG4scikpJiZlLmFkZCgxLCJkIiksdC5hZGQoMSwiZCIpO3JldHVybiBhfSxFaT1mdW5jdGlvbih0LGUsbil7bj1uLnRyaW0oKTt2YXIgcj0vXmFmdGVyXHMrKFtcZFx3LSBdKykvLmV4ZWMobi50cmltKCkpO2lmKG51bGwhPT1yKXt2YXIgYT1udWxsO2lmKHJbMV0uc3BsaXQoIiAiKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1CaSh0KTt2b2lkIDAhPT1lJiYoYT9lLmVuZFRpbWU+YS5lbmRUaW1lJiYoYT1lKTphPWUpfSkpLGEpcmV0dXJuIGEuZW5kVGltZTt2YXIgcz1uZXcgRGF0ZTtyZXR1cm4gcy5zZXRIb3VycygwLDAsMCwwKSxzfXZhciBjPWkoKShuLGUudHJpbSgpLCEwKTtyZXR1cm4gYy5pc1ZhbGlkKCk/Yy50b0RhdGUoKTooby5kZWJ1ZygiSW52YWxpZCBkYXRlOiIrbiksby5kZWJ1ZygiV2l0aCBkYXRlIGZvcm1hdDoiK2UudHJpbSgpKSxuZXcgRGF0ZSl9LENpPWZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9PXQpc3dpdGNoKHRbMl0pe2Nhc2UicyI6ZS5hZGQodFsxXSwic2Vjb25kcyIpO2JyZWFrO2Nhc2UibSI6ZS5hZGQodFsxXSwibWludXRlcyIpO2JyZWFrO2Nhc2UiaCI6ZS5hZGQodFsxXSwiaG91cnMiKTticmVhaztjYXNlImQiOmUuYWRkKHRbMV0sImRheXMiKTticmVhaztjYXNlInciOmUuYWRkKHRbMV0sIndlZWtzIil9cmV0dXJuIGUudG9EYXRlKCl9LFNpPWZ1bmN0aW9uKHQsZSxuLHIpe3I9cnx8ITEsbj1uLnRyaW0oKTt2YXIgYT1pKCkobixlLnRyaW0oKSwhMCk7cmV0dXJuIGEuaXNWYWxpZCgpPyhyJiZhLmFkZCgxLCJkIiksYS50b0RhdGUoKSk6Q2koL14oW1xkXSspKFt3ZGhtc10pLy5leGVjKG4udHJpbSgpKSxpKCkodCkpfSxBaT0wLE1pPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10PyJ0YXNrIisoQWkrPTEpOnR9LE9pPVtdLE5pPXt9LEJpPWZ1bmN0aW9uKHQpe3ZhciBlPU5pW3RdO3JldHVybiBPaVtlXX0sRGk9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZnVuY3Rpb24odCl7dmFyIGU9T2lbdF0sbj0iIjtzd2l0Y2goT2lbdF0ucmF3LnN0YXJ0VGltZS50eXBlKXtjYXNlInByZXZUYXNrRW5kIjp2YXIgcj1CaShlLnByZXZUYXNrSWQpO2Uuc3RhcnRUaW1lPXIuZW5kVGltZTticmVhaztjYXNlImdldFN0YXJ0RGF0ZSI6KG49RWkoMCx1aSxPaVt0XS5yYXcuc3RhcnRUaW1lLnN0YXJ0RGF0YSkpJiYoT2lbdF0uc3RhcnRUaW1lPW4pfXJldHVybiBPaVt0XS5zdGFydFRpbWUmJihPaVt0XS5lbmRUaW1lPVNpKE9pW3RdLnN0YXJ0VGltZSx1aSxPaVt0XS5yYXcuZW5kVGltZS5kYXRhLGJpKSxPaVt0XS5lbmRUaW1lJiYoT2lbdF0ucHJvY2Vzc2VkPSEwLE9pW3RdLm1hbnVhbEVuZFRpbWU9aSgpKE9pW3RdLnJhdy5lbmRUaW1lLmRhdGEsIllZWVktTU0tREQiLCEwKS5pc1ZhbGlkKCksd2koT2lbdF0sdWksZmkpKSksT2lbdF0ucHJvY2Vzc2VkfSxlPSEwLG49MDtuPE9pLmxlbmd0aDtuKyspdChuKSxlPWUmJk9pW25dLnByb2Nlc3NlZDtyZXR1cm4gZX0sTGk9ZnVuY3Rpb24odCxlKXt0LnNwbGl0KCIsIikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49QmkodCk7dm9pZCAwIT09biYmbi5jbGFzc2VzLnB1c2goZSl9KSl9LElpPWZ1bmN0aW9uKHQsZSl7dmkucHVzaCgoZnVuY3Rpb24oKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KHQsJyJdJykpO251bGwhPT1uJiZuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwoZnVuY3Rpb24oKXtlKCl9KSl9KSksdmkucHVzaCgoZnVuY3Rpb24oKXt2YXIgbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWQ9IicuY29uY2F0KHQsJy10ZXh0Il0nKSk7bnVsbCE9PW4mJm4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLChmdW5jdGlvbigpe2UoKX0pKX0pKX0sUmk9e3BhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt5Yy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIGhlKCkuZ2FudHR9LGNsZWFyOmZ1bmN0aW9uKCl7cGk9W10seWk9W10sZ2k9IiIsdmk9W10sZGk9IiIsQWk9MCxzaT12b2lkIDAsY2k9dm9pZCAwLE9pPVtdLHVpPSIiLGxpPSIiLGhpPSIiLGZpPVtdLGJpPSExLHhpPSExLF9pPTB9LHNldERhdGVGb3JtYXQ6ZnVuY3Rpb24odCl7dWk9dH0sZ2V0RGF0ZUZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB1aX0sZW5hYmxlSW5jbHVzaXZlRW5kRGF0ZXM6ZnVuY3Rpb24oKXtiaT0hMH0sZW5kRGF0ZXNBcmVJbmNsdXNpdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYml9LGVuYWJsZVRvcEF4aXM6ZnVuY3Rpb24oKXt4aT0hMH0sdG9wQXhpc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4geGl9LHNldEF4aXNGb3JtYXQ6ZnVuY3Rpb24odCl7bGk9dH0sZ2V0QXhpc0Zvcm1hdDpmdW5jdGlvbigpe3JldHVybiBsaX0sc2V0VG9kYXlNYXJrZXI6ZnVuY3Rpb24odCl7aGk9dH0sZ2V0VG9kYXlNYXJrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gaGl9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe2RpPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIGRpfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe2dpPXQscGkucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gcGl9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PURpKCksZT0wOyF0JiZlPDEwOyl0PURpKCksZSsrO3JldHVybiB5aT1PaX0sYWRkVGFzazpmdW5jdGlvbih0LGUpe3ZhciBuPXtzZWN0aW9uOmdpLHR5cGU6Z2kscHJvY2Vzc2VkOiExLG1hbnVhbEVuZFRpbWU6ITEscmVuZGVyRW5kVGltZTpudWxsLHJhdzp7ZGF0YTplfSx0YXNrOnQsY2xhc3NlczpbXX0scj1mdW5jdGlvbih0LGUpe3ZhciBuPSgiOiI9PT1lLnN1YnN0cigwLDEpP2Uuc3Vic3RyKDEsZS5sZW5ndGgpOmUpLnNwbGl0KCIsIikscj17fTtGaShuLHIsbWkpO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV09bltpXS50cmltKCk7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDE6ci5pZD1NaSgpLHIuc3RhcnRUaW1lPXt0eXBlOiJwcmV2VGFza0VuZCIsaWQ6dH0sci5lbmRUaW1lPXtkYXRhOm5bMF19O2JyZWFrO2Nhc2UgMjpyLmlkPU1pKCksci5zdGFydFRpbWU9e3R5cGU6ImdldFN0YXJ0RGF0ZSIsc3RhcnREYXRhOm5bMF19LHIuZW5kVGltZT17ZGF0YTpuWzFdfTticmVhaztjYXNlIDM6ci5pZD1NaShuWzBdKSxyLnN0YXJ0VGltZT17dHlwZToiZ2V0U3RhcnREYXRlIixzdGFydERhdGE6blsxXX0sci5lbmRUaW1lPXtkYXRhOm5bMl19fXJldHVybiByfShjaSxlKTtuLnJhdy5zdGFydFRpbWU9ci5zdGFydFRpbWUsbi5yYXcuZW5kVGltZT1yLmVuZFRpbWUsbi5pZD1yLmlkLG4ucHJldlRhc2tJZD1jaSxuLmFjdGl2ZT1yLmFjdGl2ZSxuLmRvbmU9ci5kb25lLG4uY3JpdD1yLmNyaXQsbi5taWxlc3RvbmU9ci5taWxlc3RvbmUsbi5vcmRlcj1faSxfaSsrO3ZhciBpPU9pLnB1c2gobik7Y2k9bi5pZCxOaVtuLmlkXT1pLTF9LGZpbmRUYXNrQnlJZDpCaSxhZGRUYXNrT3JnOmZ1bmN0aW9uKHQsZSl7dmFyIG49e3NlY3Rpb246Z2ksdHlwZTpnaSxkZXNjcmlwdGlvbjp0LHRhc2s6dCxjbGFzc2VzOltdfSxyPWZ1bmN0aW9uKHQsZSl7dmFyIG49KCI6Ij09PWUuc3Vic3RyKDAsMSk/ZS5zdWJzdHIoMSxlLmxlbmd0aCk6ZSkuc3BsaXQoIiwiKSxyPXt9O0ZpKG4scixtaSk7Zm9yKHZhciBhPTA7YTxuLmxlbmd0aDthKyspblthXT1uW2FdLnRyaW0oKTt2YXIgbz0iIjtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMTpyLmlkPU1pKCksci5zdGFydFRpbWU9dC5lbmRUaW1lLG89blswXTticmVhaztjYXNlIDI6ci5pZD1NaSgpLHIuc3RhcnRUaW1lPUVpKDAsdWksblswXSksbz1uWzFdO2JyZWFrO2Nhc2UgMzpyLmlkPU1pKG5bMF0pLHIuc3RhcnRUaW1lPUVpKDAsdWksblsxXSksbz1uWzJdfXJldHVybiBvJiYoci5lbmRUaW1lPVNpKHIuc3RhcnRUaW1lLHVpLG8sYmkpLHIubWFudWFsRW5kVGltZT1pKCkobywiWVlZWS1NTS1ERCIsITApLmlzVmFsaWQoKSx3aShyLHVpLGZpKSkscn0oc2ksZSk7bi5zdGFydFRpbWU9ci5zdGFydFRpbWUsbi5lbmRUaW1lPXIuZW5kVGltZSxuLmlkPXIuaWQsbi5hY3RpdmU9ci5hY3RpdmUsbi5kb25lPXIuZG9uZSxuLmNyaXQ9ci5jcml0LG4ubWlsZXN0b25lPXIubWlsZXN0b25lLHNpPW4seWkucHVzaChuKX0sc2V0RXhjbHVkZXM6ZnVuY3Rpb24odCl7Zmk9dC50b0xvd2VyQ2FzZSgpLnNwbGl0KC9bXHMsXSsvKX0sZ2V0RXhjbHVkZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZml9LHNldENsaWNrRXZlbnQ6ZnVuY3Rpb24odCxlLG4pe3Quc3BsaXQoIiwiKS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4pe2lmKCJsb29zZSI9PT1oZSgpLnNlY3VyaXR5TGV2ZWwmJnZvaWQgMCE9PWUpe3ZhciByPVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7cj1uLnNwbGl0KC8sKD89KD86KD86W14iXSoiKXsyfSkqW14iXSokKS8pO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLnRyaW0oKTsnIic9PT1hLmNoYXJBdCgwKSYmJyInPT09YS5jaGFyQXQoYS5sZW5ndGgtMSkmJihhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMikpLHJbaV09YX19MD09PXIubGVuZ3RoJiZyLnB1c2godCksdm9pZCAwIT09QmkodCkmJklpKHQsKGZ1bmN0aW9uKCl7bmUucnVuRnVuYy5hcHBseShuZSxbZV0uY29uY2F0KGFpKHIpKSl9KSl9fSh0LGUsbil9KSksTGkodCwiY2xpY2thYmxlIil9LHNldExpbms6ZnVuY3Rpb24odCxlKXt2YXIgbj1lOyJsb29zZSIhPT1oZSgpLnNlY3VyaXR5TGV2ZWwmJihuPU9iamVjdChHLnNhbml0aXplVXJsKShlKSksdC5zcGxpdCgiLCIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PUJpKHQpJiZJaSh0LChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKG4sIl9zZWxmIil9KSl9KSksTGkodCwiY2xpY2thYmxlIil9LGJpbmRGdW5jdGlvbnM6ZnVuY3Rpb24odCl7dmkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZSh0KX0pKX0sZHVyYXRpb25Ub0RhdGU6Q2l9O2Z1bmN0aW9uIEZpKHQsZSxuKXtmb3IodmFyIHI9ITA7cjspcj0hMSxuLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBpPW5ldyBSZWdFeHAoIl5cXHMqIituKyJcXHMqJCIpO3RbMF0ubWF0Y2goaSkmJihlW25dPSEwLHQuc2hpZnQoMSkscj0hMCl9KSl9dmFyIFBpPW4oMjQpLGppPW4ubihQaSk7UGkucGFyc2VyLnl5PVJpO3ZhciBZaSx6aT1mdW5jdGlvbigpe30sVWk9ZnVuY3Rpb24odCxlKXt2YXIgbj1oZSgpLmdhbnR0O1BpLnBhcnNlci55eS5jbGVhcigpLFBpLnBhcnNlci5wYXJzZSh0KTt2YXIgcj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTt2b2lkIDA9PT0oWWk9ci5wYXJlbnRFbGVtZW50Lm9mZnNldFdpZHRoKSYmKFlpPTEyMDApLHZvaWQgMCE9PW4udXNlV2lkdGgmJihZaT1uLnVzZVdpZHRoKTt2YXIgaT1QaS5wYXJzZXIueXkuZ2V0VGFza3MoKSxhPWkubGVuZ3RoKihuLmJhckhlaWdodCtuLmJhckdhcCkrMipuLnRvcFBhZGRpbmc7ci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitZaSsiICIrYSk7Zm9yKHZhciBvPU9iamVjdCh1LnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSkscz1PYmplY3QodS5zY2FsZVRpbWUpKCkuZG9tYWluKFtPYmplY3QodS5taW4pKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN0YXJ0VGltZX0pKSxPYmplY3QodS5tYXgpKGksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZFRpbWV9KSldKS5yYW5nZVJvdW5kKFswLFlpLW4ubGVmdFBhZGRpbmctbi5yaWdodFBhZGRpbmddKSxjPVtdLGw9MDtsPGkubGVuZ3RoO2wrKyljLnB1c2goaVtsXS50eXBlKTt2YXIgaD1jO2Z1bmN0aW9uIGYodCl7Zm9yKHZhciBlPXQubGVuZ3RoLG49e307ZTspblt0Wy0tZV1dPShuW3RbZV1dfHwwKSsxO3JldHVybiBufWM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LG49W10scj0wLGk9dC5sZW5ndGg7cjxpOysrcillLmhhc093blByb3BlcnR5KHRbcl0pfHwoZVt0W3JdXT0hMCxuLnB1c2godFtyXSkpO3JldHVybiBufShjKSxpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5zdGFydFRpbWUscj1lLnN0YXJ0VGltZSxpPTA7cmV0dXJuIG4+cj9pPTE6bjxyJiYoaT0tMSksaX0pKSxmdW5jdGlvbih0LGUscil7dmFyIGk9bi5iYXJIZWlnaHQsYT1pK24uYmFyR2FwLGw9bi50b3BQYWRkaW5nLGQ9bi5sZWZ0UGFkZGluZztPYmplY3QodS5zY2FsZUxpbmVhcikoKS5kb21haW4oWzAsYy5sZW5ndGhdKS5yYW5nZShbIiMwMEI5RkEiLCIjRjk1MDAyIl0pLmludGVycG9sYXRlKHUuaW50ZXJwb2xhdGVIY2wpOyhmdW5jdGlvbih0LGUscixpKXt2YXIgYT1PYmplY3QodS5heGlzQm90dG9tKShzKS50aWNrU2l6ZSgtaStlK24uZ3JpZExpbmVTdGFydFBhZGRpbmcpLnRpY2tGb3JtYXQoT2JqZWN0KHUudGltZUZvcm1hdCkoUGkucGFyc2VyLnl5LmdldEF4aXNGb3JtYXQoKXx8bi5heGlzRm9ybWF0fHwiJVktJW0tJWQiKSk7aWYoby5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyaWQiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsICIrKGktNTApKyIpIikuY2FsbChhKS5zZWxlY3RBbGwoInRleHQiKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJmaWxsIiwiIzAwMCIpLmF0dHIoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJkeSIsIjFlbSIpLFJpLnRvcEF4aXNFbmFibGVkKCl8fG4udG9wQXhpcyl7dmFyIGM9T2JqZWN0KHUuYXhpc1RvcCkocykudGlja1NpemUoLWkrZStuLmdyaWRMaW5lU3RhcnRQYWRkaW5nKS50aWNrRm9ybWF0KE9iamVjdCh1LnRpbWVGb3JtYXQpKFBpLnBhcnNlci55eS5nZXRBeGlzRm9ybWF0KCl8fG4uYXhpc0Zvcm1hdHx8IiVZLSVtLSVkIikpO28uYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJncmlkIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdCsiLCAiK2UrIikiKS5jYWxsKGMpLnNlbGVjdEFsbCgidGV4dCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cigic3Ryb2tlIiwibm9uZSIpLmF0dHIoImZvbnQtc2l6ZSIsMTApfX0pKGQsbCwwLHIpLGZ1bmN0aW9uKHQsZSxyLGksYSx1LGwpe28uYXBwZW5kKCJnIikuc2VsZWN0QWxsKCJyZWN0IikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDApLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrci0yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24oKXtyZXR1cm4gbC1uLnJpZ2h0UGFkZGluZy8yfSkpLmF0dHIoImhlaWdodCIsZSkuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKylpZih0LnR5cGU9PT1jW2VdKXJldHVybiJzZWN0aW9uIHNlY3Rpb24iK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uIHNlY3Rpb24wIn0pKTt2YXIgaD1vLmFwcGVuZCgiZyIpLnNlbGVjdEFsbCgicmVjdCIpLmRhdGEodCkuZW50ZXIoKTtoLmFwcGVuZCgicmVjdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkuYXR0cigicngiLDMpLmF0dHIoInJ5IiwzKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQubWlsZXN0b25lP3ModC5zdGFydFRpbWUpK2krLjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYTpzKHQuc3RhcnRUaW1lKStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LG4pe3JldHVybiB0Lm9yZGVyKmUrcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1pbGVzdG9uZT9hOnModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpfSkpLmF0dHIoImhlaWdodCIsYSkuYXR0cigidHJhbnNmb3JtLW9yaWdpbiIsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIG49dC5vcmRlciwocyh0LnN0YXJ0VGltZSkraSsuNSoocyh0LmVuZFRpbWUpLXModC5zdGFydFRpbWUpKSkudG9TdHJpbmcoKSsicHggIisobiplK3IrLjUqYSkudG9TdHJpbmcoKSsicHgifSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9IiI7dC5jbGFzc2VzLmxlbmd0aD4wJiYoZT10LmNsYXNzZXMuam9pbigiICIpKTtmb3IodmFyIHI9MCxpPTA7aTxjLmxlbmd0aDtpKyspdC50eXBlPT09Y1tpXSYmKHI9aSVuLm51bWJlclNlY3Rpb25TdHlsZXMpO3ZhciBhPSIiO3JldHVybiB0LmFjdGl2ZT90LmNyaXQ/YSs9IiBhY3RpdmVDcml0IjphPSIgYWN0aXZlIjp0LmRvbmU/YT10LmNyaXQ/IiBkb25lQ3JpdCI6IiBkb25lIjp0LmNyaXQmJihhKz0iIGNyaXQiKSwwPT09YS5sZW5ndGgmJihhPSIgdGFzayIpLHQubWlsZXN0b25lJiYoYT0iIG1pbGVzdG9uZSAiK2EpLGErPXIsInRhc2siKyhhKz0iICIrZSl9KSksaC5hcHBlbmQoInRleHQiKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkKyItdGV4dCJ9KSkudGV4dCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGFza30pKS5hdHRyKCJmb250LXNpemUiLG4uZm9udFNpemUpLmF0dHIoIngiLChmdW5jdGlvbih0KXt2YXIgZT1zKHQuc3RhcnRUaW1lKSxyPXModC5yZW5kZXJFbmRUaW1lfHx0LmVuZFRpbWUpO3QubWlsZXN0b25lJiYoZSs9LjUqKHModC5lbmRUaW1lKS1zKHQuc3RhcnRUaW1lKSktLjUqYSksdC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIG89dGhpcy5nZXRCQm94KCkud2lkdGg7cmV0dXJuIG8+ci1lP3IrbysxLjUqbi5sZWZ0UGFkZGluZz5sP2UraS01OnIraSs1OihyLWUpLzIrZStpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0LGkpe3JldHVybiB0Lm9yZGVyKmUrbi5iYXJIZWlnaHQvMisobi5mb250U2l6ZS8yLTIpK3J9KSkuYXR0cigidGV4dC1oZWlnaHQiLGEpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7dmFyIGU9cyh0LnN0YXJ0VGltZSkscj1zKHQuZW5kVGltZSk7dC5taWxlc3RvbmUmJihyPWUrYSk7dmFyIGk9dGhpcy5nZXRCQm94KCkud2lkdGgsbz0iIjt0LmNsYXNzZXMubGVuZ3RoPjAmJihvPXQuY2xhc3Nlcy5qb2luKCIgIikpO2Zvcih2YXIgdT0wLGg9MDtoPGMubGVuZ3RoO2grKyl0LnR5cGU9PT1jW2hdJiYodT1oJW4ubnVtYmVyU2VjdGlvblN0eWxlcyk7dmFyIGY9IiI7cmV0dXJuIHQuYWN0aXZlJiYoZj10LmNyaXQ/ImFjdGl2ZUNyaXRUZXh0Iit1OiJhY3RpdmVUZXh0Iit1KSx0LmRvbmU/Zj10LmNyaXQ/ZisiIGRvbmVDcml0VGV4dCIrdTpmKyIgZG9uZVRleHQiK3U6dC5jcml0JiYoZj1mKyIgY3JpdFRleHQiK3UpLHQubWlsZXN0b25lJiYoZis9IiBtaWxlc3RvbmVUZXh0IiksaT5yLWU/citpKzEuNSpuLmxlZnRQYWRkaW5nPmw/bysiIHRhc2tUZXh0T3V0c2lkZUxlZnQgdGFza1RleHRPdXRzaWRlIit1KyIgIitmOm8rIiB0YXNrVGV4dE91dHNpZGVSaWdodCB0YXNrVGV4dE91dHNpZGUiK3UrIiAiK2YrIiB3aWR0aC0iK2k6bysiIHRhc2tUZXh0IHRhc2tUZXh0Iit1KyIgIitmKyIgd2lkdGgtIitpfSkpfSh0LGEsbCxkLGksMCxlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxpPTAsYT0wO2E8Yy5sZW5ndGg7YSsrKXJbYV09W2NbYV0sKHM9Y1thXSx1PWgsZih1KVtzXXx8MCldO3ZhciBzLHU7by5hcHBlbmQoImciKS5zZWxlY3RBbGwoInRleHQiKS5kYXRhKHIpLmVudGVyKCkuYXBwZW5kKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxuPS0oZS5sZW5ndGgtMSkvMixyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iik7ci5zZXRBdHRyaWJ1dGUoImR5IixuKyJlbSIpO2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwidHNwYW4iKTthLnNldEF0dHJpYnV0ZSgiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLGEuc2V0QXR0cmlidXRlKCJ4IiwiMTAiKSxpPjAmJmEuc2V0QXR0cmlidXRlKCJkeSIsIjFlbSIpLGEudGV4dENvbnRlbnQ9ZVtpXSxyLmFwcGVuZENoaWxkKGEpfXJldHVybiByfSkpLmF0dHIoIngiLDEwKS5hdHRyKCJ5IiwoZnVuY3Rpb24obixhKXtpZighKGE+MCkpcmV0dXJuIG5bMV0qdC8yK2U7Zm9yKHZhciBvPTA7bzxhO28rKylyZXR1cm4gaSs9clthLTFdWzFdLG5bMV0qdC8yK2kqdCtlfSkpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImZvbnQtc2l6ZSIsbi5zZWN0aW9uRm9udFNpemUpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxjLmxlbmd0aDtlKyspaWYodFswXT09PWNbZV0pcmV0dXJuInNlY3Rpb25UaXRsZSBzZWN0aW9uVGl0bGUiK2Ulbi5udW1iZXJTZWN0aW9uU3R5bGVzO3JldHVybiJzZWN0aW9uVGl0bGUifSkpfShhLGwpLGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPVJpLmdldFRvZGF5TWFya2VyKCk7aWYoIm9mZiI9PT1hKXJldHVybjt2YXIgYz1vLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidG9kYXkiKSx1PW5ldyBEYXRlLGw9Yy5hcHBlbmQoImxpbmUiKTtsLmF0dHIoIngxIixzKHUpK3QpLmF0dHIoIngyIixzKHUpK3QpLmF0dHIoInkxIixuLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJ5MiIsaS1uLnRpdGxlVG9wTWFyZ2luKS5hdHRyKCJjbGFzcyIsInRvZGF5IiksIiIhPT1hJiZsLmF0dHIoInN0eWxlIixhLnJlcGxhY2UoLywvZywiOyIpKX0oZCwwLDAscil9KGksWWksYSksdGUobyxhLFlpLG4udXNlTWF4V2lkdGgpLG8uYXBwZW5kKCJ0ZXh0IikudGV4dChQaS5wYXJzZXIueXkuZ2V0VGl0bGUoKSkuYXR0cigieCIsWWkvMikuYXR0cigieSIsbi50aXRsZVRvcE1hcmdpbikuYXR0cigiY2xhc3MiLCJ0aXRsZVRleHQiKX0sJGk9e30scWk9bnVsbCxXaT17bWFzdGVyOnFpfSxIaT0ibWFzdGVyIixWaT0iTFIiLEdpPTA7ZnVuY3Rpb24gWGkoKXtyZXR1cm4gSHQoe2xlbmd0aDo3fSl9ZnVuY3Rpb24gWmkodCxlKXtmb3Ioby5kZWJ1ZygiRW50ZXJpbmcgaXNmYXN0Zm9yd2FyZGFibGU6Iix0LmlkLGUuaWQpO3Quc2VxPD1lLnNlcSYmdCE9PWUmJm51bGwhPWUucGFyZW50Oyl7aWYoQXJyYXkuaXNBcnJheShlLnBhcmVudCkpcmV0dXJuIG8uZGVidWcoIkluIG1lcmdlIGNvbW1pdDoiLGUucGFyZW50KSxaaSh0LCRpW2UucGFyZW50WzBdXSl8fFppKHQsJGlbZS5wYXJlbnRbMV1dKTtlPSRpW2UucGFyZW50XX1yZXR1cm4gby5kZWJ1Zyh0LmlkLGUuaWQpLHQuaWQ9PT1lLmlkfXZhciBLaT17fTtmdW5jdGlvbiBRaSh0LGUsbil7dmFyIHI9dC5pbmRleE9mKGUpOy0xPT09cj90LnB1c2gobik6dC5zcGxpY2UociwxLG4pfWZ1bmN0aW9uIEppKHQpe3ZhciBlPXQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNlcT5lLnNlcT90OmV9KSx0WzBdKSxuPSIiO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7bis9dD09PWU/Ilx0KiI6Ilx0fCJ9KSk7dmFyIHIsaSxhLHM9W24sZS5pZCxlLnNlcV07Zm9yKHZhciBjIGluIFdpKVdpW2NdPT09ZS5pZCYmcy5wdXNoKGMpO2lmKG8uZGVidWcocy5qb2luKCIgIikpLEFycmF5LmlzQXJyYXkoZS5wYXJlbnQpKXt2YXIgdT0kaVtlLnBhcmVudFswXV07UWkodCxlLHUpLHQucHVzaCgkaVtlLnBhcmVudFsxXV0pfWVsc2V7aWYobnVsbD09ZS5wYXJlbnQpcmV0dXJuO3ZhciBsPSRpW2UucGFyZW50XTtRaSh0LGUsbCl9cj10LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9LGE9T2JqZWN0LmNyZWF0ZShudWxsKSxKaSh0PXIucmVkdWNlKChmdW5jdGlvbih0LGUpe3ZhciBuPWkoZSk7cmV0dXJuIGFbbl18fChhW25dPSEwLHQucHVzaChlKSksdH0pLFtdKSl9dmFyIHRhLGVhPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXMoJGkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuICRpW3RdfSkpO3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe28uZGVidWcodC5pZCl9KSksdC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnNlcS10LnNlcX0pKSx0fSxuYT17c2V0RGlyZWN0aW9uOmZ1bmN0aW9uKHQpe1ZpPXR9LHNldE9wdGlvbnM6ZnVuY3Rpb24odCl7by5kZWJ1Zygib3B0aW9ucyBzdHIiLHQpLHQ9KHQ9dCYmdC50cmltKCkpfHwie30iO3RyeXtLaT1KU09OLnBhcnNlKHQpfWNhdGNoKHQpe28uZXJyb3IoImVycm9yIHdoaWxlIHBhcnNpbmcgZ2l0R3JhcGggb3B0aW9ucyIsdC5tZXNzYWdlKX19LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gS2l9LGNvbW1pdDpmdW5jdGlvbih0KXt2YXIgZT17aWQ6WGkoKSxtZXNzYWdlOnQsc2VxOkdpKysscGFyZW50Om51bGw9PXFpP251bGw6cWkuaWR9O3FpPWUsJGlbZS5pZF09ZSxXaVtIaV09ZS5pZCxvLmRlYnVnKCJpbiBwdXNoQ29tbWl0ICIrZS5pZCl9LGJyYW5jaDpmdW5jdGlvbih0KXtXaVt0XT1udWxsIT1xaT9xaS5pZDpudWxsLG8uZGVidWcoImluIGNyZWF0ZUJyYW5jaCIpfSxtZXJnZTpmdW5jdGlvbih0KXt2YXIgZT0kaVtXaVtIaV1dLG49JGlbV2lbdF1dO2lmKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc2VxPmUuc2VxJiZaaShlLHQpfShlLG4pKW8uZGVidWcoIkFscmVhZHkgbWVyZ2VkIik7ZWxzZXtpZihaaShlLG4pKVdpW0hpXT1XaVt0XSxxaT0kaVtXaVtIaV1dO2Vsc2V7dmFyIHI9e2lkOlhpKCksbWVzc2FnZToibWVyZ2VkIGJyYW5jaCAiK3QrIiBpbnRvICIrSGksc2VxOkdpKysscGFyZW50OltudWxsPT1xaT9udWxsOnFpLmlkLFdpW3RdXX07cWk9ciwkaVtyLmlkXT1yLFdpW0hpXT1yLmlkfW8uZGVidWcoV2kpLG8uZGVidWcoImluIG1lcmdlQnJhbmNoIil9fSxjaGVja291dDpmdW5jdGlvbih0KXtvLmRlYnVnKCJpbiBjaGVja291dCIpO3ZhciBlPVdpW0hpPXRdO3FpPSRpW2VdfSxyZXNldDpmdW5jdGlvbih0KXtvLmRlYnVnKCJpbiByZXNldCIsdCk7dmFyIGU9dC5zcGxpdCgiOiIpWzBdLG49cGFyc2VJbnQodC5zcGxpdCgiOiIpWzFdKSxyPSJIRUFEIj09PWU/cWk6JGlbV2lbZV1dO2ZvcihvLmRlYnVnKHIsbik7bj4wOylpZihuLS0sIShyPSRpW3IucGFyZW50XSkpe3ZhciBpPSJDcml0aWNhbCBlcnJvciAtIHVuaXF1ZSBwYXJlbnQgY29tbWl0IG5vdCBmb3VuZCBkdXJpbmcgcmVzZXQiO3Rocm93IG8uZXJyb3IoaSksaX1xaT1yLFdpW0hpXT1yLmlkfSxwcmV0dHlQcmludDpmdW5jdGlvbigpe28uZGVidWcoJGkpLEppKFtlYSgpWzBdXSl9LGNsZWFyOmZ1bmN0aW9uKCl7JGk9e30sV2k9e21hc3RlcjpxaT1udWxsfSxIaT0ibWFzdGVyIixHaT0wfSxnZXRCcmFuY2hlc0FzT2JqQXJyYXk6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gV2kpdC5wdXNoKHtuYW1lOmUsY29tbWl0OiRpW1dpW2VdXX0pO3JldHVybiB0fSxnZXRCcmFuY2hlczpmdW5jdGlvbigpe3JldHVybiBXaX0sZ2V0Q29tbWl0czpmdW5jdGlvbigpe3JldHVybiAkaX0sZ2V0Q29tbWl0c0FycmF5OmVhLGdldEN1cnJlbnRCcmFuY2g6ZnVuY3Rpb24oKXtyZXR1cm4gSGl9LGdldERpcmVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBWaX0sZ2V0SGVhZDpmdW5jdGlvbigpe3JldHVybiBxaX19LHJhPW4oNzMpLGlhPW4ubihyYSksYWE9e30sb2E9e25vZGVTcGFjaW5nOjE1MCxub2RlRmlsbENvbG9yOiJ5ZWxsb3ciLG5vZGVTdHJva2VXaWR0aDoyLG5vZGVTdHJva2VDb2xvcjoiZ3JleSIsbGluZVN0cm9rZVdpZHRoOjQsYnJhbmNoT2Zmc2V0OjUwLGxpbmVDb2xvcjoiZ3JleSIsbGVmdE1hcmdpbjo1MCxicmFuY2hDb2xvcnM6WyIjNDQyZjc0IiwiIzk4MzM1MSIsIiM2MDk3MzIiLCIjQUE5QTM5Il0sbm9kZVJhZGl1czoxMCxub2RlTGFiZWw6e3dpZHRoOjc1LGhlaWdodDoxMDAseDotMjUseTowfX0sc2E9e307ZnVuY3Rpb24gY2EodCxlLG4scil7dmFyIGk9WXQocix1LmN1cnZlQmFzaXMpLGE9b2EuYnJhbmNoQ29sb3JzW24lb2EuYnJhbmNoQ29sb3JzLmxlbmd0aF0sbz1PYmplY3QodS5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQueCl9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC55KX0pKS5jdXJ2ZShpKTt0LmFwcGVuZCgic3ZnOnBhdGgiKS5hdHRyKCJkIixvKGUpKS5zdHlsZSgic3Ryb2tlIixhKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvYS5saW5lU3Ryb2tlV2lkdGgpLnN0eWxlKCJmaWxsIiwibm9uZSIpfWZ1bmN0aW9uIHVhKHQsZSl7ZT1lfHx0Lm5vZGUoKS5nZXRCQm94KCk7dmFyIG49dC5ub2RlKCkuZ2V0Q1RNKCk7cmV0dXJue2xlZnQ6bi5lK2UueCpuLmEsdG9wOm4uZitlLnkqbi5kLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0fX1mdW5jdGlvbiBsYSh0LGUsbixyLGkpe28uZGVidWcoInN2Z0RyYXdMaW5lRm9yQ29tbWl0czogIixlLG4pO3ZhciBhPXVhKHQuc2VsZWN0KCIjbm9kZS0iK2UrIiBjaXJjbGUiKSkscz11YSh0LnNlbGVjdCgiI25vZGUtIituKyIgY2lyY2xlIikpO3N3aXRjaChyKXtjYXNlIkxSIjppZihhLmxlZnQtcy5sZWZ0Pm9hLm5vZGVTcGFjaW5nKXt2YXIgYz17eDphLmxlZnQtb2Eubm9kZVNwYWNpbmcseTpzLnRvcCtzLmhlaWdodC8yfTtjYSh0LFtjLHt4OnMubGVmdCtzLndpZHRoLHk6cy50b3Arcy5oZWlnaHQvMn1dLGksImxpbmVhciIpLGNhKHQsW3t4OmEubGVmdCx5OmEudG9wK2EuaGVpZ2h0LzJ9LHt4OmEubGVmdC1vYS5ub2RlU3BhY2luZy8yLHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LW9hLm5vZGVTcGFjaW5nLzIseTpjLnl9LGNdLGkpfWVsc2UgY2EodCxbe3g6YS5sZWZ0LHk6YS50b3ArYS5oZWlnaHQvMn0se3g6YS5sZWZ0LW9hLm5vZGVTcGFjaW5nLzIseTphLnRvcCthLmhlaWdodC8yfSx7eDphLmxlZnQtb2Eubm9kZVNwYWNpbmcvMix5OnMudG9wK3MuaGVpZ2h0LzJ9LHt4OnMubGVmdCtzLndpZHRoLHk6cy50b3Arcy5oZWlnaHQvMn1dLGkpO2JyZWFrO2Nhc2UiQlQiOmlmKHMudG9wLWEudG9wPm9hLm5vZGVTcGFjaW5nKXt2YXIgdT17eDpzLmxlZnQrcy53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHQrb2Eubm9kZVNwYWNpbmd9O2NhKHQsW3Use3g6cy5sZWZ0K3Mud2lkdGgvMix5OnMudG9wfV0saSwibGluZWFyIiksY2EodCxbe3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK2EuaGVpZ2h0fSx7eDphLmxlZnQrYS53aWR0aC8yLHk6YS50b3ArYS5oZWlnaHQrb2Eubm9kZVNwYWNpbmcvMn0se3g6cy5sZWZ0K3Mud2lkdGgvMix5OnUueS1vYS5ub2RlU3BhY2luZy8yfSx1XSxpKX1lbHNlIGNhKHQsW3t4OmEubGVmdCthLndpZHRoLzIseTphLnRvcCthLmhlaWdodH0se3g6YS5sZWZ0K2Eud2lkdGgvMix5OmEudG9wK29hLm5vZGVTcGFjaW5nLzJ9LHt4OnMubGVmdCtzLndpZHRoLzIseTpzLnRvcC1vYS5ub2RlU3BhY2luZy8yfSx7eDpzLmxlZnQrcy53aWR0aC8yLHk6cy50b3B9XSxpKX19ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gdC5zZWxlY3QoZSkubm9kZSgpLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gZmEodCxlLG4scil7dmFyIGksYT1PYmplY3Qua2V5cyhhYSkubGVuZ3RoO2lmKCJzdHJpbmciPT10eXBlb2YgZSlkb3tpZihpPWFhW2VdLG8uZGVidWcoImluIHJlbmRlckNvbW1pdEhpc3RvcnkiLGkuaWQsaS5zZXEpLHQuc2VsZWN0KCIjbm9kZS0iK2UpLnNpemUoKT4wKXJldHVybjt0LmFwcGVuZCgoZnVuY3Rpb24oKXtyZXR1cm4gaGEodCwiI2RlZi1jb21taXQiKX0pKS5hdHRyKCJjbGFzcyIsImNvbW1pdCIpLmF0dHIoImlkIiwoZnVuY3Rpb24oKXtyZXR1cm4ibm9kZS0iK2kuaWR9KSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oKXtzd2l0Y2gocil7Y2FzZSJMUiI6cmV0dXJuInRyYW5zbGF0ZSgiKyhpLnNlcSpvYS5ub2RlU3BhY2luZytvYS5sZWZ0TWFyZ2luKSsiLCAiK3RhKm9hLmJyYW5jaE9mZnNldCsiKSI7Y2FzZSJCVCI6cmV0dXJuInRyYW5zbGF0ZSgiKyh0YSpvYS5icmFuY2hPZmZzZXQrb2EubGVmdE1hcmdpbikrIiwgIisoYS1pLnNlcSkqb2Eubm9kZVNwYWNpbmcrIikifX0pKS5hdHRyKCJmaWxsIixvYS5ub2RlRmlsbENvbG9yKS5hdHRyKCJzdHJva2UiLG9hLm5vZGVTdHJva2VDb2xvcikuYXR0cigic3Ryb2tlLXdpZHRoIixvYS5ub2RlU3Ryb2tlV2lkdGgpO3ZhciBzPXZvaWQgMDtmb3IodmFyIGMgaW4gbilpZihuW2NdLmNvbW1pdD09PWkpe3M9bltjXTticmVha31zJiYoby5kZWJ1ZygiZm91bmQgYnJhbmNoICIscy5uYW1lKSx0LnNlbGVjdCgiI25vZGUtIitpLmlkKyIgcCIpLmFwcGVuZCgieGh0bWw6c3BhbiIpLmF0dHIoImNsYXNzIiwiYnJhbmNoLWxhYmVsIikudGV4dChzLm5hbWUrIiwgIikpLHQuc2VsZWN0KCIjbm9kZS0iK2kuaWQrIiBwIikuYXBwZW5kKCJ4aHRtbDpzcGFuIikuYXR0cigiY2xhc3MiLCJjb21taXQtaWQiKS50ZXh0KGkuaWQpLCIiIT09aS5tZXNzYWdlJiYiQlQiPT09ciYmdC5zZWxlY3QoIiNub2RlLSIraS5pZCsiIHAiKS5hcHBlbmQoInhodG1sOnNwYW4iKS5hdHRyKCJjbGFzcyIsImNvbW1pdC1tc2ciKS50ZXh0KCIsICIraS5tZXNzYWdlKSxlPWkucGFyZW50fXdoaWxlKGUmJmFhW2VdKTtBcnJheS5pc0FycmF5KGUpJiYoby5kZWJ1ZygiZm91bmQgbWVyZ2UgY29tbW1pdCIsZSksZmEodCxlWzBdLG4sciksdGErKyxmYSh0LGVbMV0sbixyKSx0YS0tKX1mdW5jdGlvbiBkYSh0LGUsbixyKXtmb3Iocj1yfHwwO2Uuc2VxPjAmJiFlLmxpbmVEcmF3bjspInN0cmluZyI9PXR5cGVvZiBlLnBhcmVudD8obGEodCxlLmlkLGUucGFyZW50LG4sciksZS5saW5lRHJhd249ITAsZT1hYVtlLnBhcmVudF0pOkFycmF5LmlzQXJyYXkoZS5wYXJlbnQpJiYobGEodCxlLmlkLGUucGFyZW50WzBdLG4sciksbGEodCxlLmlkLGUucGFyZW50WzFdLG4scisxKSxkYSh0LGFhW2UucGFyZW50WzFdXSxuLHIrMSksZS5saW5lRHJhd249ITAsZT1hYVtlLnBhcmVudFswXV0pfXZhciBwYSx5YT1mdW5jdGlvbih0KXtzYT10fSxnYT1mdW5jdGlvbih0LGUsbil7dHJ5e3ZhciByPWlhLmEucGFyc2VyO3IueXk9bmEsci55eS5jbGVhcigpLG8uZGVidWcoImluIGdpdGdyYXBoIHJlbmRlcmVyIix0KyJcbiIsImlkOiIsZSxuKSxyLnBhcnNlKHQrIlxuIiksb2E9T2JqZWN0LmFzc2lnbihvYSxzYSxuYS5nZXRPcHRpb25zKCkpLG8uZGVidWcoImVmZmVjdGl2ZSBvcHRpb25zIixvYSk7dmFyIGk9bmEuZ2V0RGlyZWN0aW9uKCk7YWE9bmEuZ2V0Q29tbWl0cygpO3ZhciBhPW5hLmdldEJyYW5jaGVzQXNPYmpBcnJheSgpOyJCVCI9PT1pJiYob2Eubm9kZUxhYmVsLng9YS5sZW5ndGgqb2EuYnJhbmNoT2Zmc2V0LG9hLm5vZGVMYWJlbC53aWR0aD0iMTAwJSIsb2Eubm9kZUxhYmVsLnk9LTIqb2Eubm9kZVJhZGl1cyk7dmFyIHM9T2JqZWN0KHUuc2VsZWN0KSgnW2lkPSInLmNvbmNhdChlLCciXScpKTtmb3IodmFyIGMgaW4gZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoImciKS5hdHRyKCJpZCIsImRlZi1jb21taXQiKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoInIiLG9hLm5vZGVSYWRpdXMpLmF0dHIoImN4IiwwKS5hdHRyKCJjeSIsMCksdC5zZWxlY3QoIiNkZWYtY29tbWl0IikuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigid2lkdGgiLG9hLm5vZGVMYWJlbC53aWR0aCkuYXR0cigiaGVpZ2h0IixvYS5ub2RlTGFiZWwuaGVpZ2h0KS5hdHRyKCJ4IixvYS5ub2RlTGFiZWwueCkuYXR0cigieSIsb2Eubm9kZUxhYmVsLnkpLmF0dHIoImNsYXNzIiwibm9kZS1sYWJlbCIpLmF0dHIoInJlcXVpcmVkRmVhdHVyZXMiLCJodHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHkiKS5hcHBlbmQoInAiKS5odG1sKCIiKX0ocyksdGE9MSxhKXt2YXIgbD1hW2NdO2ZhKHMsbC5jb21taXQuaWQsYSxpKSxkYShzLGwuY29tbWl0LGkpLHRhKyt9cy5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbigpe3JldHVybiJCVCI9PT1pP09iamVjdC5rZXlzKGFhKS5sZW5ndGgqb2Eubm9kZVNwYWNpbmc6KGEubGVuZ3RoKzEpKm9hLmJyYW5jaE9mZnNldH0pKX1jYXRjaCh0KXtvLmVycm9yKCJFcnJvciB3aGlsZSByZW5kZXJpbmcgZ2l0Z3JhcGgiKSxvLmVycm9yKHQubWVzc2FnZSl9fSxtYT0iIix2YT0hMSxiYT17c2V0TWVzc2FnZTpmdW5jdGlvbih0KXtvLmRlYnVnKCJTZXR0aW5nIG1lc3NhZ2UgdG86ICIrdCksbWE9dH0sZ2V0TWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiBtYX0sc2V0SW5mbzpmdW5jdGlvbih0KXt2YT10fSxnZXRJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHZhfX0seGE9big3NCksX2E9bi5uKHhhKSxrYT17fSx3YT1mdW5jdGlvbih0KXtPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihlKXtrYVtlXT10W2VdfSkpfSxUYT1mdW5jdGlvbih0LGUsbil7dHJ5e3ZhciByPV9hLmEucGFyc2VyO3IueXk9YmEsby5kZWJ1ZygiUmVuZXJpbmcgaW5mbyBkaWFncmFtXG4iK3QpLHIucGFyc2UodCksby5kZWJ1ZygiUGFyc2VkIGluZm8gZGlhZ3JhbSIpO3ZhciBpPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UpO2kuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMTAwKS5hdHRyKCJ5Iiw0MCkuYXR0cigiY2xhc3MiLCJ2ZXJzaW9uIikuYXR0cigiZm9udC1zaXplIiwiMzJweCIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoInYgIituKSxpLmF0dHIoImhlaWdodCIsMTAwKSxpLmF0dHIoIndpZHRoIiw0MDApfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQubWVzc2FnZSl9fSxFYT1uKDc1KSxDYT1uLm4oRWEpLFNhPXt9LEFhPSIiLE1hPSExLE9hPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLnBpZX0sYWRkU2VjdGlvbjpmdW5jdGlvbih0LGUpe3ZvaWQgMD09PVNhW3RdJiYoU2FbdF09ZSxvLmRlYnVnKCJBZGRlZCBuZXcgc2VjdGlvbiA6Iix0KSl9LGdldFNlY3Rpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIFNhfSxjbGVhbnVwVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT8odD10LnN1YnN0cmluZygxKS50cmltKCksTnVtYmVyKHQudHJpbSgpKSk6TnVtYmVyKHQudHJpbSgpKX0sY2xlYXI6ZnVuY3Rpb24oKXtTYT17fSxBYT0iIixNYT0hMX0sc2V0VGl0bGU6ZnVuY3Rpb24odCl7QWE9dH0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gQWF9LHNldFNob3dEYXRhOmZ1bmN0aW9uKHQpe01hPXR9LGdldFNob3dEYXRhOmZ1bmN0aW9uKCl7cmV0dXJuIE1hfX0sTmE9aGUoKSxCYT1mdW5jdGlvbih0LGUpe3RyeXtOYT1oZSgpO3ZhciBuPUNhLmEucGFyc2VyO24ueXk9T2Esby5kZWJ1ZygiUmVuZGVyaW5nIGluZm8gZGlhZ3JhbVxuIit0KSxuLnl5LmNsZWFyKCksbi5wYXJzZSh0KSxvLmRlYnVnKCJQYXJzZWQgaW5mbyBkaWFncmFtIik7dmFyIHI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk7dm9pZCAwPT09KHBhPXIucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCkmJihwYT0xMjAwKSx2b2lkIDAhPT1OYS51c2VXaWR0aCYmKHBhPU5hLnVzZVdpZHRoKSx2b2lkIDAhPT1OYS5waWUudXNlV2lkdGgmJihwYT1OYS5waWUudXNlV2lkdGgpO3ZhciBpPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UpO3RlKGksNDUwLHBhLE5hLnBpZS51c2VNYXhXaWR0aCksci5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLCIwIDAgIitwYSsiIDQ1MCIpO3ZhciBhPU1hdGgubWluKHBhLDQ1MCkvMi00MCxzPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcGEvMisiLDIyNSkiKSxjPU9hLmdldFNlY3Rpb25zKCksbD0wO09iamVjdC5rZXlzKGMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2wrPWNbdF19KSk7dmFyIGg9TmEudGhlbWVWYXJpYWJsZXMsZj1baC5waWUxLGgucGllMixoLnBpZTMsaC5waWU0LGgucGllNSxoLnBpZTYsaC5waWU3LGgucGllOCxoLnBpZTksaC5waWUxMCxoLnBpZTExLGgucGllMTJdLGQ9T2JqZWN0KHUuc2NhbGVPcmRpbmFsKSgpLnJhbmdlKGYpLHA9T2JqZWN0KHUucGllKSgpLnZhbHVlKChmdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0pKShPYmplY3QuZW50cmllcyhjKSkseT1PYmplY3QodS5hcmMpKCkuaW5uZXJSYWRpdXMoMCkub3V0ZXJSYWRpdXMoYSk7cy5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwKS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHkpLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0LmRhdGFbMF0pfSkpLmF0dHIoImNsYXNzIiwicGllQ2lyY2xlIikscy5zZWxlY3RBbGwoIm15U2xpY2VzIikuZGF0YShwKS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybih0LmRhdGFbMV0vbCoxMDApLnRvRml4ZWQoMCkrIiUifSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFuc2xhdGUoIit5LmNlbnRyb2lkKHQpKyIpIn0pKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJjbGFzcyIsInNsaWNlIikscy5hcHBlbmQoInRleHQiKS50ZXh0KG4ueXkuZ2V0VGl0bGUoKSkuYXR0cigieCIsMCkuYXR0cigieSIsLTIwMCkuYXR0cigiY2xhc3MiLCJwaWVUaXRsZVRleHQiKTt2YXIgZz1zLnNlbGVjdEFsbCgiLmxlZ2VuZCIpLmRhdGEoZC5kb21haW4oKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuInRyYW5zbGF0ZSgyMTYsIisoMjIqZS0yMipkLmRvbWFpbigpLmxlbmd0aC8yKSsiKSJ9KSk7Zy5hcHBlbmQoInJlY3QiKS5hdHRyKCJ3aWR0aCIsMTgpLmF0dHIoImhlaWdodCIsMTgpLnN0eWxlKCJmaWxsIixkKS5zdHlsZSgic3Ryb2tlIixkKSxnLmRhdGEocCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMjIpLmF0dHIoInkiLDE0KS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gbi55eS5nZXRTaG93RGF0YSgpfHxOYS5zaG93RGF0YXx8TmEucGllLnNob3dEYXRhP3QuZGF0YVswXSsiIFsiK3QuZGF0YVsxXSsiXSI6dC5kYXRhWzBdfSkpfWNhdGNoKHQpe28uZXJyb3IoIkVycm9yIHdoaWxlIHJlbmRlcmluZyBpbmZvIGRpYWdyYW0iKSxvLmVycm9yKHQpfX0sRGE9big0NSksTGE9bi5uKERhKSxJYT1bXSxSYT17fSxGYT17fSxQYT17fSxqYT17fSxZYT17UmVxdWlyZW1lbnRUeXBlOntSRVFVSVJFTUVOVDoiUmVxdWlyZW1lbnQiLEZVTkNUSU9OQUxfUkVRVUlSRU1FTlQ6IkZ1bmN0aW9uYWwgUmVxdWlyZW1lbnQiLElOVEVSRkFDRV9SRVFVSVJFTUVOVDoiSW50ZXJmYWNlIFJlcXVpcmVtZW50IixQRVJGT1JNQU5DRV9SRVFVSVJFTUVOVDoiUGVyZm9ybWFuY2UgUmVxdWlyZW1lbnQiLFBIWVNJQ0FMX1JFUVVJUkVNRU5UOiJQaHlzaWNhbCBSZXF1aXJlbWVudCIsREVTSUdOX0NPTlNUUkFJTlQ6IkRlc2lnbiBDb25zdHJhaW50In0sUmlza0xldmVsOntMT1dfUklTSzoiTG93IixNRURfUklTSzoiTWVkaXVtIixISUdIX1JJU0s6IkhpZ2gifSxWZXJpZnlUeXBlOntWRVJJRllfQU5BTFlTSVM6IkFuYWx5c2lzIixWRVJJRllfREVNT05TVFJBVElPTjoiRGVtb25zdHJhdGlvbiIsVkVSSUZZX0lOU1BFQ1RJT046Ikluc3BlY3Rpb24iLFZFUklGWV9URVNUOiJUZXN0In0sUmVsYXRpb25zaGlwczp7Q09OVEFJTlM6ImNvbnRhaW5zIixDT1BJRVM6ImNvcGllcyIsREVSSVZFUzoiZGVyaXZlcyIsU0FUSVNGSUVTOiJzYXRpc2ZpZXMiLFZFUklGSUVTOiJ2ZXJpZmllcyIsUkVGSU5FUzoicmVmaW5lcyIsVFJBQ0VTOiJ0cmFjZXMifSxwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLnJlcX0sYWRkUmVxdWlyZW1lbnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09RmFbdF0mJihGYVt0XT17bmFtZTp0LHR5cGU6ZSxpZDpSYS5pZCx0ZXh0OlJhLnRleHQscmlzazpSYS5yaXNrLHZlcmlmeU1ldGhvZDpSYS52ZXJpZnlNZXRob2R9KSxSYT17fSxGYVt0XX0sZ2V0UmVxdWlyZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIEZhfSxzZXROZXdSZXFJZDpmdW5jdGlvbih0KXt2b2lkIDAhPT1SYSYmKFJhLmlkPXQpfSxzZXROZXdSZXFUZXh0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PVJhJiYoUmEudGV4dD10KX0sc2V0TmV3UmVxUmlzazpmdW5jdGlvbih0KXt2b2lkIDAhPT1SYSYmKFJhLnJpc2s9dCl9LHNldE5ld1JlcVZlcmlmeU1ldGhvZDpmdW5jdGlvbih0KXt2b2lkIDAhPT1SYSYmKFJhLnZlcmlmeU1ldGhvZD10KX0sYWRkRWxlbWVudDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09amFbdF0mJihqYVt0XT17bmFtZTp0LHR5cGU6UGEudHlwZSxkb2NSZWY6UGEuZG9jUmVmfSxvLmluZm8oIkFkZGVkIG5ldyByZXF1aXJlbWVudDogIix0KSksUGE9e30samFbdF19LGdldEVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGphfSxzZXROZXdFbGVtZW50VHlwZTpmdW5jdGlvbih0KXt2b2lkIDAhPT1QYSYmKFBhLnR5cGU9dCl9LHNldE5ld0VsZW1lbnREb2NSZWY6ZnVuY3Rpb24odCl7dm9pZCAwIT09UGEmJihQYS5kb2NSZWY9dCl9LGFkZFJlbGF0aW9uc2hpcDpmdW5jdGlvbih0LGUsbil7SWEucHVzaCh7dHlwZTp0LHNyYzplLGRzdDpufSl9LGdldFJlbGF0aW9uc2hpcHM6ZnVuY3Rpb24oKXtyZXR1cm4gSWF9LGNsZWFyOmZ1bmN0aW9uKCl7SWE9W10sUmE9e30sRmE9e30sUGE9e30samE9e319fSx6YT17Q09OVEFJTlM6ImNvbnRhaW5zIixBUlJPVzoiYXJyb3cifSxVYT16YSwkYT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsemEuQ09OVEFJTlMrIl9saW5lX2VuZGluZyIpLmF0dHIoInJlZlgiLDApLmF0dHIoInJlZlkiLGUubGluZV9oZWlnaHQvMikuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgiZyIpO24uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJjeSIsZS5saW5lX2hlaWdodC8yKS5hdHRyKCJyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoImZpbGwiLCJub25lIiksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLGUubGluZV9oZWlnaHQpLmF0dHIoInkxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInkyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksbi5hcHBlbmQoImxpbmUiKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLGUubGluZV9oZWlnaHQpLmF0dHIoIngxIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoIngyIixlLmxpbmVfaGVpZ2h0LzIpLmF0dHIoInN0cm9rZS13aWR0aCIsMSksdC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIix6YS5BUlJPVysiX2xpbmVfZW5kaW5nIikuYXR0cigicmVmWCIsZS5saW5lX2hlaWdodCkuYXR0cigicmVmWSIsLjUqZS5saW5lX2hlaWdodCkuYXR0cigibWFya2VyV2lkdGgiLGUubGluZV9oZWlnaHQpLmF0dHIoIm1hcmtlckhlaWdodCIsZS5saW5lX2hlaWdodCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwXG4gICAgICBMIi5jb25jYXQoZS5saW5lX2hlaWdodCwiLCIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LzIsIlxuICAgICAgTSIpLmNvbmNhdChlLmxpbmVfaGVpZ2h0LCIsIikuY29uY2F0KGUubGluZV9oZWlnaHQvMiwiXG4gICAgICBMMCwiKS5jb25jYXQoZS5saW5lX2hlaWdodCkpLmF0dHIoInN0cm9rZS13aWR0aCIsMSl9LHFhPXt9LFdhPTAsSGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCIjIitlKS5hdHRyKCJjbGFzcyIsInJlcSByZXFCb3giKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIscWEucmVjdF9taW5fd2lkdGgrInB4IikuYXR0cigiaGVpZ2h0IixxYS5yZWN0X21pbl9oZWlnaHQrInB4Iil9LFZhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1xYS5yZWN0X21pbl93aWR0aC8yLGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCByZXFUaXRsZSIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixxYS5yZWN0X3BhZGRpbmcpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MDtuLmZvckVhY2goKGZ1bmN0aW9uKHQpezA9PWE/aS5hcHBlbmQoInRzcGFuIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IixxYS5yZWN0X21pbl93aWR0aC8yKS5hdHRyKCJkeSIsMCkudGV4dCh0KTppLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLHFhLnJlY3RfbWluX3dpZHRoLzIpLmF0dHIoImR5IiwuNzUqcWEubGluZV9oZWlnaHQpLnRleHQodCksYSsrfSkpO3ZhciBvPTEuNSpxYS5yZWN0X3BhZGRpbmcrYSpxYS5saW5lX2hlaWdodCouNzU7cmV0dXJuIHQuYXBwZW5kKCJsaW5lIikuYXR0cigiY2xhc3MiLCJyZXEtdGl0bGUtbGluZSIpLmF0dHIoIngxIiwiMCIpLmF0dHIoIngyIixxYS5yZWN0X21pbl93aWR0aCkuYXR0cigieTEiLG8pLmF0dHIoInkyIixvKSx7dGl0bGVOb2RlOmkseTpvfX0sR2E9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbCIpLmF0dHIoImlkIixlKS5hdHRyKCJ4IixxYS5yZWN0X3BhZGRpbmcpLmF0dHIoInkiLHIpLmF0dHIoImRvbWluYW50LWJhc2VsaW5lIiwiaGFuZ2luZyIpLGE9MCxvPVtdO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDtlPjMwJiZhPDM7KXt2YXIgbj10LnN1YnN0cmluZygwLDMwKTtlPSh0PXQuc3Vic3RyaW5nKDMwLHQubGVuZ3RoKSkubGVuZ3RoLG9bby5sZW5ndGhdPW4sYSsrfWlmKDM9PWEpe3ZhciByPW9bby5sZW5ndGgtMV07b1tvLmxlbmd0aC0xXT1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTQpKyIuLi4ifWVsc2Ugb1tvLmxlbmd0aF09dDthPTB9KSksby5mb3JFYWNoKChmdW5jdGlvbih0KXtpLmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixxYS5yZWN0X3BhZGRpbmcpLmF0dHIoImR5IixxYS5saW5lX2hlaWdodCkudGV4dCh0KX0pKSxpfSxYYT1mdW5jdGlvbih0LGUsbixyKXt2YXIgaT1uLmVkZ2UoWmEoZS5zcmMpLFphKGUuZHN0KSksYT1PYmplY3QodS5saW5lKSgpLngoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSkueSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKSxvPXQuaW5zZXJ0KCJwYXRoIiwiIyIrcikuYXR0cigiY2xhc3MiLCJlciByZWxhdGlvbnNoaXBMaW5lIikuYXR0cigiZCIsYShpLnBvaW50cykpLmF0dHIoImZpbGwiLCJub25lIik7ZS50eXBlPT1ZYS5SZWxhdGlvbnNoaXBzLkNPTlRBSU5TP28uYXR0cigibWFya2VyLXN0YXJ0IiwidXJsKCIrbnQuZ2V0VXJsKHFhLmFycm93TWFya2VyQWJzb2x1dGUpKyIjIitlLnR5cGUrIl9saW5lX2VuZGluZykiKTooby5hdHRyKCJzdHJva2UtZGFzaGFycmF5IiwiMTAsNyIpLG8uYXR0cigibWFya2VyLWVuZCIsInVybCgiK250LmdldFVybChxYS5hcnJvd01hcmtlckFic29sdXRlKSsiIyIrVWEuQVJST1crIl9saW5lX2VuZGluZykiKSksZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ZS5ub2RlKCkuZ2V0VG90YWxMZW5ndGgoKSxhPWUubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoLjUqaSksbz0icmVsIitXYTtXYSsrO3ZhciBzPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJyZXEgcmVsYXRpb25zaGlwTGFiZWwiKS5hdHRyKCJpZCIsbykuYXR0cigieCIsYS54KS5hdHRyKCJ5IixhLnkpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS50ZXh0KHIpLm5vZGUoKS5nZXRCQm94KCk7dC5pbnNlcnQoInJlY3QiLCIjIitvKS5hdHRyKCJjbGFzcyIsInJlcSByZXFMYWJlbEJveCIpLmF0dHIoIngiLGEueC1zLndpZHRoLzIpLmF0dHIoInkiLGEueS1zLmhlaWdodC8yKS5hdHRyKCJ3aWR0aCIscy53aWR0aCkuYXR0cigiaGVpZ2h0IixzLmhlaWdodCkuYXR0cigiZmlsbCIsIndoaXRlIikuYXR0cigiZmlsbC1vcGFjaXR5IiwiODUlIil9KHQsbywwLCI8PCIuY29uY2F0KGUudHlwZSwiPj4iKSl9LFphPWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1xzL2csIiIpLnJlcGxhY2UoL1wuL2csIl8iKX0sS2E9ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dClmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKXFhW2Vbbl1dPXRbZVtuXV19LFFhPWZ1bmN0aW9uKHQsZSl7RGEucGFyc2VyLnl5PVlhLERhLnBhcnNlci55eS5jbGVhcigpLERhLnBhcnNlci5wYXJzZSh0KTt2YXIgbj1PYmplY3QodS5zZWxlY3QpKCJbaWQ9JyIuY29uY2F0KGUsIiddIikpOyRhKG4scWEpO3ZhciByLGksYSxzPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiExLGNvbXBvdW5kOiExLGRpcmVjdGVkOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6cWEubGF5b3V0RGlyZWN0aW9uLG1hcmdpbng6MjAsbWFyZ2lueToyMCxub2Rlc2VwOjEwMCxlZGdlc2VwOjEwMCxyYW5rc2VwOjEwMH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksYz1ZYS5nZXRSZXF1aXJlbWVudHMoKSxsPVlhLmdldEVsZW1lbnRzKCksaD1ZYS5nZXRSZWxhdGlvbnNoaXBzKCk7cj1jLGk9cyxhPW4sT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9clt0XTt0PVphKHQpLG8uaW5mbygiQWRkZWQgbmV3IHJlcXVpcmVtZW50OiAiLHQpO3ZhciBuPWEuYXBwZW5kKCJnIikuYXR0cigiaWQiLHQpLHM9SGEobiwicmVxLSIrdCksYz1bXSx1PVZhKG4sdCsiX3RpdGxlIixbIjw8Ii5jb25jYXQoZS50eXBlLCI+PiIpLCIiLmNvbmNhdChlLm5hbWUpXSk7Yy5wdXNoKHUudGl0bGVOb2RlKTt2YXIgbD1HYShuLHQrIl9ib2R5IixbIklkOiAiLmNvbmNhdChlLmlkKSwiVGV4dDogIi5jb25jYXQoZS50ZXh0KSwiUmlzazogIi5jb25jYXQoZS5yaXNrKSwiVmVyaWZpY2F0aW9uOiAiLmNvbmNhdChlLnZlcmlmeU1ldGhvZCldLHUueSk7Yy5wdXNoKGwpO3ZhciBoPXMubm9kZSgpLmdldEJCb3goKTtpLnNldE5vZGUodCx7d2lkdGg6aC53aWR0aCxoZWlnaHQ6aC5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOnR9KX0pKSxmdW5jdGlvbih0LGUsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9dFtyXSxhPVphKHIpLG89bi5hcHBlbmQoImciKS5hdHRyKCJpZCIsYSkscz0iZWxlbWVudC0iK2EsYz1IYShvLHMpLHU9W10sbD1WYShvLHMrIl90aXRsZSIsWyI8PEVsZW1lbnQ+PiIsIiIuY29uY2F0KHIpXSk7dS5wdXNoKGwudGl0bGVOb2RlKTt2YXIgaD1HYShvLHMrIl9ib2R5IixbIlR5cGU6ICIuY29uY2F0KGkudHlwZXx8Ik5vdCBTcGVjaWZpZWQiKSwiRG9jIFJlZjogIi5jb25jYXQoaS5kb2NSZWZ8fCJOb25lIildLGwueSk7dS5wdXNoKGgpO3ZhciBmPWMubm9kZSgpLmdldEJCb3goKTtlLnNldE5vZGUoYSx7d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHQsc2hhcGU6InJlY3QiLGlkOmF9KX0pKX0obCxzLG4pLGZ1bmN0aW9uKHQsZSl7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1aYSh0LnNyYykscj1aYSh0LmRzdCk7ZS5zZXRFZGdlKG4scix7cmVsYXRpb25zaGlwOnR9KX0pKX0oaCxzKSxCZS5hLmxheW91dChzKSxmdW5jdGlvbih0LGUpe2Uubm9kZXMoKS5mb3JFYWNoKChmdW5jdGlvbihuKXt2b2lkIDAhPT1uJiZ2b2lkIDAhPT1lLm5vZGUobikmJih0LnNlbGVjdCgiIyIrbiksdC5zZWxlY3QoIiMiK24pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhlLm5vZGUobikueC1lLm5vZGUobikud2lkdGgvMikrIiwiKyhlLm5vZGUobikueS1lLm5vZGUobikuaGVpZ2h0LzIpKyIgKSIpKX0pKX0obixzKSxoLmZvckVhY2goKGZ1bmN0aW9uKHQpe1hhKG4sdCxzLGUpfSkpO3ZhciBmPXFhLnJlY3RfcGFkZGluZyxkPW4ubm9kZSgpLmdldEJCb3goKSxwPWQud2lkdGgrMipmLHk9ZC5oZWlnaHQrMipmO3RlKG4seSxwLHFhLnVzZU1heFdpZHRoKSxuLmF0dHIoInZpZXdCb3giLCIiLmNvbmNhdChkLngtZiwiICIpLmNvbmNhdChkLnktZiwiICIpLmNvbmNhdChwLCIgIikuY29uY2F0KHkpKX0sSmE9bigyKSx0bz1uLm4oSmEpLGVvPXZvaWQgMCxubz17fSxybz1bXSxpbz1bXSxhbz0iIixvbz0hMSxzbz0hMSxjbz0hMSx1bz1mdW5jdGlvbih0LGUsbil7dmFyIHI9bm9bdF07ciYmZT09PXIubmFtZSYmbnVsbD09bnx8KG51bGwhPW4mJm51bGwhPW4udGV4dHx8KG49e3RleHQ6ZSx3cmFwOm51bGx9KSxub1t0XT17bmFtZTplLGRlc2NyaXB0aW9uOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAscHJldkFjdG9yOmVvfSxlbyYmbm9bZW9dJiYobm9bZW9dLm5leHRBY3Rvcj10KSxlbz10KX0sbG89ZnVuY3Rpb24odCl7dmFyIGUsbj0wO2ZvcihlPTA7ZTxyby5sZW5ndGg7ZSsrKXJvW2VdLnR5cGU9PT1wby5BQ1RJVkVfU1RBUlQmJnJvW2VdLmZyb20uYWN0b3I9PT10JiZuKysscm9bZV0udHlwZT09PXBvLkFDVElWRV9FTkQmJnJvW2VdLmZyb20uYWN0b3I9PT10JiZuLS07cmV0dXJuIG59LGhvPWZ1bmN0aW9uKHQsZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt0ZXh0OnZvaWQgMCx3cmFwOnZvaWQgMH0scj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZihyPT09cG8uQUNUSVZFX0VORCl7dmFyIGk9bG8odC5hY3Rvcik7aWYoaTwxKXt2YXIgYT1uZXcgRXJyb3IoIlRyeWluZyB0byBpbmFjdGl2YXRlIGFuIGluYWN0aXZlIHBhcnRpY2lwYW50ICgiK3QuYWN0b3IrIikiKTt0aHJvdyBhLmhhc2g9e3RleHQ6Ii0+Pi0iLHRva2VuOiItPj4tIixsaW5lOiIxIixsb2M6e2ZpcnN0X2xpbmU6MSxsYXN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MSxsYXN0X2NvbHVtbjoxfSxleHBlY3RlZDpbIidBQ1RJVkVfUEFSVElDSVBBTlQnIl19LGF9fXJldHVybiByby5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAsdHlwZTpyfSksITB9LGZvPWZ1bmN0aW9uKCl7cmV0dXJuIGNvfSxwbz17U09MSUQ6MCxET1RURUQ6MSxOT1RFOjIsU09MSURfQ1JPU1M6MyxET1RURURfQ1JPU1M6NCxTT0xJRF9PUEVOOjUsRE9UVEVEX09QRU46NixMT09QX1NUQVJUOjEwLExPT1BfRU5EOjExLEFMVF9TVEFSVDoxMixBTFRfRUxTRToxMyxBTFRfRU5EOjE0LE9QVF9TVEFSVDoxNSxPUFRfRU5EOjE2LEFDVElWRV9TVEFSVDoxNyxBQ1RJVkVfRU5EOjE4LFBBUl9TVEFSVDoxOSxQQVJfQU5EOjIwLFBBUl9FTkQ6MjEsUkVDVF9TVEFSVDoyMixSRUNUX0VORDoyMyxTT0xJRF9QT0lOVDoyNCxET1RURURfUE9JTlQ6MjV9LHlvPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj17YWN0b3I6dCxwbGFjZW1lbnQ6ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXB9LGk9W10uY29uY2F0KHQsdCk7aW8ucHVzaChyKSxyby5wdXNoKHtmcm9tOmlbMF0sdG86aVsxXSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAsdHlwZTpwby5OT1RFLHBsYWNlbWVudDplfSl9LGdvPWZ1bmN0aW9uKHQpe2FvPXQudGV4dCxvbz12b2lkIDA9PT10LndyYXAmJmZvKCl8fCEhdC53cmFwfSxtbz17YWRkQWN0b3I6dW8sYWRkTWVzc2FnZTpmdW5jdGlvbih0LGUsbixyKXtyby5wdXNoKHtmcm9tOnQsdG86ZSxtZXNzYWdlOm4udGV4dCx3cmFwOnZvaWQgMD09PW4ud3JhcCYmZm8oKXx8ISFuLndyYXAsYW5zd2VyOnJ9KX0sYWRkU2lnbmFsOmhvLGF1dG9XcmFwOmZvLHNldFdyYXA6ZnVuY3Rpb24odCl7Y289dH0sZW5hYmxlU2VxdWVuY2VOdW1iZXJzOmZ1bmN0aW9uKCl7c289ITB9LHNob3dTZXF1ZW5jZU51bWJlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gc299LGdldE1lc3NhZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIHJvfSxnZXRBY3RvcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbm99LGdldEFjdG9yOmZ1bmN0aW9uKHQpe3JldHVybiBub1t0XX0sZ2V0QWN0b3JLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKG5vKX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXtyZXR1cm4gYW99LHBhcnNlRGlyZWN0aXZlOmZ1bmN0aW9uKHQsZSxuKXt5Yy5wYXJzZURpcmVjdGl2ZSh0aGlzLHQsZSxuKX0sZ2V0Q29uZmlnOmZ1bmN0aW9uKCl7cmV0dXJuIGhlKCkuc2VxdWVuY2V9LGdldFRpdGxlV3JhcHBlZDpmdW5jdGlvbigpe3JldHVybiBvb30sY2xlYXI6ZnVuY3Rpb24oKXtubz17fSxybz1bXX0scGFyc2VNZXNzYWdlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHJpbSgpLG49e3RleHQ6ZS5yZXBsYWNlKC9eWzpdPyg/Om5vKT93cmFwOi8sIiIpLnRyaW0oKSx3cmFwOm51bGwhPT1lLm1hdGNoKC9eWzpdP3dyYXA6Lyl8fG51bGw9PT1lLm1hdGNoKC9eWzpdP25vd3JhcDovKSYmdm9pZCAwfTtyZXR1cm4gby5kZWJ1ZygicGFyc2VNZXNzYWdlOiIsbiksbn0sTElORVRZUEU6cG8sQVJST1dUWVBFOntGSUxMRUQ6MCxPUEVOOjF9LFBMQUNFTUVOVDp7TEVGVE9GOjAsUklHSFRPRjoxLE9WRVI6Mn0sYWRkTm90ZTp5byxzZXRUaXRsZTpnbyxhcHBseTpmdW5jdGlvbiB0KGUpe2lmKGUgaW5zdGFuY2VvZiBBcnJheSllLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QoZSl9KSk7ZWxzZSBzd2l0Y2goZS50eXBlKXtjYXNlImFkZEFjdG9yIjp1byhlLmFjdG9yLGUuYWN0b3IsZS5kZXNjcmlwdGlvbik7YnJlYWs7Y2FzZSJhY3RpdmVTdGFydCI6Y2FzZSJhY3RpdmVFbmQiOmhvKGUuYWN0b3Isdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UiYWRkTm90ZSI6eW8oZS5hY3RvcixlLnBsYWNlbWVudCxlLnRleHQpO2JyZWFrO2Nhc2UiYWRkTWVzc2FnZSI6aG8oZS5mcm9tLGUudG8sZS5tc2csZS5zaWduYWxUeXBlKTticmVhaztjYXNlImxvb3BTdGFydCI6aG8odm9pZCAwLHZvaWQgMCxlLmxvb3BUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJsb29wRW5kIjpobyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxlLnNpZ25hbFR5cGUpO2JyZWFrO2Nhc2UicmVjdFN0YXJ0Ijpobyh2b2lkIDAsdm9pZCAwLGUuY29sb3IsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInJlY3RFbmQiOmhvKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJvcHRTdGFydCI6aG8odm9pZCAwLHZvaWQgMCxlLm9wdFRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlIm9wdEVuZCI6aG8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKTticmVhaztjYXNlImFsdFN0YXJ0IjpjYXNlImVsc2UiOmhvKHZvaWQgMCx2b2lkIDAsZS5hbHRUZXh0LGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJhbHRFbmQiOmhvKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGUuc2lnbmFsVHlwZSk7YnJlYWs7Y2FzZSJzZXRUaXRsZSI6Z28oZS50ZXh0KTticmVhaztjYXNlInBhclN0YXJ0IjpjYXNlImFuZCI6aG8odm9pZCAwLHZvaWQgMCxlLnBhclRleHQsZS5zaWduYWxUeXBlKTticmVhaztjYXNlInBhckVuZCI6aG8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZS5zaWduYWxUeXBlKX19fSx2bz1mdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJyZWN0Iik7cmV0dXJuIG4uYXR0cigieCIsZS54KSxuLmF0dHIoInkiLGUueSksbi5hdHRyKCJmaWxsIixlLmZpbGwpLG4uYXR0cigic3Ryb2tlIixlLnN0cm9rZSksbi5hdHRyKCJ3aWR0aCIsZS53aWR0aCksbi5hdHRyKCJoZWlnaHQiLGUuaGVpZ2h0KSxuLmF0dHIoInJ4IixlLnJ4KSxuLmF0dHIoInJ5IixlLnJ5KSx2b2lkIDAhPT1lLmNsYXNzJiZuLmF0dHIoImNsYXNzIixlLmNsYXNzKSxufSxibz1mdW5jdGlvbih0LGUpe3ZhciBuPTAscj0wLGk9ZS50ZXh0LnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxhPVtdLG89MCxzPWZ1bmN0aW9uKCl7cmV0dXJuIGUueX07aWYodm9pZCAwIT09ZS52YWxpZ24mJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmZS50ZXh0TWFyZ2luPjApc3dpdGNoKGUudmFsaWduKXtjYXNlInRvcCI6Y2FzZSJzdGFydCI6cz1mdW5jdGlvbigpe3JldHVybiBNYXRoLnJvdW5kKGUueStlLnRleHRNYXJnaW4pfTticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrKG4rcitlLnRleHRNYXJnaW4pLzIpfTticmVhaztjYXNlImJvdHRvbSI6Y2FzZSJlbmQiOnM9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yb3VuZChlLnkrKG4rcisyKmUudGV4dE1hcmdpbiktZS50ZXh0TWFyZ2luKX19aWYodm9pZCAwIT09ZS5hbmNob3ImJnZvaWQgMCE9PWUudGV4dE1hcmdpbiYmdm9pZCAwIT09ZS53aWR0aClzd2l0Y2goZS5hbmNob3Ipe2Nhc2UibGVmdCI6Y2FzZSJzdGFydCI6ZS54PU1hdGgucm91bmQoZS54K2UudGV4dE1hcmdpbiksZS5hbmNob3I9InN0YXJ0IixlLmRvbWluYW50QmFzZWxpbmU9InRleHQtYWZ0ZXItZWRnZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIjticmVhaztjYXNlIm1pZGRsZSI6Y2FzZSJjZW50ZXIiOmUueD1NYXRoLnJvdW5kKGUueCtlLndpZHRoLzIpLGUuYW5jaG9yPSJtaWRkbGUiLGUuZG9taW5hbnRCYXNlbGluZT0ibWlkZGxlIixlLmFsaWdubWVudEJhc2VsaW5lPSJtaWRkbGUiO2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiZW5kIjplLng9TWF0aC5yb3VuZChlLngrZS53aWR0aC1lLnRleHRNYXJnaW4pLGUuYW5jaG9yPSJlbmQiLGUuZG9taW5hbnRCYXNlbGluZT0idGV4dC1iZWZvcmUtZWRnZSIsZS5hbGlnbm1lbnRCYXNlbGluZT0ibWlkZGxlIn1mb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9aVtjXTt2b2lkIDAhPT1lLnRleHRNYXJnaW4mJjA9PT1lLnRleHRNYXJnaW4mJnZvaWQgMCE9PWUuZm9udFNpemUmJihvPWMqZS5mb250U2l6ZSk7dmFyIGw9dC5hcHBlbmQoInRleHQiKTtpZihsLmF0dHIoIngiLGUueCksbC5hdHRyKCJ5IixzKCkpLHZvaWQgMCE9PWUuYW5jaG9yJiZsLmF0dHIoInRleHQtYW5jaG9yIixlLmFuY2hvcikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLGUuZG9taW5hbnRCYXNlbGluZSkuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIixlLmFsaWdubWVudEJhc2VsaW5lKSx2b2lkIDAhPT1lLmZvbnRGYW1pbHkmJmwuc3R5bGUoImZvbnQtZmFtaWx5IixlLmZvbnRGYW1pbHkpLHZvaWQgMCE9PWUuZm9udFNpemUmJmwuc3R5bGUoImZvbnQtc2l6ZSIsZS5mb250U2l6ZSksdm9pZCAwIT09ZS5mb250V2VpZ2h0JiZsLnN0eWxlKCJmb250LXdlaWdodCIsZS5mb250V2VpZ2h0KSx2b2lkIDAhPT1lLmZpbGwmJmwuYXR0cigiZmlsbCIsZS5maWxsKSx2b2lkIDAhPT1lLmNsYXNzJiZsLmF0dHIoImNsYXNzIixlLmNsYXNzKSx2b2lkIDAhPT1lLmR5P2wuYXR0cigiZHkiLGUuZHkpOjAhPT1vJiZsLmF0dHIoImR5IixvKSxlLnRzcGFuKXt2YXIgaD1sLmFwcGVuZCgidHNwYW4iKTtoLmF0dHIoIngiLGUueCksdm9pZCAwIT09ZS5maWxsJiZoLmF0dHIoImZpbGwiLGUuZmlsbCksaC50ZXh0KHUpfWVsc2UgbC50ZXh0KHUpO3ZvaWQgMCE9PWUudmFsaWduJiZ2b2lkIDAhPT1lLnRleHRNYXJnaW4mJmUudGV4dE1hcmdpbj4wJiYocis9KGwuX2dyb3Vwc3x8bClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodCxuPXIpLGEucHVzaChsKX1yZXR1cm4gYX0seG89ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksYSxvLHM9dC5hcHBlbmQoInBvbHlnb24iKTtyZXR1cm4gcy5hdHRyKCJwb2ludHMiLChuPWUueCxyPWUueSxpPWUud2lkdGgsYT1lLmhlaWdodCxuKyIsIityKyIgIisobitpKSsiLCIrcisiICIrKG4raSkrIiwiKyhyK2EtKG89NykpKyIgIisobitpLTEuMipvKSsiLCIrKHIrYSkrIiAiK24rIiwiKyhyK2EpKSkscy5hdHRyKCJjbGFzcyIsImxhYmVsQm94IiksZS55PWUueStlLmhlaWdodC8yLGJvKHQsZSksc30sX289LTEsa289ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCxmaWxsOnZvaWQgMCxhbmNob3I6dm9pZCAwLHN0eWxlOiIjNjY2Iix3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCx0ZXh0TWFyZ2luOjAscng6MCxyeTowLHRzcGFuOiEwLHZhbGlnbjp2b2lkIDB9fSx3bz1mdW5jdGlvbigpe3JldHVybnt4OjAseTowLGZpbGw6IiNFREYyQUUiLHN0cm9rZToiIzY2NiIsd2lkdGg6MTAwLGFuY2hvcjoic3RhcnQiLGhlaWdodDoxMDAscng6MCxyeTowfX0sVG89ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLGksYSxvLHMpe3IoZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaStvLzIrNSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCh0KSxzKX1mdW5jdGlvbiBlKHQsZSxuLGksYSxvLHMsYyl7Zm9yKHZhciB1PWMuYWN0b3JGb250U2l6ZSxsPWMuYWN0b3JGb250RmFtaWx5LGg9Yy5hY3RvckZvbnRXZWlnaHQsZj10LnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqdS11KihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsdSkuc3R5bGUoImZvbnQtd2VpZ2h0IixoKS5zdHlsZSgiZm9udC1mYW1pbHkiLGwpO3kuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLG4rYS8yKS5hdHRyKCJkeSIscCkudGV4dChmW2RdKSx5LmF0dHIoInkiLGkrby8yKS5hdHRyKCJkb21pbmFudC1iYXNlbGluZSIsImNlbnRyYWwiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJjZW50cmFsIikscih5LHMpfX1mdW5jdGlvbiBuKHQsbixpLGEsbyxzLGMsdSl7dmFyIGw9bi5hcHBlbmQoInN3aXRjaCIpLGg9bC5hcHBlbmQoImZvcmVpZ25PYmplY3QiKS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKS5hdHRyKCJ3aWR0aCIsbykuYXR0cigiaGVpZ2h0IixzKS5hcHBlbmQoInhodG1sOmRpdiIpLnN0eWxlKCJkaXNwbGF5IiwidGFibGUiKS5zdHlsZSgiaGVpZ2h0IiwiMTAwJSIpLnN0eWxlKCJ3aWR0aCIsIjEwMCUiKTtoLmFwcGVuZCgiZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKWUuaGFzT3duUHJvcGVydHkobikmJnQuYXR0cihuLGVbbl0pfXJldHVybiBmdW5jdGlvbihyKXtyZXR1cm4iZm8iPT09ci50ZXh0UGxhY2VtZW50P246Im9sZCI9PT1yLnRleHRQbGFjZW1lbnQ/dDplfX0oKSxFbz17ZHJhd1JlY3Q6dm8sZHJhd1RleHQ6Ym8sZHJhd0xhYmVsOnhvLGRyYXdBY3RvcjpmdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K2Uud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7MD09PWUueSYmKF9vKyssaS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsImFjdG9yIitfbykuYXR0cigieDEiLHIpLmF0dHIoInkxIiw1KS5hdHRyKCJ4MiIscikuYXR0cigieTIiLDJlMykuYXR0cigiY2xhc3MiLCJhY3Rvci1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMC41cHgiKS5hdHRyKCJzdHJva2UiLCIjOTk5IikpO3ZhciBhPXdvKCk7YS54PWUueCxhLnk9ZS55LGEuZmlsbD0iI2VhZWFlYSIsYS53aWR0aD1lLndpZHRoLGEuaGVpZ2h0PWUuaGVpZ2h0LGEuY2xhc3M9ImFjdG9yIixhLnJ4PTMsYS5yeT0zLHZvKGksYSksVG8obikoZS5kZXNjcmlwdGlvbixpLGEueCxhLnksYS53aWR0aCxhLmhlaWdodCx7Y2xhc3M6ImFjdG9yIn0sbil9LGFuY2hvckVsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwZW5kKCJnIil9LGRyYXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIGE9d28oKSxvPWUuYW5jaG9yZWQ7YS54PWUuc3RhcnR4LGEueT1lLnN0YXJ0eSxhLmNsYXNzPSJhY3RpdmF0aW9uIitpJTMsYS53aWR0aD1lLnN0b3B4LWUuc3RhcnR4LGEuaGVpZ2h0PW4tZS5zdGFydHksdm8obyxhKX0sZHJhd0xvb3A6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ci5ib3hNYXJnaW4sYT1yLmJveFRleHRNYXJnaW4sbz1yLmxhYmVsQm94SGVpZ2h0LHM9ci5sYWJlbEJveFdpZHRoLGM9ci5tZXNzYWdlRm9udEZhbWlseSx1PXIubWVzc2FnZUZvbnRTaXplLGw9ci5tZXNzYWdlRm9udFdlaWdodCxoPXQuYXBwZW5kKCJnIiksZj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gaC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsdCkuYXR0cigieTEiLGUpLmF0dHIoIngyIixuKS5hdHRyKCJ5MiIscikuYXR0cigiY2xhc3MiLCJsb29wTGluZSIpfTtmKGUuc3RhcnR4LGUuc3RhcnR5LGUuc3RvcHgsZS5zdGFydHkpLGYoZS5zdG9weCxlLnN0YXJ0eSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdG9weSxlLnN0b3B4LGUuc3RvcHkpLGYoZS5zdGFydHgsZS5zdGFydHksZS5zdGFydHgsZS5zdG9weSksdm9pZCAwIT09ZS5zZWN0aW9ucyYmZS5zZWN0aW9ucy5mb3JFYWNoKChmdW5jdGlvbih0KXtmKGUuc3RhcnR4LHQueSxlLnN0b3B4LHQueSkuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIzLCAzIil9KSk7dmFyIGQ9a28oKTtkLnRleHQ9bixkLng9ZS5zdGFydHgsZC55PWUuc3RhcnR5LGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQud2lkdGg9c3x8NTAsZC5oZWlnaHQ9b3x8MjAsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibGFiZWxUZXh0Iix4byhoLGQpLChkPWtvKCkpLnRleHQ9ZS50aXRsZSxkLng9ZS5zdGFydHgrcy8yKyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnN0YXJ0eStpK2EsZC5hbmNob3I9Im1pZGRsZSIsZC52YWxpZ249Im1pZGRsZSIsZC50ZXh0TWFyZ2luPWEsZC5jbGFzcz0ibG9vcFRleHQiLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ITA7dmFyIHA9Ym8oaCxkKTtyZXR1cm4gdm9pZCAwIT09ZS5zZWN0aW9uVGl0bGVzJiZlLnNlY3Rpb25UaXRsZXMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtpZih0Lm1lc3NhZ2Upe2QudGV4dD10Lm1lc3NhZ2UsZC54PWUuc3RhcnR4KyhlLnN0b3B4LWUuc3RhcnR4KS8yLGQueT1lLnNlY3Rpb25zW25dLnkraSthLGQuY2xhc3M9Imxvb3BUZXh0IixkLmFuY2hvcj0ibWlkZGxlIixkLnZhbGlnbj0ibWlkZGxlIixkLnRzcGFuPSExLGQuZm9udEZhbWlseT1jLGQuZm9udFNpemU9dSxkLmZvbnRXZWlnaHQ9bCxkLndyYXA9ZS53cmFwLHA9Ym8oaCxkKTt2YXIgcj1NYXRoLnJvdW5kKHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC5fZ3JvdXBzfHx0KVswXVswXS5nZXRCQm94KCkuaGVpZ2h0fSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKTtlLnNlY3Rpb25zW25dLmhlaWdodCs9ci0oaSthKX19KSksZS5oZWlnaHQ9TWF0aC5yb3VuZChlLnN0b3B5LWUuc3RhcnR5KSxofSxkcmF3QmFja2dyb3VuZFJlY3Q6ZnVuY3Rpb24odCxlKXt2byh0LHt4OmUuc3RhcnR4LHk6ZS5zdGFydHksd2lkdGg6ZS5zdG9weC1lLnN0YXJ0eCxoZWlnaHQ6ZS5zdG9weS1lLnN0YXJ0eSxmaWxsOmUuZmlsbCxjbGFzczoicmVjdCJ9KS5sb3dlcigpfSxpbnNlcnRBcnJvd0hlYWQ6ZnVuY3Rpb24odCl7dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiYXJyb3doZWFkIikuYXR0cigicmVmWCIsOSkuYXR0cigicmVmWSIsNSkuYXR0cigibWFya2VyVW5pdHMiLCJ1c2VyU3BhY2VPblVzZSIpLmF0dHIoIm1hcmtlcldpZHRoIiwxMikuYXR0cigibWFya2VySGVpZ2h0IiwxMikuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDAgMCBMIDEwIDUgTCAwIDEwIHoiKX0saW5zZXJ0QXJyb3dGaWxsZWRIZWFkOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImZpbGxlZC1oZWFkIikuYXR0cigicmVmWCIsMTgpLmF0dHIoInJlZlkiLDcpLmF0dHIoIm1hcmtlcldpZHRoIiwyMCkuYXR0cigibWFya2VySGVpZ2h0IiwyOCkuYXR0cigib3JpZW50IiwiYXV0byIpLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNIDE4LDcgTDksMTMgTDE0LDcgTDksMSBaIil9LGluc2VydFNlcXVlbmNlTnVtYmVyOmZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsInNlcXVlbmNlbnVtYmVyIikuYXR0cigicmVmWCIsMTUpLmF0dHIoInJlZlkiLDE1KS5hdHRyKCJtYXJrZXJXaWR0aCIsNjApLmF0dHIoIm1hcmtlckhlaWdodCIsNDApLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IiwxNSkuYXR0cigiY3kiLDE1KS5hdHRyKCJyIiw2KX0saW5zZXJ0QXJyb3dDcm9zc0hlYWQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5hcHBlbmQoImRlZnMiKS5hcHBlbmQoIm1hcmtlciIpLmF0dHIoImlkIiwiY3Jvc3NoZWFkIikuYXR0cigibWFya2VyV2lkdGgiLDE1KS5hdHRyKCJtYXJrZXJIZWlnaHQiLDgpLmF0dHIoIm9yaWVudCIsImF1dG8iKS5hdHRyKCJyZWZYIiwxNikuYXR0cigicmVmWSIsNCk7ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwiYmxhY2siKS5hdHRyKCJzdHJva2UiLCIjMDAwMDAwIikuc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwLCAwIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigiZCIsIk0gOSwyIFYgNiBMMTYsNCBaIiksZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJmaWxsIiwibm9uZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAwMDAiKS5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjAsIDAiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJkIiwiTSAwLDEgTCA2LDcgTSA2LDEgTCAwLDciKX0sZ2V0VGV4dE9iajprbyxnZXROb3RlUmVjdDp3b307SmEucGFyc2VyLnl5PW1vO3ZhciBDbz17fSxTbz17ZGF0YTp7c3RhcnR4OnZvaWQgMCxzdG9weDp2b2lkIDAsc3RhcnR5OnZvaWQgMCxzdG9weTp2b2lkIDB9LHZlcnRpY2FsUG9zOjAsc2VxdWVuY2VJdGVtczpbXSxhY3RpdmF0aW9uczpbXSxtb2RlbHM6e2dldEhlaWdodDpmdW5jdGlvbigpe3JldHVybiBNYXRoLm1heC5hcHBseShudWxsLDA9PT10aGlzLmFjdG9ycy5sZW5ndGg/WzBdOnRoaXMuYWN0b3JzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpKSsoMD09PXRoaXMubG9vcHMubGVuZ3RoPzA6dGhpcy5sb29wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodHx8MH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSkrKDA9PT10aGlzLm1lc3NhZ2VzLmxlbmd0aD8wOnRoaXMubWVzc2FnZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR8fDB9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2V9KSkpKygwPT09dGhpcy5ub3Rlcy5sZW5ndGg/MDp0aGlzLm5vdGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fHwwfSkpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSkpKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycz1bXSx0aGlzLmxvb3BzPVtdLHRoaXMubWVzc2FnZXM9W10sdGhpcy5ub3Rlcz1bXX0sYWRkQWN0b3I6ZnVuY3Rpb24odCl7dGhpcy5hY3RvcnMucHVzaCh0KX0sYWRkTG9vcDpmdW5jdGlvbih0KXt0aGlzLmxvb3BzLnB1c2godCl9LGFkZE1lc3NhZ2U6ZnVuY3Rpb24odCl7dGhpcy5tZXNzYWdlcy5wdXNoKHQpfSxhZGROb3RlOmZ1bmN0aW9uKHQpe3RoaXMubm90ZXMucHVzaCh0KX0sbGFzdEFjdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0b3JzW3RoaXMuYWN0b3JzLmxlbmd0aC0xXX0sbGFzdExvb3A6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb29wc1t0aGlzLmxvb3BzLmxlbmd0aC0xXX0sbGFzdE1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlc1t0aGlzLm1lc3NhZ2VzLmxlbmd0aC0xXX0sbGFzdE5vdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3Rlc1t0aGlzLm5vdGVzLmxlbmd0aC0xXX0sYWN0b3JzOltdLGxvb3BzOltdLG1lc3NhZ2VzOltdLG5vdGVzOltdfSxpbml0OmZ1bmN0aW9uKCl7dGhpcy5zZXF1ZW5jZUl0ZW1zPVtdLHRoaXMuYWN0aXZhdGlvbnM9W10sdGhpcy5tb2RlbHMuY2xlYXIoKSx0aGlzLmRhdGE9e3N0YXJ0eDp2b2lkIDAsc3RvcHg6dm9pZCAwLHN0YXJ0eTp2b2lkIDAsc3RvcHk6dm9pZCAwfSx0aGlzLnZlcnRpY2FsUG9zPTAsQm8oSmEucGFyc2VyLnl5LmdldENvbmZpZygpKX0sdXBkYXRlVmFsOmZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PXRbZV0/dFtlXT1uOnRbZV09cihuLHRbZV0pfSx1cGRhdGVCb3VuZHM6ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcyxhPTA7ZnVuY3Rpb24gbyhvKXtyZXR1cm4gZnVuY3Rpb24ocyl7YSsrO3ZhciBjPWkuc2VxdWVuY2VJdGVtcy5sZW5ndGgtYSsxO2kudXBkYXRlVmFsKHMsInN0YXJ0eSIsZS1jKkNvLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwocywic3RvcHkiLHIrYypDby5ib3hNYXJnaW4sTWF0aC5tYXgpLGkudXBkYXRlVmFsKFNvLmRhdGEsInN0YXJ0eCIsdC1jKkNvLmJveE1hcmdpbixNYXRoLm1pbiksaS51cGRhdGVWYWwoU28uZGF0YSwic3RvcHgiLG4rYypDby5ib3hNYXJnaW4sTWF0aC5tYXgpLCJhY3RpdmF0aW9uIiE9PW8mJihpLnVwZGF0ZVZhbChzLCJzdGFydHgiLHQtYypDby5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKHMsInN0b3B4IixuK2MqQ28uYm94TWFyZ2luLE1hdGgubWF4KSxpLnVwZGF0ZVZhbChTby5kYXRhLCJzdGFydHkiLGUtYypDby5ib3hNYXJnaW4sTWF0aC5taW4pLGkudXBkYXRlVmFsKFNvLmRhdGEsInN0b3B5IixyK2MqQ28uYm94TWFyZ2luLE1hdGgubWF4KSl9fXRoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKG8oKSksdGhpcy5hY3RpdmF0aW9ucy5mb3JFYWNoKG8oImFjdGl2YXRpb24iKSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKFNvLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoU28uZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChTby5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoU28uZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxuZXdBY3RpdmF0aW9uOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1uW3QuZnJvbS5hY3Rvcl0saT1Ebyh0LmZyb20uYWN0b3IpLmxlbmd0aHx8MCxhPXIueCtyLndpZHRoLzIrKGktMSkqQ28uYWN0aXZhdGlvbldpZHRoLzI7dGhpcy5hY3RpdmF0aW9ucy5wdXNoKHtzdGFydHg6YSxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcysyLHN0b3B4OmErQ28uYWN0aXZhdGlvbldpZHRoLHN0b3B5OnZvaWQgMCxhY3Rvcjp0LmZyb20uYWN0b3IsYW5jaG9yZWQ6RW8uYW5jaG9yRWxlbWVudChlKX0pfSxlbmRBY3RpdmF0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZhdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5hY3Rvcn0pKS5sYXN0SW5kZXhPZih0LmZyb20uYWN0b3IpO3JldHVybiB0aGlzLmFjdGl2YXRpb25zLnNwbGljZShlLDEpWzBdfSxjcmVhdGVMb29wOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnttZXNzYWdlOnZvaWQgMCx3cmFwOiExLHdpZHRoOnZvaWQgMH0sZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMDtyZXR1cm57c3RhcnR4OnZvaWQgMCxzdGFydHk6dGhpcy52ZXJ0aWNhbFBvcyxzdG9weDp2b2lkIDAsc3RvcHk6dm9pZCAwLHRpdGxlOnQubWVzc2FnZSx3cmFwOnQud3JhcCx3aWR0aDp0LndpZHRoLGhlaWdodDowLGZpbGw6ZX19LG5ld0xvb3A6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e21lc3NhZ2U6dm9pZCAwLHdyYXA6ITEsd2lkdGg6dm9pZCAwfSxlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuc2VxdWVuY2VJdGVtcy5wdXNoKHRoaXMuY3JlYXRlTG9vcCh0LGUpKX0sZW5kTG9vcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcXVlbmNlSXRlbXMucG9wKCl9LGFkZFNlY3Rpb25Ub0xvb3A6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZXF1ZW5jZUl0ZW1zLnBvcCgpO2Uuc2VjdGlvbnM9ZS5zZWN0aW9uc3x8W10sZS5zZWN0aW9uVGl0bGVzPWUuc2VjdGlvblRpdGxlc3x8W10sZS5zZWN0aW9ucy5wdXNoKHt5OlNvLmdldFZlcnRpY2FsUG9zKCksaGVpZ2h0OjB9KSxlLnNlY3Rpb25UaXRsZXMucHVzaCh0KSx0aGlzLnNlcXVlbmNlSXRlbXMucHVzaChlKX0sYnVtcFZlcnRpY2FsUG9zOmZ1bmN0aW9uKHQpe3RoaXMudmVydGljYWxQb3M9dGhpcy52ZXJ0aWNhbFBvcyt0LHRoaXMuZGF0YS5zdG9weT10aGlzLnZlcnRpY2FsUG9zfSxnZXRWZXJ0aWNhbFBvczpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZlcnRpY2FsUG9zfSxnZXRCb3VuZHM6ZnVuY3Rpb24oKXtyZXR1cm57Ym91bmRzOnRoaXMuZGF0YSxtb2RlbHM6dGhpcy5tb2RlbHN9fX0sQW89ZnVuY3Rpb24odCl7cmV0dXJue2ZvbnRGYW1pbHk6dC5tZXNzYWdlRm9udEZhbWlseSxmb250U2l6ZTp0Lm1lc3NhZ2VGb250U2l6ZSxmb250V2VpZ2h0OnQubWVzc2FnZUZvbnRXZWlnaHR9fSxNbz1mdW5jdGlvbih0KXtyZXR1cm57Zm9udEZhbWlseTp0Lm5vdGVGb250RmFtaWx5LGZvbnRTaXplOnQubm90ZUZvbnRTaXplLGZvbnRXZWlnaHQ6dC5ub3RlRm9udFdlaWdodH19LE9vPWZ1bmN0aW9uKHQpe3JldHVybntmb250RmFtaWx5OnQuYWN0b3JGb250RmFtaWx5LGZvbnRTaXplOnQuYWN0b3JGb250U2l6ZSxmb250V2VpZ2h0OnQuYWN0b3JGb250V2VpZ2h0fX0sTm89ZnVuY3Rpb24odCxlLG4scil7Zm9yKHZhciBpPTAsYT0wLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIHM9ZVtuW29dXTtzLndpZHRoPXMud2lkdGh8fENvLndpZHRoLHMuaGVpZ2h0PU1hdGgubWF4KHMuaGVpZ2h0fHxDby5oZWlnaHQsQ28uaGVpZ2h0KSxzLm1hcmdpbj1zLm1hcmdpbnx8Q28uYWN0b3JNYXJnaW4scy54PWkrYSxzLnk9cixFby5kcmF3QWN0b3IodCxzLENvKSxTby5pbnNlcnQocy54LHIscy54K3Mud2lkdGgscy5oZWlnaHQpLGkrPXMud2lkdGgsYSs9cy5tYXJnaW4sU28ubW9kZWxzLmFkZEFjdG9yKHMpfVNvLmJ1bXBWZXJ0aWNhbFBvcyhDby5oZWlnaHQpfSxCbz1mdW5jdGlvbih0KXtWdChDbyx0KSx0LmZvbnRGYW1pbHkmJihDby5hY3RvckZvbnRGYW1pbHk9Q28ubm90ZUZvbnRGYW1pbHk9Q28ubWVzc2FnZUZvbnRGYW1pbHk9dC5mb250RmFtaWx5KSx0LmZvbnRTaXplJiYoQ28uYWN0b3JGb250U2l6ZT1Dby5ub3RlRm9udFNpemU9Q28ubWVzc2FnZUZvbnRTaXplPXQuZm9udFNpemUpLHQuZm9udFdlaWdodCYmKENvLmFjdG9yRm9udFdlaWdodD1Dby5ub3RlRm9udFdlaWdodD1Dby5tZXNzYWdlRm9udFdlaWdodD10LmZvbnRXZWlnaHQpfSxEbz1mdW5jdGlvbih0KXtyZXR1cm4gU28uYWN0aXZhdGlvbnMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5hY3Rvcj09PXR9KSl9LExvPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZVt0XSxyPURvKHQpO3JldHVybltyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4odCxlLnN0YXJ0eCl9KSxuLngrbi53aWR0aC8yKSxyLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXgodCxlLnN0b3B4KX0pLG4ueCtuLndpZHRoLzIpXX07ZnVuY3Rpb24gSW8odCxlLG4scixpKXtTby5idW1wVmVydGljYWxQb3Mobik7dmFyIGE9cjtpZihlLmlkJiZlLm1lc3NhZ2UmJnRbZS5pZF0pe3ZhciBzPXRbZS5pZF0ud2lkdGgsYz1BbyhDbyk7ZS5tZXNzYWdlPW5lLndyYXBMYWJlbCgiWyIuY29uY2F0KGUubWVzc2FnZSwiXSIpLHMtMipDby53cmFwUGFkZGluZyxjKSxlLndpZHRoPXMsZS53cmFwPSEwO3ZhciB1PW5lLmNhbGN1bGF0ZVRleHREaW1lbnNpb25zKGUubWVzc2FnZSxjKSxsPU1hdGgubWF4KHUuaGVpZ2h0LENvLmxhYmVsQm94SGVpZ2h0KTthPXIrbCxvLmRlYnVnKCIiLmNvbmNhdChsLCIgLSAiKS5jb25jYXQoZS5tZXNzYWdlKSl9aShlKSxTby5idW1wVmVydGljYWxQb3MoYSl9dmFyIFJvPWZ1bmN0aW9uKHQsZSl7dmFyIG49e307cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYodFtlLnRvXSYmdFtlLmZyb21dKXt2YXIgcj10W2UudG9dO2lmKGUucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0YmJiFyLnByZXZBY3RvcilyZXR1cm47aWYoZS5wbGFjZW1lbnQ9PT1KYS5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0YmJiFyLm5leHRBY3RvcilyZXR1cm47dmFyIGk9dm9pZCAwIT09ZS5wbGFjZW1lbnQsYT0haSxvPWk/TW8oQ28pOkFvKENvKSxzPWUud3JhcD9uZS53cmFwTGFiZWwoZS5tZXNzYWdlLENvLndpZHRoLTIqQ28ud3JhcFBhZGRpbmcsbyk6ZS5tZXNzYWdlLGM9bmUuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMocyxvKS53aWR0aCsyKkNvLndyYXBQYWRkaW5nO2EmJmUuZnJvbT09PXIubmV4dEFjdG9yP25bZS50b109TWF0aC5tYXgobltlLnRvXXx8MCxjKTphJiZlLmZyb209PT1yLnByZXZBY3Rvcj9uW2UuZnJvbV09TWF0aC5tYXgobltlLmZyb21dfHwwLGMpOmEmJmUuZnJvbT09PWUudG8/KG5bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYy8yKSxuW2UudG9dPU1hdGgubWF4KG5bZS50b118fDAsYy8yKSk6ZS5wbGFjZW1lbnQ9PT1KYS5wYXJzZXIueXkuUExBQ0VNRU5ULlJJR0hUT0Y/bltlLmZyb21dPU1hdGgubWF4KG5bZS5mcm9tXXx8MCxjKTplLnBsYWNlbWVudD09PUphLnBhcnNlci55eS5QTEFDRU1FTlQuTEVGVE9GP25bci5wcmV2QWN0b3JdPU1hdGgubWF4KG5bci5wcmV2QWN0b3JdfHwwLGMpOmUucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5PVkVSJiYoci5wcmV2QWN0b3ImJihuW3IucHJldkFjdG9yXT1NYXRoLm1heChuW3IucHJldkFjdG9yXXx8MCxjLzIpKSxyLm5leHRBY3RvciYmKG5bZS5mcm9tXT1NYXRoLm1heChuW2UuZnJvbV18fDAsYy8yKSkpfX0pKSxvLmRlYnVnKCJtYXhNZXNzYWdlV2lkdGhQZXJBY3RvcjoiLG4pLG59LEZvPWZ1bmN0aW9uKHQsZSl7dmFyIG49MDtmb3IodmFyIHIgaW4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9dFtlXTtyLndyYXAmJihyLmRlc2NyaXB0aW9uPW5lLndyYXBMYWJlbChyLmRlc2NyaXB0aW9uLENvLndpZHRoLTIqQ28ud3JhcFBhZGRpbmcsT28oQ28pKSk7dmFyIGk9bmUuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoci5kZXNjcmlwdGlvbixPbyhDbykpO3Iud2lkdGg9ci53cmFwP0NvLndpZHRoOk1hdGgubWF4KENvLndpZHRoLGkud2lkdGgrMipDby53cmFwUGFkZGluZyksci5oZWlnaHQ9ci53cmFwP01hdGgubWF4KGkuaGVpZ2h0LENvLmhlaWdodCk6Q28uaGVpZ2h0LG49TWF0aC5tYXgobixyLmhlaWdodCl9KSksZSl7dmFyIGk9dFtyXTtpZihpKXt2YXIgYT10W2kubmV4dEFjdG9yXTtpZihhKXt2YXIgbz1lW3JdK0NvLmFjdG9yTWFyZ2luLWkud2lkdGgvMi1hLndpZHRoLzI7aS5tYXJnaW49TWF0aC5tYXgobyxDby5hY3Rvck1hcmdpbil9fX1yZXR1cm4gTWF0aC5tYXgobixDby5oZWlnaHQpfSxQbz1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxhPXt9LHM9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7c3dpdGNoKHQuaWQ9bmUucmFuZG9tKHtsZW5ndGg6MTB9KSx0LnR5cGUpe2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX1NUQVJUOmNhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9TVEFSVDpjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfU1RBUlQ6cy5wdXNoKHtpZDp0LmlkLG1zZzp0Lm1lc3NhZ2UsZnJvbTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUix0bzpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUix3aWR0aDowfSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuUEFSX0FORDp0Lm1lc3NhZ2UmJihuPXMucG9wKCksYVtuLmlkXT1uLGFbdC5pZF09bixzLnB1c2gobikpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfRU5EOmNhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkFMVF9FTkQ6Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuT1BUX0VORDpjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfRU5EOm49cy5wb3AoKSxhW24uaWRdPW47YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX1NUQVJUOnZhciBjPWVbdC5mcm9tP3QuZnJvbS5hY3Rvcjp0LnRvLmFjdG9yXSx1PURvKHQuZnJvbT90LmZyb20uYWN0b3I6dC50by5hY3RvcikubGVuZ3RoLGw9Yy54K2Mud2lkdGgvMisodS0xKSpDby5hY3RpdmF0aW9uV2lkdGgvMixoPXtzdGFydHg6bCxzdG9weDpsK0NvLmFjdGl2YXRpb25XaWR0aCxhY3Rvcjp0LmZyb20uYWN0b3IsZW5hYmxlZDohMH07U28uYWN0aXZhdGlvbnMucHVzaChoKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfRU5EOnZhciBmPVNvLmFjdGl2YXRpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuYWN0b3J9KSkubGFzdEluZGV4T2YodC5mcm9tLmFjdG9yKTtkZWxldGUgU28uYWN0aXZhdGlvbnMuc3BsaWNlKGYsMSlbMF19dm9pZCAwIT09dC5wbGFjZW1lbnQ/KHI9ZnVuY3Rpb24odCxlKXt2YXIgbj1lW3QuZnJvbV0ueCxyPWVbdC50b10ueCxpPXQud3JhcCYmdC5tZXNzYWdlLGE9bmUuY2FsY3VsYXRlVGV4dERpbWVuc2lvbnMoaT9uZS53cmFwTGFiZWwodC5tZXNzYWdlLENvLndpZHRoLE1vKENvKSk6dC5tZXNzYWdlLE1vKENvKSkscz17d2lkdGg6aT9Dby53aWR0aDpNYXRoLm1heChDby53aWR0aCxhLndpZHRoKzIqQ28ubm90ZU1hcmdpbiksaGVpZ2h0OjAsc3RhcnR4OmVbdC5mcm9tXS54LHN0b3B4OjAsc3RhcnR5OjAsc3RvcHk6MCxtZXNzYWdlOnQubWVzc2FnZX07cmV0dXJuIHQucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5SSUdIVE9GPyhzLndpZHRoPWk/TWF0aC5tYXgoQ28ud2lkdGgsYS53aWR0aCk6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipDby5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uKyhlW3QuZnJvbV0ud2lkdGgrQ28uYWN0b3JNYXJnaW4pLzIpOnQucGxhY2VtZW50PT09SmEucGFyc2VyLnl5LlBMQUNFTUVOVC5MRUZUT0Y/KHMud2lkdGg9aT9NYXRoLm1heChDby53aWR0aCxhLndpZHRoKzIqQ28ubm90ZU1hcmdpbik6TWF0aC5tYXgoZVt0LmZyb21dLndpZHRoLzIrZVt0LnRvXS53aWR0aC8yLGEud2lkdGgrMipDby5ub3RlTWFyZ2luKSxzLnN0YXJ0eD1uLXMud2lkdGgrKGVbdC5mcm9tXS53aWR0aC1Dby5hY3Rvck1hcmdpbikvMik6dC50bz09PXQuZnJvbT8oYT1uZS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhpP25lLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoQ28ud2lkdGgsZVt0LmZyb21dLndpZHRoKSxNbyhDbykpOnQubWVzc2FnZSxNbyhDbykpLHMud2lkdGg9aT9NYXRoLm1heChDby53aWR0aCxlW3QuZnJvbV0ud2lkdGgpOk1hdGgubWF4KGVbdC5mcm9tXS53aWR0aCxDby53aWR0aCxhLndpZHRoKzIqQ28ubm90ZU1hcmdpbikscy5zdGFydHg9bisoZVt0LmZyb21dLndpZHRoLXMud2lkdGgpLzIpOihzLndpZHRoPU1hdGguYWJzKG4rZVt0LmZyb21dLndpZHRoLzItKHIrZVt0LnRvXS53aWR0aC8yKSkrQ28uYWN0b3JNYXJnaW4scy5zdGFydHg9bjxyP24rZVt0LmZyb21dLndpZHRoLzItQ28uYWN0b3JNYXJnaW4vMjpyK2VbdC50b10ud2lkdGgvMi1Dby5hY3Rvck1hcmdpbi8yKSxpJiYocy5tZXNzYWdlPW5lLndyYXBMYWJlbCh0Lm1lc3NhZ2Uscy53aWR0aC0yKkNvLndyYXBQYWRkaW5nLE1vKENvKSkpLG8uZGVidWcoIk5NOlsiLmNvbmNhdChzLnN0YXJ0eCwiLCIpLmNvbmNhdChzLnN0b3B4LCIsIikuY29uY2F0KHMuc3RhcnR5LCIsIikuY29uY2F0KHMuc3RvcHksIjoiKS5jb25jYXQocy53aWR0aCwiLCIpLmNvbmNhdChzLmhlaWdodCwiPSIpLmNvbmNhdCh0Lm1lc3NhZ2UsIl0iKSksc30odCxlKSx0Lm5vdGVNb2RlbD1yLHMuZm9yRWFjaCgoZnVuY3Rpb24odCl7KG49dCkuZnJvbT1NYXRoLm1pbihuLmZyb20sci5zdGFydHgpLG4udG89TWF0aC5tYXgobi50byxyLnN0YXJ0eCtyLndpZHRoKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsTWF0aC5hYnMobi5mcm9tLW4udG8pKS1Dby5sYWJlbEJveFdpZHRofSkpKTooaT1mdW5jdGlvbih0LGUpe3ZhciBuPSExO2lmKFtKYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfT1BFTixKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX09QRU4sSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElELEphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUQsSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX0NST1NTLEphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfQ1JPU1MsSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5ULEphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfUE9JTlRdLmluY2x1ZGVzKHQudHlwZSkmJihuPSEwKSwhbilyZXR1cm57fTt2YXIgcj1Mbyh0LmZyb20sZSksaT1Mbyh0LnRvLGUpLGE9clswXTw9aVswXT8xOjAsbz1yWzBdPGlbMF0/MDoxLHM9ci5jb25jYXQoaSksYz1NYXRoLmFicyhpW29dLXJbYV0pO3Qud3JhcCYmdC5tZXNzYWdlJiYodC5tZXNzYWdlPW5lLndyYXBMYWJlbCh0Lm1lc3NhZ2UsTWF0aC5tYXgoYysyKkNvLndyYXBQYWRkaW5nLENvLndpZHRoKSxBbyhDbykpKTt2YXIgdT1uZS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyh0Lm1lc3NhZ2UsQW8oQ28pKTtyZXR1cm57d2lkdGg6TWF0aC5tYXgodC53cmFwPzA6dS53aWR0aCsyKkNvLndyYXBQYWRkaW5nLGMrMipDby53cmFwUGFkZGluZyxDby53aWR0aCksaGVpZ2h0OjAsc3RhcnR4OnJbYV0sc3RvcHg6aVtvXSxzdGFydHk6MCxzdG9weTowLG1lc3NhZ2U6dC5tZXNzYWdlLHR5cGU6dC50eXBlLHdyYXA6dC53cmFwLGZyb21Cb3VuZHM6TWF0aC5taW4uYXBwbHkobnVsbCxzKSx0b0JvdW5kczpNYXRoLm1heC5hcHBseShudWxsLHMpfX0odCxlKSx0Lm1zZ01vZGVsPWksaS5zdGFydHgmJmkuc3RvcHgmJnMubGVuZ3RoPjAmJnMuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYobj1yLGkuc3RhcnR4PT09aS5zdG9weCl7dmFyIGE9ZVt0LmZyb21dLG89ZVt0LnRvXTtuLmZyb209TWF0aC5taW4oYS54LWkud2lkdGgvMixhLngtYS53aWR0aC8yLG4uZnJvbSksbi50bz1NYXRoLm1heChvLngraS53aWR0aC8yLG8ueCthLndpZHRoLzIsbi50byksbi53aWR0aD1NYXRoLm1heChuLndpZHRoLE1hdGguYWJzKG4udG8tbi5mcm9tKSktQ28ubGFiZWxCb3hXaWR0aH1lbHNlIG4uZnJvbT1NYXRoLm1pbihpLnN0YXJ0eCxuLmZyb20pLG4udG89TWF0aC5tYXgoaS5zdG9weCxuLnRvKSxuLndpZHRoPU1hdGgubWF4KG4ud2lkdGgsaS53aWR0aCktQ28ubGFiZWxCb3hXaWR0aH0pKSl9KSksU28uYWN0aXZhdGlvbnM9W10sby5kZWJ1ZygiTG9vcCB0eXBlIHdpZHRoczoiLGEpLGF9LGpvPXtib3VuZHM6U28sZHJhd0FjdG9yczpObyxzZXRDb25mOkJvLGRyYXc6ZnVuY3Rpb24odCxlKXtDbz1oZSgpLnNlcXVlbmNlLEphLnBhcnNlci55eS5jbGVhcigpLEphLnBhcnNlci55eS5zZXRXcmFwKENvLndyYXApLEphLnBhcnNlci5wYXJzZSh0KyJcbiIpLFNvLmluaXQoKSxvLmRlYnVnKCJDOiIuY29uY2F0KEpTT04uc3RyaW5naWZ5KENvLG51bGwsMikpKTt2YXIgbj1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KGUsJyJdJykpLHI9SmEucGFyc2VyLnl5LmdldEFjdG9ycygpLGk9SmEucGFyc2VyLnl5LmdldEFjdG9yS2V5cygpLGE9SmEucGFyc2VyLnl5LmdldE1lc3NhZ2VzKCkscz1KYS5wYXJzZXIueXkuZ2V0VGl0bGUoKSxjPVJvKHIsYSk7Q28uaGVpZ2h0PUZvKHIsYyksTm8obixyLGksMCk7dmFyIGw9UG8oYSxyLGMpO0VvLmluc2VydEFycm93SGVhZChuKSxFby5pbnNlcnRBcnJvd0Nyb3NzSGVhZChuKSxFby5pbnNlcnRBcnJvd0ZpbGxlZEhlYWQobiksRW8uaW5zZXJ0U2VxdWVuY2VOdW1iZXIobik7dmFyIGg9MTthLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLGksYTtzd2l0Y2godC50eXBlKXtjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5OT1RFOmk9dC5ub3RlTW9kZWwsZnVuY3Rpb24odCxlKXtTby5idW1wVmVydGljYWxQb3MoQ28uYm94TWFyZ2luKSxlLmhlaWdodD1Dby5ib3hNYXJnaW4sZS5zdGFydHk9U28uZ2V0VmVydGljYWxQb3MoKTt2YXIgbj1Fby5nZXROb3RlUmVjdCgpO24ueD1lLnN0YXJ0eCxuLnk9ZS5zdGFydHksbi53aWR0aD1lLndpZHRofHxDby53aWR0aCxuLmNsYXNzPSJub3RlIjt2YXIgcj10LmFwcGVuZCgiZyIpLGk9RW8uZHJhd1JlY3QocixuKSxhPUVvLmdldFRleHRPYmooKTthLng9ZS5zdGFydHgsYS55PWUuc3RhcnR5LGEud2lkdGg9bi53aWR0aCxhLmR5PSIxZW0iLGEudGV4dD1lLm1lc3NhZ2UsYS5jbGFzcz0ibm90ZVRleHQiLGEuZm9udEZhbWlseT1Dby5ub3RlRm9udEZhbWlseSxhLmZvbnRTaXplPUNvLm5vdGVGb250U2l6ZSxhLmZvbnRXZWlnaHQ9Q28ubm90ZUZvbnRXZWlnaHQsYS5hbmNob3I9Q28ubm90ZUFsaWduLGEudGV4dE1hcmdpbj1Dby5ub3RlTWFyZ2luLGEudmFsaWduPUNvLm5vdGVBbGlnbjt2YXIgbz1ibyhyLGEpLHM9TWF0aC5yb3VuZChvLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQuX2dyb3Vwc3x8dClbMF1bMF0uZ2V0QkJveCgpLmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSk7aS5hdHRyKCJoZWlnaHQiLHMrMipDby5ub3RlTWFyZ2luKSxlLmhlaWdodCs9cysyKkNvLm5vdGVNYXJnaW4sU28uYnVtcFZlcnRpY2FsUG9zKHMrMipDby5ub3RlTWFyZ2luKSxlLnN0b3B5PWUuc3RhcnR5K3MrMipDby5ub3RlTWFyZ2luLGUuc3RvcHg9ZS5zdGFydHgrbi53aWR0aCxTby5pbnNlcnQoZS5zdGFydHgsZS5zdGFydHksZS5zdG9weCxlLnN0b3B5KSxTby5tb2RlbHMuYWRkTm90ZShlKX0obixpKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5BQ1RJVkVfU1RBUlQ6U28ubmV3QWN0aXZhdGlvbih0LG4scik7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUNUSVZFX0VORDohZnVuY3Rpb24odCxlKXt2YXIgcj1Tby5lbmRBY3RpdmF0aW9uKHQpO3Iuc3RhcnR5KzE4PmUmJihyLnN0YXJ0eT1lLTYsZSs9MTIpLEVvLmRyYXdBY3RpdmF0aW9uKG4scixlLENvLERvKHQuZnJvbS5hY3RvcikubGVuZ3RoKSxTby5pbnNlcnQoci5zdGFydHgsZS0xMCxyLnN0b3B4LGUpfSh0LFNvLmdldFZlcnRpY2FsUG9zKCkpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLkxPT1BfU1RBUlQ6SW8obCx0LENvLmJveE1hcmdpbixDby5ib3hNYXJnaW4rQ28uYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuTE9PUF9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0xvb3AobixlLCJsb29wIixDbyksU28uYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktU28uZ2V0VmVydGljYWxQb3MoKSksU28ubW9kZWxzLmFkZExvb3AoZSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9TVEFSVDpJbyhsLHQsQ28uYm94TWFyZ2luLENvLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLm5ld0xvb3Aodm9pZCAwLHQubWVzc2FnZSl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuUkVDVF9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0JhY2tncm91bmRSZWN0KG4sZSksU28ubW9kZWxzLmFkZExvb3AoZSksU28uYnVtcFZlcnRpY2FsUG9zKGUuc3RvcHktU28uZ2V0VmVydGljYWxQb3MoKSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuT1BUX1NUQVJUOklvKGwsdCxDby5ib3hNYXJnaW4sQ28uYm94TWFyZ2luK0NvLmJveFRleHRNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBTby5uZXdMb29wKHQpfSkpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLk9QVF9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0xvb3AobixlLCJvcHQiLENvKSxTby5idW1wVmVydGljYWxQb3MoZS5zdG9weS1Tby5nZXRWZXJ0aWNhbFBvcygpKSxTby5tb2RlbHMuYWRkTG9vcChlKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5BTFRfU1RBUlQ6SW8obCx0LENvLmJveE1hcmdpbixDby5ib3hNYXJnaW4rQ28uYm94VGV4dE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLm5ld0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VMU0U6SW8obCx0LENvLmJveE1hcmdpbitDby5ib3hUZXh0TWFyZ2luLENvLmJveE1hcmdpbiwoZnVuY3Rpb24odCl7cmV0dXJuIFNvLmFkZFNlY3Rpb25Ub0xvb3AodCl9KSk7YnJlYWs7Y2FzZSBKYS5wYXJzZXIueXkuTElORVRZUEUuQUxUX0VORDplPVNvLmVuZExvb3AoKSxFby5kcmF3TG9vcChuLGUsImFsdCIsQ28pLFNvLmJ1bXBWZXJ0aWNhbFBvcyhlLnN0b3B5LVNvLmdldFZlcnRpY2FsUG9zKCkpLFNvLm1vZGVscy5hZGRMb29wKGUpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9TVEFSVDpJbyhsLHQsQ28uYm94TWFyZ2luLENvLmJveE1hcmdpbitDby5ib3hUZXh0TWFyZ2luLChmdW5jdGlvbih0KXtyZXR1cm4gU28ubmV3TG9vcCh0KX0pKTticmVhaztjYXNlIEphLnBhcnNlci55eS5MSU5FVFlQRS5QQVJfQU5EOklvKGwsdCxDby5ib3hNYXJnaW4rQ28uYm94VGV4dE1hcmdpbixDby5ib3hNYXJnaW4sKGZ1bmN0aW9uKHQpe3JldHVybiBTby5hZGRTZWN0aW9uVG9Mb29wKHQpfSkpO2JyZWFrO2Nhc2UgSmEucGFyc2VyLnl5LkxJTkVUWVBFLlBBUl9FTkQ6ZT1Tby5lbmRMb29wKCksRW8uZHJhd0xvb3AobixlLCJwYXIiLENvKSxTby5idW1wVmVydGljYWxQb3MoZS5zdG9weS1Tby5nZXRWZXJ0aWNhbFBvcygpKSxTby5tb2RlbHMuYWRkTG9vcChlKTticmVhaztkZWZhdWx0OnRyeXsoYT10Lm1zZ01vZGVsKS5zdGFydHk9U28uZ2V0VmVydGljYWxQb3MoKSxhLnNlcXVlbmNlSW5kZXg9aCxmdW5jdGlvbih0LGUpe1NvLmJ1bXBWZXJ0aWNhbFBvcygxMCk7dmFyIG49ZS5zdGFydHgscj1lLnN0b3B4LGk9ZS5zdGFydHksYT1lLm1lc3NhZ2Usbz1lLnR5cGUscz1lLnNlcXVlbmNlSW5kZXgsYz1udC5zcGxpdEJyZWFrcyhhKS5sZW5ndGgsdT1uZS5jYWxjdWxhdGVUZXh0RGltZW5zaW9ucyhhLEFvKENvKSksbD11LmhlaWdodC9jO2UuaGVpZ2h0Kz1sLFNvLmJ1bXBWZXJ0aWNhbFBvcyhsKTt2YXIgaD1Fby5nZXRUZXh0T2JqKCk7aC54PW4saC55PWkrMTAsaC53aWR0aD1yLW4saC5jbGFzcz0ibWVzc2FnZVRleHQiLGguZHk9IjFlbSIsaC50ZXh0PWEsaC5mb250RmFtaWx5PUNvLm1lc3NhZ2VGb250RmFtaWx5LGguZm9udFNpemU9Q28ubWVzc2FnZUZvbnRTaXplLGguZm9udFdlaWdodD1Dby5tZXNzYWdlRm9udFdlaWdodCxoLmFuY2hvcj1Dby5tZXNzYWdlQWxpZ24saC52YWxpZ249Q28ubWVzc2FnZUFsaWduLGgudGV4dE1hcmdpbj1Dby53cmFwUGFkZGluZyxoLnRzcGFuPSExLGJvKHQsaCk7dmFyIGYsZCxwPXUuaGVpZ2h0LTEwLHk9dS53aWR0aDtpZihuPT09cil7ZD1Tby5nZXRWZXJ0aWNhbFBvcygpK3AsQ28ucmlnaHRBbmdsZXM/Zj10LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNICAiLmNvbmNhdChuLCIsIikuY29uY2F0KGQsIiBIICIpLmNvbmNhdChuK01hdGgubWF4KENvLndpZHRoLzIseS8yKSwiIFYgIikuY29uY2F0KGQrMjUsIiBIICIpLmNvbmNhdChuKSk6KHArPUNvLmJveE1hcmdpbixkPVNvLmdldFZlcnRpY2FsUG9zKCkrcCxmPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gIituKyIsIitkKyIgQyAiKyhuKzYwKSsiLCIrKGQtMTApKyIgIisobis2MCkrIiwiKyhkKzMwKSsiICIrbisiLCIrKGQrMjApKSkscCs9MzA7dmFyIGc9TWF0aC5tYXgoeS8yLENvLndpZHRoLzIpO1NvLmluc2VydChuLWcsU28uZ2V0VmVydGljYWxQb3MoKS0xMCtwLHIrZyxTby5nZXRWZXJ0aWNhbFBvcygpKzMwK3ApfWVsc2UgcCs9Q28uYm94TWFyZ2luLGQ9U28uZ2V0VmVydGljYWxQb3MoKStwLChmPXQuYXBwZW5kKCJsaW5lIikpLmF0dHIoIngxIixuKSxmLmF0dHIoInkxIixkKSxmLmF0dHIoIngyIixyKSxmLmF0dHIoInkyIixkKSxTby5pbnNlcnQobixkLTEwLHIsZCk7bz09PUphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURUR8fG89PT1KYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX0NST1NTfHxvPT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8bz09PUphLnBhcnNlci55eS5MSU5FVFlQRS5ET1RURURfT1BFTj8oZi5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsIjMsIDMiKSxmLmF0dHIoImNsYXNzIiwibWVzc2FnZUxpbmUxIikpOmYuYXR0cigiY2xhc3MiLCJtZXNzYWdlTGluZTAiKTt2YXIgbT0iIjtDby5hcnJvd01hcmtlckFic29sdXRlJiYobT0obT0obT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wrIi8vIit3aW5kb3cubG9jYXRpb24uaG9zdCt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUrd2luZG93LmxvY2F0aW9uLnNlYXJjaCkucmVwbGFjZSgvXCgvZywiXFwoIikpLnJlcGxhY2UoL1wpL2csIlxcKSIpKSxmLmF0dHIoInN0cm9rZS13aWR0aCIsMiksZi5hdHRyKCJzdHJva2UiLCJub25lIiksZi5zdHlsZSgiZmlsbCIsIm5vbmUiKSxvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEJiZvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRHx8Zi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2Fycm93aGVhZCkiKSxvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX1BPSU5UJiZvIT09SmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9QT0lOVHx8Zi5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCIrbSsiI2ZpbGxlZC1oZWFkKSIpLG8hPT1KYS5wYXJzZXIueXkuTElORVRZUEUuU09MSURfQ1JPU1MmJm8hPT1KYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX0NST1NTfHxmLmF0dHIoIm1hcmtlci1lbmQiLCJ1cmwoIittKyIjY3Jvc3NoZWFkKSIpLChtby5zaG93U2VxdWVuY2VOdW1iZXJzKCl8fENvLnNob3dTZXF1ZW5jZU51bWJlcnMpJiYoZi5hdHRyKCJtYXJrZXItc3RhcnQiLCJ1cmwoIittKyIjc2VxdWVuY2VudW1iZXIpIiksdC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuKS5hdHRyKCJ5IixkKzQpLmF0dHIoImZvbnQtZmFtaWx5Iiwic2Fucy1zZXJpZiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEycHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInRleHRMZW5ndGgiLCIxNnB4IikuYXR0cigiY2xhc3MiLCJzZXF1ZW5jZU51bWJlciIpLnRleHQocykpLFNvLmJ1bXBWZXJ0aWNhbFBvcyhwKSxlLmhlaWdodCs9cCxlLnN0b3B5PWUuc3RhcnR5K2UuaGVpZ2h0LFNvLmluc2VydChlLmZyb21Cb3VuZHMsZS5zdGFydHksZS50b0JvdW5kcyxlLnN0b3B5KX0obixhKSxTby5tb2RlbHMuYWRkTWVzc2FnZShhKX1jYXRjaCh0KXtvLmVycm9yKCJlcnJvciB3aGlsZSBkcmF3aW5nIG1lc3NhZ2UiLHQpfX1bSmEucGFyc2VyLnl5LkxJTkVUWVBFLlNPTElEX09QRU4sSmEucGFyc2VyLnl5LkxJTkVUWVBFLkRPVFRFRF9PUEVOLEphLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRCxKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVELEphLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9DUk9TUyxKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX0NST1NTLEphLnBhcnNlci55eS5MSU5FVFlQRS5TT0xJRF9QT0lOVCxKYS5wYXJzZXIueXkuTElORVRZUEUuRE9UVEVEX1BPSU5UXS5pbmNsdWRlcyh0LnR5cGUpJiZoKyt9KSksQ28ubWlycm9yQWN0b3JzJiYoU28uYnVtcFZlcnRpY2FsUG9zKDIqQ28uYm94TWFyZ2luKSxObyhuLHIsaSxTby5nZXRWZXJ0aWNhbFBvcygpKSk7dmFyIGY9U28uZ2V0Qm91bmRzKCkuYm91bmRzO28uZGVidWcoIkZvciBsaW5lIGhlaWdodCBmaXggUXVlcnlpbmc6ICMiK2UrIiAuYWN0b3ItbGluZSIpLE9iamVjdCh1LnNlbGVjdEFsbCkoIiMiK2UrIiAuYWN0b3ItbGluZSIpLmF0dHIoInkyIixmLnN0b3B5KTt2YXIgZD1mLnN0b3B5LWYuc3RhcnR5KzIqQ28uZGlhZ3JhbU1hcmdpblk7Q28ubWlycm9yQWN0b3JzJiYoZD1kLUNvLmJveE1hcmdpbitDby5ib3R0b21NYXJnaW5BZGopO3ZhciBwPWYuc3RvcHgtZi5zdGFydHgrMipDby5kaWFncmFtTWFyZ2luWDtzJiZuLmFwcGVuZCgidGV4dCIpLnRleHQocykuYXR0cigieCIsKGYuc3RvcHgtZi5zdGFydHgpLzItMipDby5kaWFncmFtTWFyZ2luWCkuYXR0cigieSIsLTI1KSx0ZShuLGQscCxDby51c2VNYXhXaWR0aCk7dmFyIHk9cz80MDowO24uYXR0cigidmlld0JveCIsZi5zdGFydHgtQ28uZGlhZ3JhbU1hcmdpblgrIiAtIisoQ28uZGlhZ3JhbU1hcmdpblkreSkrIiAiK3ArIiAiKyhkK3kpKSxvLmRlYnVnKCJtb2RlbHM6IixTby5tb2RlbHMpfX0sWW89bigyMiksem89bi5uKFlvKTtmdW5jdGlvbiBVbyh0KXtyZXR1cm4oVW89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgJG89ZnVuY3Rpb24odCl7cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodCkpfSxxbz1bXSxXbz17cm9vdDp7cmVsYXRpb25zOltdLHN0YXRlczp7fSxkb2N1bWVudHM6e319fSxIbz1Xby5yb290LFZvPTAsR289ZnVuY3Rpb24odCxlLG4scixpKXt2b2lkIDA9PT1Iby5zdGF0ZXNbdF0/SG8uc3RhdGVzW3RdPXtpZDp0LGRlc2NyaXB0aW9uczpbXSx0eXBlOmUsZG9jOm4sbm90ZTppfTooSG8uc3RhdGVzW3RdLmRvY3x8KEhvLnN0YXRlc1t0XS5kb2M9biksSG8uc3RhdGVzW3RdLnR5cGV8fChIby5zdGF0ZXNbdF0udHlwZT1lKSksciYmKG8uaW5mbygiQWRkaW5nIHN0YXRlICIsdCxyKSwic3RyaW5nIj09dHlwZW9mIHImJktvKHQsci50cmltKCkpLCJvYmplY3QiPT09VW8ocikmJnIuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIEtvKHQsZS50cmltKCkpfSkpKSxpJiYoSG8uc3RhdGVzW3RdLm5vdGU9aSl9LFhvPWZ1bmN0aW9uKCl7SG89KFdvPXtyb290OntyZWxhdGlvbnM6W10sc3RhdGVzOnt9LGRvY3VtZW50czp7fX19KS5yb290LEhvPVdvLnJvb3QsVm89MCwwLEpvPVtdfSxabz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dCxpPWUsYT0iZGVmYXVsdCIsbz0iZGVmYXVsdCI7IlsqXSI9PT10JiYocj0ic3RhcnQiKyArK1ZvLGE9InN0YXJ0IiksIlsqXSI9PT1lJiYoaT0iZW5kIitWbyxvPSJlbmQiKSxHbyhyLGEpLEdvKGksbyksSG8ucmVsYXRpb25zLnB1c2goe2lkMTpyLGlkMjppLHRpdGxlOm59KX0sS289ZnVuY3Rpb24odCxlKXt2YXIgbj1Iby5zdGF0ZXNbdF0scj1lOyI6Ij09PXJbMF0mJihyPXIuc3Vic3RyKDEpLnRyaW0oKSksbi5kZXNjcmlwdGlvbnMucHVzaChyKX0sUW89MCxKbz1bXSx0cz0iVEIiLGVzPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLnN0YXRlfSxhZGRTdGF0ZTpHbyxjbGVhcjpYbyxnZXRTdGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gSG8uc3RhdGVzW3RdfSxnZXRTdGF0ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gSG8uc3RhdGVzfSxnZXRSZWxhdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gSG8ucmVsYXRpb25zfSxnZXRDbGFzc2VzOmZ1bmN0aW9uKCl7cmV0dXJuIEpvfSxnZXREaXJlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdHN9LGFkZFJlbGF0aW9uOlpvLGdldERpdmlkZXJJZDpmdW5jdGlvbigpe3JldHVybiJkaXZpZGVyLWlkLSIrICsrUW99LHNldERpcmVjdGlvbjpmdW5jdGlvbih0KXt0cz10fSxjbGVhbnVwTGFiZWw6ZnVuY3Rpb24odCl7cmV0dXJuIjoiPT09dC5zdWJzdHJpbmcoMCwxKT90LnN1YnN0cigyKS50cmltKCk6dC50cmltKCl9LGxpbmVUeXBlOntMSU5FOjAsRE9UVEVEX0xJTkU6MX0scmVsYXRpb25UeXBlOntBR0dSRUdBVElPTjowLEVYVEVOU0lPTjoxLENPTVBPU0lUSU9OOjIsREVQRU5ERU5DWTozfSxsb2dEb2N1bWVudHM6ZnVuY3Rpb24oKXtvLmluZm8oIkRvY3VtZW50cyA9ICIsV28pfSxnZXRSb290RG9jOmZ1bmN0aW9uKCl7cmV0dXJuIHFvfSxzZXRSb290RG9jOmZ1bmN0aW9uKHQpe28uaW5mbygiU2V0dGluZyByb290IGRvYyIsdCkscW89dH0sZ2V0Um9vdERvY1YyOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuLHIpe2lmKCJyZWxhdGlvbiI9PT1uLnN0bXQpdChlLG4uc3RhdGUxLCEwKSx0KGUsbi5zdGF0ZTIsITEpO2Vsc2UgaWYoInN0YXRlIj09PW4uc3RtdCYmIlsqXSI9PT1uLmlkJiYobi5pZD1yP2UuaWQrIl9zdGFydCI6ZS5pZCsiX2VuZCIsbi5zdGFydD1yKSxuLmRvYyl7dmFyIGk9W10sYT0wLG89W107Zm9yKGE9MDthPG4uZG9jLmxlbmd0aDthKyspaWYoImRpdmlkZXIiPT09bi5kb2NbYV0udHlwZSl7dmFyIHM9JG8obi5kb2NbYV0pO3MuZG9jPSRvKG8pLGkucHVzaChzKSxvPVtdfWVsc2Ugby5wdXNoKG4uZG9jW2FdKTtpZihpLmxlbmd0aD4wJiZvLmxlbmd0aD4wKXt2YXIgYz17c3RtdDoic3RhdGUiLGlkOnF0KCksdHlwZToiZGl2aWRlciIsZG9jOiRvKG8pfTtpLnB1c2goJG8oYykpLG4uZG9jPWl9bi5kb2MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQobixlLCEwKX0pKX19KHtpZDoicm9vdCJ9LHtpZDoicm9vdCIsZG9jOnFvfSwhMCkse2lkOiJyb290Iixkb2M6cW99fSxleHRyYWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2U9dC5kb2M/dC5kb2M6dCxvLmluZm8oZSksWG8oKSxvLmluZm8oIkV4dHJhY3QiLGUpLGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7InN0YXRlIj09PXQuc3RtdCYmR28odC5pZCx0LnR5cGUsdC5kb2MsdC5kZXNjcmlwdGlvbix0Lm5vdGUpLCJyZWxhdGlvbiI9PT10LnN0bXQmJlpvKHQuc3RhdGUxLmlkLHQuc3RhdGUyLmlkLHQuZGVzY3JpcHRpb24pfSkpfSx0cmltQ29sb246ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiI6Ij09PXRbMF0/dC5zdWJzdHIoMSkudHJpbSgpOnQudHJpbSgpfX0sbnM9e30scnM9ZnVuY3Rpb24odCxlKXtuc1t0XT1lfTtmdW5jdGlvbiBpcyh0LGUpe3ZhciBuPSJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBhcyh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gYXModCxlKX0odCkpfHxlJiZ0JiYibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXtuJiYodD1uKTt2YXIgcj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbih0KXt0aHJvdyB0fSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX12YXIgYSxvPSEwLHM9ITE7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciB0PW4ubmV4dCgpO3JldHVybiBvPXQuZG9uZSx0fSxlOmZ1bmN0aW9uKHQpe3M9ITAsYT10fSxmOmZ1bmN0aW9uKCl7dHJ5e298fG51bGw9PW4ucmV0dXJufHxuLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBhfX19fWZ1bmN0aW9uIGFzKHQsZSl7KG51bGw9PWV8fGU+dC5sZW5ndGgpJiYoZT10Lmxlbmd0aCk7Zm9yKHZhciBuPTAscj1uZXcgQXJyYXkoZSk7bjxlO24rKylyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG9zLHNzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IiwyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsaGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KzEuMypoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImZvbnQtc2l6ZSIsaGUoKS5zdGF0ZS5mb250U2l6ZSkuYXR0cigiY2xhc3MiLCJzdGF0ZS10aXRsZSIpLnRleHQoZS5kZXNjcmlwdGlvbnNbMF0pLm5vZGUoKS5nZXRCQm94KCkscj1uLmhlaWdodCxpPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsaGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ5IixyKy40KmhlKCkuc3RhdGUucGFkZGluZytoZSgpLnN0YXRlLmRpdmlkZXJNYXJnaW4raGUoKS5zdGF0ZS50ZXh0SGVpZ2h0KS5hdHRyKCJjbGFzcyIsInN0YXRlLWRlc2NyaXB0aW9uIiksYT0hMCxvPSEwO2UuZGVzY3JpcHRpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe2F8fCghZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuYXBwZW5kKCJ0c3BhbiIpLmF0dHIoIngiLDIqaGUoKS5zdGF0ZS5wYWRkaW5nKS50ZXh0KGUpO258fHIuYXR0cigiZHkiLGhlKCkuc3RhdGUudGV4dEhlaWdodCl9KGksdCxvKSxvPSExKSxhPSExfSkpO3ZhciBzPXQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieTEiLGhlKCkuc3RhdGUucGFkZGluZytyK2hlKCkuc3RhdGUuZGl2aWRlck1hcmdpbi8yKS5hdHRyKCJ5MiIsaGUoKS5zdGF0ZS5wYWRkaW5nK3IraGUoKS5zdGF0ZS5kaXZpZGVyTWFyZ2luLzIpLmF0dHIoImNsYXNzIiwiZGVzY3ItZGl2aWRlciIpLGM9aS5ub2RlKCkuZ2V0QkJveCgpLHU9TWF0aC5tYXgoYy53aWR0aCxuLndpZHRoKTtyZXR1cm4gcy5hdHRyKCJ4MiIsdSszKmhlKCkuc3RhdGUucGFkZGluZyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLHUrMipoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsYy5oZWlnaHQrcisyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLGhlKCkuc3RhdGUucmFkaXVzKSx0fSxjcz1mdW5jdGlvbih0LGUsbil7dmFyIHIsaT1oZSgpLnN0YXRlLnBhZGRpbmcsYT0yKmhlKCkuc3RhdGUucGFkZGluZyxvPXQubm9kZSgpLmdldEJCb3goKSxzPW8ud2lkdGgsYz1vLngsdT10LmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDApLmF0dHIoInkiLGhlKCkuc3RhdGUudGl0bGVTaGlmdCkuYXR0cigiZm9udC1zaXplIixoZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxsPXUubm9kZSgpLmdldEJCb3goKS53aWR0aCthLGg9TWF0aC5tYXgobCxzKTtoPT09cyYmKGgrPWEpO3ZhciBmPXQubm9kZSgpLmdldEJCb3goKTtlLmRvYyxyPWMtaSxsPnMmJihyPShzLWgpLzIraSksTWF0aC5hYnMoYy1mLngpPGkmJmw+cyYmKHI9Yy0obC1zKS8yKTt2YXIgZD0xLWhlKCkuc3RhdGUudGV4dEhlaWdodDtyZXR1cm4gdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixkKS5hdHRyKCJjbGFzcyIsbj8iYWx0LWNvbXBvc2l0IjoiY29tcG9zaXQiKS5hdHRyKCJ3aWR0aCIsaCkuYXR0cigiaGVpZ2h0IixmLmhlaWdodCtoZSgpLnN0YXRlLnRleHRIZWlnaHQraGUoKS5zdGF0ZS50aXRsZVNoaWZ0KzEpLmF0dHIoInJ4IiwiMCIpLHUuYXR0cigieCIscitpKSxsPD1zJiZ1LmF0dHIoIngiLGMrKGgtYSkvMi1sLzIraSksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixoZSgpLnN0YXRlLnRpdGxlU2hpZnQtaGUoKS5zdGF0ZS50ZXh0SGVpZ2h0LWhlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsMypoZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoInJ4IixoZSgpLnN0YXRlLnJhZGl1cyksdC5pbnNlcnQoInJlY3QiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKCJ4IixyKS5hdHRyKCJ5IixoZSgpLnN0YXRlLnRpdGxlU2hpZnQtaGUoKS5zdGF0ZS50ZXh0SGVpZ2h0LWhlKCkuc3RhdGUucGFkZGluZykuYXR0cigid2lkdGgiLGgpLmF0dHIoImhlaWdodCIsZi5oZWlnaHQrMysyKmhlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigicngiLGhlKCkuc3RhdGUucmFkaXVzKSx0fSx1cz1mdW5jdGlvbih0LGUpe2UuYXR0cigiY2xhc3MiLCJzdGF0ZS1ub3RlIik7dmFyIG49ZS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixoZSgpLnN0YXRlLnBhZGRpbmcpLHI9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9MCxhPXIuYXBwZW5kKCJ0ZXh0Iik7YS5zdHlsZSgidGV4dC1hbmNob3IiLCJzdGFydCIpLGEuYXR0cigiY2xhc3MiLCJub3RlVGV4dCIpO3ZhciBvLHM9dC5yZXBsYWNlKC9cclxuL2csIjxici8+IiksYz0ocz1zLnJlcGxhY2UoL1xuL2csIjxici8+IikpLnNwbGl0KG50LmxpbmVCcmVha1JlZ2V4KSx1PTEuMjUqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luLGw9aXMoYyk7dHJ5e2ZvcihsLnMoKTshKG89bC5uKCkpLmRvbmU7KXt2YXIgaD1vLnZhbHVlLnRyaW0oKTtpZihoLmxlbmd0aD4wKXt2YXIgZj1hLmFwcGVuZCgidHNwYW4iKTtpZihmLnRleHQoaCksMD09PXUpdSs9Zi5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodDtpKz11LGYuYXR0cigieCIsZStoZSgpLnN0YXRlLm5vdGVNYXJnaW4pLGYuYXR0cigieSIsbitpKzEuMjUqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luKX19fWNhdGNoKHQpe2wuZSh0KX1maW5hbGx5e2wuZigpfXJldHVybnt0ZXh0V2lkdGg6YS5ub2RlKCkuZ2V0QkJveCgpLndpZHRoLHRleHRIZWlnaHQ6aX19KHQsMCwwLGUuYXBwZW5kKCJnIikpLGk9ci50ZXh0V2lkdGgsYT1yLnRleHRIZWlnaHQ7cmV0dXJuIG4uYXR0cigiaGVpZ2h0IixhKzIqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxuLmF0dHIoIndpZHRoIixpKzIqaGUoKS5zdGF0ZS5ub3RlTWFyZ2luKSxufSxscz1mdW5jdGlvbih0LGUpe3ZhciBuPWUuaWQscj17aWQ6bixsYWJlbDplLmlkLHdpZHRoOjAsaGVpZ2h0OjB9LGk9dC5hcHBlbmQoImciKS5hdHRyKCJpZCIsbikuYXR0cigiY2xhc3MiLCJzdGF0ZUdyb3VwIik7InN0YXJ0Ij09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwic3RhcnQtc3RhdGUiKS5hdHRyKCJyIixoZSgpLnN0YXRlLnNpemVVbml0KS5hdHRyKCJjeCIsaGUoKS5zdGF0ZS5wYWRkaW5nK2hlKCkuc3RhdGUuc2l6ZVVuaXQpLmF0dHIoImN5IixoZSgpLnN0YXRlLnBhZGRpbmcraGUoKS5zdGF0ZS5zaXplVW5pdCl9KGkpLCJlbmQiPT09ZS50eXBlJiZmdW5jdGlvbih0KXt0LmFwcGVuZCgiY2lyY2xlIikuYXR0cigiY2xhc3MiLCJlbmQtc3RhdGUtb3V0ZXIiKS5hdHRyKCJyIixoZSgpLnN0YXRlLnNpemVVbml0K2hlKCkuc3RhdGUubWluaVBhZGRpbmcpLmF0dHIoImN4IixoZSgpLnN0YXRlLnBhZGRpbmcraGUoKS5zdGF0ZS5zaXplVW5pdCtoZSgpLnN0YXRlLm1pbmlQYWRkaW5nKS5hdHRyKCJjeSIsaGUoKS5zdGF0ZS5wYWRkaW5nK2hlKCkuc3RhdGUuc2l6ZVVuaXQraGUoKS5zdGF0ZS5taW5pUGFkZGluZyksdC5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImNsYXNzIiwiZW5kLXN0YXRlLWlubmVyIikuYXR0cigiciIsaGUoKS5zdGF0ZS5zaXplVW5pdCkuYXR0cigiY3giLGhlKCkuc3RhdGUucGFkZGluZytoZSgpLnN0YXRlLnNpemVVbml0KzIpLmF0dHIoImN5IixoZSgpLnN0YXRlLnBhZGRpbmcraGUoKS5zdGF0ZS5zaXplVW5pdCsyKX0oaSksImZvcmsiIT09ZS50eXBlJiYiam9pbiIhPT1lLnR5cGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG49aGUoKS5zdGF0ZS5mb3JrV2lkdGgscj1oZSgpLnN0YXRlLmZvcmtIZWlnaHQ7aWYoZS5wYXJlbnRJZCl7dmFyIGk9bjtuPXIscj1pfXQuYXBwZW5kKCJyZWN0Iikuc3R5bGUoInN0cm9rZSIsImJsYWNrIikuc3R5bGUoImZpbGwiLCJibGFjayIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLHIpLmF0dHIoIngiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsaGUoKS5zdGF0ZS5wYWRkaW5nKX0oaSxlKSwibm90ZSI9PT1lLnR5cGUmJnVzKGUubm90ZS50ZXh0LGkpLCJkaXZpZGVyIj09PWUudHlwZSYmZnVuY3Rpb24odCl7dC5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlIiwiZ3JleSIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMyIpLmF0dHIoIngxIixoZSgpLnN0YXRlLnRleHRIZWlnaHQpLmF0dHIoImNsYXNzIiwiZGl2aWRlciIpLmF0dHIoIngyIiwyKmhlKCkuc3RhdGUudGV4dEhlaWdodCkuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKX0oaSksImRlZmF1bHQiPT09ZS50eXBlJiYwPT09ZS5kZXNjcmlwdGlvbnMubGVuZ3RoJiZmdW5jdGlvbih0LGUpe3ZhciBuPXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsMipoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoInkiLGhlKCkuc3RhdGUudGV4dEhlaWdodCsyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigiZm9udC1zaXplIixoZSgpLnN0YXRlLmZvbnRTaXplKS5hdHRyKCJjbGFzcyIsInN0YXRlLXRpdGxlIikudGV4dChlLmlkKSxyPW4ubm9kZSgpLmdldEJCb3goKTt0Lmluc2VydCgicmVjdCIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoIngiLGhlKCkuc3RhdGUucGFkZGluZykuYXR0cigieSIsaGUoKS5zdGF0ZS5wYWRkaW5nKS5hdHRyKCJ3aWR0aCIsci53aWR0aCsyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigiaGVpZ2h0IixyLmhlaWdodCsyKmhlKCkuc3RhdGUucGFkZGluZykuYXR0cigicngiLGhlKCkuc3RhdGUucmFkaXVzKX0oaSxlKSwiZGVmYXVsdCI9PT1lLnR5cGUmJmUuZGVzY3JpcHRpb25zLmxlbmd0aD4wJiZzcyhpLGUpO3ZhciBhPWkubm9kZSgpLmdldEJCb3goKTtyZXR1cm4gci53aWR0aD1hLndpZHRoKzIqaGUoKS5zdGF0ZS5wYWRkaW5nLHIuaGVpZ2h0PWEuaGVpZ2h0KzIqaGUoKS5zdGF0ZS5wYWRkaW5nLHJzKG4scikscn0saHM9MDtZby5wYXJzZXIueXk9ZXM7dmFyIGZzPXt9LGRzPWZ1bmN0aW9uIHQoZSxuLHIsaSl7dmFyIGEscz1uZXcgTGUuYS5HcmFwaCh7Y29tcG91bmQ6ITAsbXVsdGlncmFwaDohMH0pLGM9ITA7Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigicmVsYXRpb24iPT09ZVthXS5zdG10KXtjPSExO2JyZWFrfXI/cy5zZXRHcmFwaCh7cmFua2RpcjoiTFIiLG11bHRpZ3JhcGg6ITAsY29tcG91bmQ6ITAscmFua2VyOiJ0aWdodC10cmVlIixyYW5rc2VwOmM/MTpvcy5lZGdlTGVuZ3RoRmFjdG9yLG5vZGVTZXA6Yz8xOjUwLGlzTXVsdGlHcmFwaDohMH0pOnMuc2V0R3JhcGgoe3JhbmtkaXI6IlRCIixtdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwLHJhbmtzZXA6Yz8xOm9zLmVkZ2VMZW5ndGhGYWN0b3Isbm9kZVNlcDpjPzE6NTAscmFua2VyOiJ0aWdodC10cmVlIixpc011bHRpR3JhcGg6ITB9KSxzLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSksZXMuZXh0cmFjdChlKTtmb3IodmFyIGw9ZXMuZ2V0U3RhdGVzKCksaD1lcy5nZXRSZWxhdGlvbnMoKSxmPU9iamVjdC5rZXlzKGwpLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIHA9bFtmW2RdXTtyJiYocC5wYXJlbnRJZD1yKTt2YXIgeT12b2lkIDA7aWYocC5kb2Mpe3ZhciBnPW4uYXBwZW5kKCJnIikuYXR0cigiaWQiLHAuaWQpLmF0dHIoImNsYXNzIiwic3RhdGVHcm91cCIpO3k9dChwLmRvYyxnLHAuaWQsIWkpO3ZhciBtPShnPWNzKGcscCxpKSkubm9kZSgpLmdldEJCb3goKTt5LndpZHRoPW0ud2lkdGgseS5oZWlnaHQ9bS5oZWlnaHQrb3MucGFkZGluZy8yLGZzW3AuaWRdPXt5Om9zLmNvbXBvc2l0VGl0bGVTaXplfX1lbHNlIHk9bHMobixwKTtpZihwLm5vdGUpe3ZhciB2PXtkZXNjcmlwdGlvbnM6W10saWQ6cC5pZCsiLW5vdGUiLG5vdGU6cC5ub3RlLHR5cGU6Im5vdGUifSxiPWxzKG4sdik7ImxlZnQgb2YiPT09cC5ub3RlLnBvc2l0aW9uPyhzLnNldE5vZGUoeS5pZCsiLW5vdGUiLGIpLHMuc2V0Tm9kZSh5LmlkLHkpKToocy5zZXROb2RlKHkuaWQseSkscy5zZXROb2RlKHkuaWQrIi1ub3RlIixiKSkscy5zZXRQYXJlbnQoeS5pZCx5LmlkKyItZ3JvdXAiKSxzLnNldFBhcmVudCh5LmlkKyItbm90ZSIseS5pZCsiLWdyb3VwIil9ZWxzZSBzLnNldE5vZGUoeS5pZCx5KX1vLmRlYnVnKCJDb3VudD0iLHMubm9kZUNvdW50KCkscyk7dmFyIHg9MDtoLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlO3grKyxvLmRlYnVnKCJTZXR0aW5nIGVkZ2UiLHQpLHMuc2V0RWRnZSh0LmlkMSx0LmlkMix7cmVsYXRpb246dCx3aWR0aDooZT10LnRpdGxlLGU/ZS5sZW5ndGgqb3MuZm9udFNpemVGYWN0b3I6MSksaGVpZ2h0Om9zLmxhYmVsSGVpZ2h0Km50LmdldFJvd3ModC50aXRsZSkubGVuZ3RoLGxhYmVscG9zOiJjIn0sImlkIit4KX0pKSxCZS5hLmxheW91dChzKSxvLmRlYnVnKCJHcmFwaCBhZnRlciBsYXlvdXQiLHMubm9kZXMoKSk7dmFyIF89bi5ub2RlKCk7cy5ub2RlcygpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXQmJnZvaWQgMCE9PXMubm9kZSh0KT8oby53YXJuKCJOb2RlICIrdCsiOiAiK0pTT04uc3RyaW5naWZ5KHMubm9kZSh0KSkpLE9iamVjdCh1LnNlbGVjdCkoIiMiK18uaWQrIiAjIit0KS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIisocy5ub2RlKHQpLngtcy5ub2RlKHQpLndpZHRoLzIpKyIsIisocy5ub2RlKHQpLnkrKGZzW3RdP2ZzW3RdLnk6MCktcy5ub2RlKHQpLmhlaWdodC8yKSsiICkiKSxPYmplY3QodS5zZWxlY3QpKCIjIitfLmlkKyIgIyIrdCkuYXR0cigiZGF0YS14LXNoaWZ0IixzLm5vZGUodCkueC1zLm5vZGUodCkud2lkdGgvMiksZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiIyIrXy5pZCsiICMiK3QrIiAuZGl2aWRlciIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50RWxlbWVudCxuPTAscj0wO2UmJihlLnBhcmVudEVsZW1lbnQmJihuPWUucGFyZW50RWxlbWVudC5nZXRCQm94KCkud2lkdGgpLHI9cGFyc2VJbnQoZS5nZXRBdHRyaWJ1dGUoImRhdGEteC1zaGlmdCIpLDEwKSxOdW1iZXIuaXNOYU4ocikmJihyPTApKSx0LnNldEF0dHJpYnV0ZSgieDEiLDAtcis4KSx0LnNldEF0dHJpYnV0ZSgieDIiLG4tci04KX0pKSk6by5kZWJ1ZygiTm8gTm9kZSAiK3QrIjogIitKU09OLnN0cmluZ2lmeShzLm5vZGUodCkpKX0pKTt2YXIgaz1fLmdldEJCb3goKTtzLmVkZ2VzKCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09dCYmdm9pZCAwIT09cy5lZGdlKHQpJiYoby5kZWJ1ZygiRWRnZSAiK3QudisiIC0+ICIrdC53KyI6ICIrSlNPTi5zdHJpbmdpZnkocy5lZGdlKHQpKSksZnVuY3Rpb24odCxlLG4pe2UucG9pbnRzPWUucG9pbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIU51bWJlci5pc05hTih0LnkpfSkpO3ZhciByPWUucG9pbnRzLGk9T2JqZWN0KHUubGluZSkoKS54KChmdW5jdGlvbih0KXtyZXR1cm4gdC54fSkpLnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnl9KSkuY3VydmUodS5jdXJ2ZUJhc2lzKSxhPXQuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsaShyKSkuYXR0cigiaWQiLCJlZGdlIitocykuYXR0cigiY2xhc3MiLCJ0cmFuc2l0aW9uIikscz0iIjtpZihoZSgpLnN0YXRlLmFycm93TWFya2VyQWJzb2x1dGUmJihzPShzPShzPXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCsiLy8iK3dpbmRvdy5sb2NhdGlvbi5ob3N0K3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKS5yZXBsYWNlKC9cKC9nLCJcXCgiKSkucmVwbGFjZSgvXCkvZywiXFwpIikpLGEuYXR0cigibWFya2VyLWVuZCIsInVybCgiK3MrIiMiK2Z1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIGVzLnJlbGF0aW9uVHlwZS5BR0dSRUdBVElPTjpyZXR1cm4iYWdncmVnYXRpb24iO2Nhc2UgZXMucmVsYXRpb25UeXBlLkVYVEVOU0lPTjpyZXR1cm4iZXh0ZW5zaW9uIjtjYXNlIGVzLnJlbGF0aW9uVHlwZS5DT01QT1NJVElPTjpyZXR1cm4iY29tcG9zaXRpb24iO2Nhc2UgZXMucmVsYXRpb25UeXBlLkRFUEVOREVOQ1k6cmV0dXJuImRlcGVuZGVuY3kifX0oZXMucmVsYXRpb25UeXBlLkRFUEVOREVOQ1kpKyJFbmQpIiksdm9pZCAwIT09bi50aXRsZSl7Zm9yKHZhciBjPXQuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJzdGF0ZUxhYmVsIiksbD1uZS5jYWxjTGFiZWxQb3NpdGlvbihlLnBvaW50cyksaD1sLngsZj1sLnksZD1udC5nZXRSb3dzKG4udGl0bGUpLHA9MCx5PVtdLGc9MCxtPTAsdj0wO3Y8PWQubGVuZ3RoO3YrKyl7dmFyIGI9Yy5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnRleHQoZFt2XSkuYXR0cigieCIsaCkuYXR0cigieSIsZitwKSx4PWIubm9kZSgpLmdldEJCb3goKTtpZihnPU1hdGgubWF4KGcseC53aWR0aCksbT1NYXRoLm1pbihtLHgueCksby5pbmZvKHgueCxoLGYrcCksMD09PXApe3ZhciBfPWIubm9kZSgpLmdldEJCb3goKTtwPV8uaGVpZ2h0LG8uaW5mbygiVGl0bGUgaGVpZ2h0IixwLGYpfXkucHVzaChiKX12YXIgaz1wKmQubGVuZ3RoO2lmKGQubGVuZ3RoPjEpe3ZhciB3PShkLmxlbmd0aC0xKSpwKi41O3kuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5hdHRyKCJ5IixmK2UqcC13KX0pKSxrPXAqZC5sZW5ndGh9dmFyIFQ9Yy5ub2RlKCkuZ2V0QkJveCgpO2MuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuYXR0cigiY2xhc3MiLCJib3giKS5hdHRyKCJ4IixoLWcvMi1oZSgpLnN0YXRlLnBhZGRpbmcvMikuYXR0cigieSIsZi1rLzItaGUoKS5zdGF0ZS5wYWRkaW5nLzItMy41KS5hdHRyKCJ3aWR0aCIsZytoZSgpLnN0YXRlLnBhZGRpbmcpLmF0dHIoImhlaWdodCIsaytoZSgpLnN0YXRlLnBhZGRpbmcpLG8uaW5mbyhUKX1ocysrfShuLHMuZWRnZSh0KSxzLmVkZ2UodCkucmVsYXRpb24pKX0pKSxrPV8uZ2V0QkJveCgpO3ZhciB3PXtpZDpyfHwicm9vdCIsbGFiZWw6cnx8InJvb3QiLHdpZHRoOjAsaGVpZ2h0OjB9O3JldHVybiB3LndpZHRoPWsud2lkdGgrMipvcy5wYWRkaW5nLHcuaGVpZ2h0PWsuaGVpZ2h0KzIqb3MucGFkZGluZyxvLmRlYnVnKCJEb2MgcmVuZGVyZWQiLHcscyksd30scHM9ZnVuY3Rpb24oKXt9LHlzPWZ1bmN0aW9uKHQsZSl7b3M9aGUoKS5zdGF0ZSxZby5wYXJzZXIueXkuY2xlYXIoKSxZby5wYXJzZXIucGFyc2UodCksby5kZWJ1ZygiUmVuZGVyaW5nIGRpYWdyYW0gIit0KTt2YXIgbj1PYmplY3QodS5zZWxlY3QpKCJbaWQ9JyIuY29uY2F0KGUsIiddIikpO24uYXBwZW5kKCJkZWZzIikuYXBwZW5kKCJtYXJrZXIiKS5hdHRyKCJpZCIsImRlcGVuZGVuY3lFbmQiKS5hdHRyKCJyZWZYIiwxOSkuYXR0cigicmVmWSIsNykuYXR0cigibWFya2VyV2lkdGgiLDIwKS5hdHRyKCJtYXJrZXJIZWlnaHQiLDI4KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMTksNyBMOSwxMyBMMTQsNyBMOSwxIFoiKSxuZXcgTGUuYS5HcmFwaCh7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMCxyYW5rZGlyOiJSTCJ9KS5zZXREZWZhdWx0RWRnZUxhYmVsKChmdW5jdGlvbigpe3JldHVybnt9fSkpO3ZhciByPWVzLmdldFJvb3REb2MoKTtkcyhyLG4sdm9pZCAwLCExKTt2YXIgaT1vcy5wYWRkaW5nLGE9bi5ub2RlKCkuZ2V0QkJveCgpLHM9YS53aWR0aCsyKmksYz1hLmhlaWdodCsyKmk7dGUobixjLDEuNzUqcyxvcy51c2VNYXhXaWR0aCksbi5hdHRyKCJ2aWV3Qm94IiwiIi5jb25jYXQoYS54LW9zLnBhZGRpbmcsIiAgIikuY29uY2F0KGEueS1vcy5wYWRkaW5nLCIgIikrcysiICIrYyl9LGdzPXt9LG1zPXt9LHZzPWZ1bmN0aW9uKHQsZSxuLHIpe2lmKCJyb290IiE9PW4uaWQpe3ZhciBpPSJyZWN0IjshMD09PW4uc3RhcnQmJihpPSJzdGFydCIpLCExPT09bi5zdGFydCYmKGk9ImVuZCIpLCJkZWZhdWx0IiE9PW4udHlwZSYmKGk9bi50eXBlKSxtc1tuLmlkXXx8KG1zW24uaWRdPXtpZDpuLmlkLHNoYXBlOmksZGVzY3JpcHRpb246bi5pZCxjbGFzc2VzOiJzdGF0ZWRpYWdyYW0tc3RhdGUifSksbi5kZXNjcmlwdGlvbiYmKEFycmF5LmlzQXJyYXkobXNbbi5pZF0uZGVzY3JpcHRpb24pPyhtc1tuLmlkXS5zaGFwZT0icmVjdFdpdGhUaXRsZSIsbXNbbi5pZF0uZGVzY3JpcHRpb24ucHVzaChuLmRlc2NyaXB0aW9uKSk6bXNbbi5pZF0uZGVzY3JpcHRpb24ubGVuZ3RoPjA/KG1zW24uaWRdLnNoYXBlPSJyZWN0V2l0aFRpdGxlIixtc1tuLmlkXS5kZXNjcmlwdGlvbj09PW4uaWQ/bXNbbi5pZF0uZGVzY3JpcHRpb249W24uZGVzY3JpcHRpb25dOm1zW24uaWRdLmRlc2NyaXB0aW9uPVttc1tuLmlkXS5kZXNjcmlwdGlvbixuLmRlc2NyaXB0aW9uXSk6KG1zW24uaWRdLnNoYXBlPSJyZWN0Iixtc1tuLmlkXS5kZXNjcmlwdGlvbj1uLmRlc2NyaXB0aW9uKSksIW1zW24uaWRdLnR5cGUmJm4uZG9jJiYoby5pbmZvKCJTZXR0aW5nIGNsdXN0ZXIgZm9yICIsbi5pZCxfcyhuKSksbXNbbi5pZF0udHlwZT0iZ3JvdXAiLG1zW24uaWRdLmRpcj1fcyhuKSxtc1tuLmlkXS5zaGFwZT0iZGl2aWRlciI9PT1uLnR5cGU/ImRpdmlkZXIiOiJyb3VuZGVkV2l0aFRpdGxlIixtc1tuLmlkXS5jbGFzc2VzPW1zW24uaWRdLmNsYXNzZXMrIiAiKyhyPyJzdGF0ZWRpYWdyYW0tY2x1c3RlciBzdGF0ZWRpYWdyYW0tY2x1c3Rlci1hbHQiOiJzdGF0ZWRpYWdyYW0tY2x1c3RlciIpKTt2YXIgYT17bGFiZWxTdHlsZToiIixzaGFwZTptc1tuLmlkXS5zaGFwZSxsYWJlbFRleHQ6bXNbbi5pZF0uZGVzY3JpcHRpb24sY2xhc3Nlczptc1tuLmlkXS5jbGFzc2VzLHN0eWxlOiIiLGlkOm4uaWQsZGlyOm1zW24uaWRdLmRpcixkb21JZDoic3RhdGUtIituLmlkKyItIiticyx0eXBlOm1zW24uaWRdLnR5cGUscGFkZGluZzoxNX07aWYobi5ub3RlKXt2YXIgcz17bGFiZWxTdHlsZToiIixzaGFwZToibm90ZSIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6InN0YXRlZGlhZ3JhbS1ub3RlIixzdHlsZToiIixpZDpuLmlkKyItLS0tbm90ZS0iK2JzLGRvbUlkOiJzdGF0ZS0iK24uaWQrIi0tLS1ub3RlLSIrYnMsdHlwZTptc1tuLmlkXS50eXBlLHBhZGRpbmc6MTV9LGM9e2xhYmVsU3R5bGU6IiIsc2hhcGU6Im5vdGVHcm91cCIsbGFiZWxUZXh0Om4ubm90ZS50ZXh0LGNsYXNzZXM6bXNbbi5pZF0uY2xhc3NlcyxzdHlsZToiIixpZDpuLmlkKyItLS0tcGFyZW50Iixkb21JZDoic3RhdGUtIituLmlkKyItLS0tcGFyZW50LSIrYnMsdHlwZToiZ3JvdXAiLHBhZGRpbmc6MH07YnMrKyx0LnNldE5vZGUobi5pZCsiLS0tLXBhcmVudCIsYyksdC5zZXROb2RlKHMuaWQscyksdC5zZXROb2RlKG4uaWQsYSksdC5zZXRQYXJlbnQobi5pZCxuLmlkKyItLS0tcGFyZW50IiksdC5zZXRQYXJlbnQocy5pZCxuLmlkKyItLS0tcGFyZW50Iik7dmFyIHU9bi5pZCxsPXMuaWQ7ImxlZnQgb2YiPT09bi5ub3RlLnBvc2l0aW9uJiYodT1zLmlkLGw9bi5pZCksdC5zZXRFZGdlKHUsbCx7YXJyb3doZWFkOiJub25lIixhcnJvd1R5cGU6IiIsc3R5bGU6ImZpbGw6bm9uZSIsbGFiZWxTdHlsZToiIixjbGFzc2VzOiJ0cmFuc2l0aW9uIG5vdGUtZWRnZSIsYXJyb3doZWFkU3R5bGU6ImZpbGw6ICMzMzMiLGxhYmVscG9zOiJjIixsYWJlbFR5cGU6InRleHQiLHRoaWNrbmVzczoibm9ybWFsIn0pfWVsc2UgdC5zZXROb2RlKG4uaWQsYSl9ZSYmInJvb3QiIT09ZS5pZCYmKG8udHJhY2UoIlNldHRpbmcgbm9kZSAiLG4uaWQsIiB0byBiZSBjaGlsZCBvZiBpdHMgcGFyZW50ICIsZS5pZCksdC5zZXRQYXJlbnQobi5pZCxlLmlkKSksbi5kb2MmJihvLnRyYWNlKCJBZGRpbmcgbm9kZXMgY2hpbGRyZW4gIikseHModCxuLG4uZG9jLCFyKSl9LGJzPTAseHM9ZnVuY3Rpb24odCxlLG4scil7by50cmFjZSgiaXRlbXMiLG4pLG4uZm9yRWFjaCgoZnVuY3Rpb24obil7aWYoInN0YXRlIj09PW4uc3RtdHx8ImRlZmF1bHQiPT09bi5zdG10KXZzKHQsZSxuLHIpO2Vsc2UgaWYoInJlbGF0aW9uIj09PW4uc3RtdCl7dnModCxlLG4uc3RhdGUxLHIpLHZzKHQsZSxuLnN0YXRlMixyKTt2YXIgaT17aWQ6ImVkZ2UiK2JzLGFycm93aGVhZDoibm9ybWFsIixhcnJvd1R5cGVFbmQ6ImFycm93X2JhcmIiLHN0eWxlOiJmaWxsOm5vbmUiLGxhYmVsU3R5bGU6IiIsbGFiZWw6bi5kZXNjcmlwdGlvbixhcnJvd2hlYWRTdHlsZToiZmlsbDogIzMzMyIsbGFiZWxwb3M6ImMiLGxhYmVsVHlwZToidGV4dCIsdGhpY2tuZXNzOiJub3JtYWwiLGNsYXNzZXM6InRyYW5zaXRpb24ifSxhPW4uc3RhdGUxLmlkLG89bi5zdGF0ZTIuaWQ7dC5zZXRFZGdlKGEsbyxpLGJzKSxicysrfX0pKX0sX3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1lfHwiVEIiO2lmKHQuZG9jKWZvcih2YXIgcj0wO3I8dC5kb2MubGVuZ3RoO3IrKyl7dmFyIGk9dC5kb2Nbcl07ImRpciI9PT1pLnN0bXQmJihuPWkudmFsdWUpfXJldHVybiBufSxrcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXModCksbj0wO248ZS5sZW5ndGg7bisrKWdzW2Vbbl1dPXRbZVtuXV19LHdzPWZ1bmN0aW9uKHQsZSl7by5pbmZvKCJEcmF3aW5nIHN0YXRlIGRpYWdyYW0gKHYyKSIsZSksZXMuY2xlYXIoKSxtcz17fTt2YXIgbj16by5hLnBhcnNlcjtuLnl5PWVzLG4ucGFyc2UodCk7dmFyIHI9ZXMuZ2V0RGlyZWN0aW9uKCk7dm9pZCAwPT09ciYmKHI9IkxSIik7dmFyIGk9aGUoKS5zdGF0ZSxhPWkubm9kZVNwYWNpbmd8fDUwLHM9aS5yYW5rU3BhY2luZ3x8NTA7by5pbmZvKGVzLmdldFJvb3REb2NWMigpKSxlcy5leHRyYWN0KGVzLmdldFJvb3REb2NWMigpKSxvLmluZm8oZXMuZ2V0Um9vdERvY1YyKCkpO3ZhciBjPW5ldyBMZS5hLkdyYXBoKHttdWx0aWdyYXBoOiEwLGNvbXBvdW5kOiEwfSkuc2V0R3JhcGgoe3JhbmtkaXI6X3MoZXMuZ2V0Um9vdERvY1YyKCkpLG5vZGVzZXA6YSxyYW5rc2VwOnMsbWFyZ2lueDo4LG1hcmdpbnk6OH0pLnNldERlZmF1bHRFZGdlTGFiZWwoKGZ1bmN0aW9uKCl7cmV0dXJue319KSk7dnMoYyx2b2lkIDAsZXMuZ2V0Um9vdERvY1YyKCksITApO3ZhciBsPU9iamVjdCh1LnNlbGVjdCkoJ1tpZD0iJy5jb25jYXQoZSwnIl0nKSksaD1PYmplY3QodS5zZWxlY3QpKCIjIitlKyIgZyIpO1JuKGgsYyxbImJhcmIiXSwic3RhdGVkaWFncmFtIixlKTt2YXIgZj1sLm5vZGUoKS5nZXRCQm94KCksZD1mLndpZHRoKzE2LHA9Zi5oZWlnaHQrMTY7bC5hdHRyKCJjbGFzcyIsInN0YXRlZGlhZ3JhbSIpO3ZhciB5PWwubm9kZSgpLmdldEJCb3goKTt0ZShsLHAsMS43NSpkLGkudXNlTWF4V2lkdGgpO3ZhciBnPSIiLmNvbmNhdCh5LngtOCwiICIpLmNvbmNhdCh5LnktOCwiICIpLmNvbmNhdChkLCIgIikuY29uY2F0KHApO28uZGVidWcoInZpZXdCb3ggIi5jb25jYXQoZykpLGwuYXR0cigidmlld0JveCIsZyk7Zm9yKHZhciBtPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZD0iJytlKyciXSAuZWRnZUxhYmVsIC5sYWJlbCcpLHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIGI9bVt2XSx4PWIuZ2V0QkJveCgpLF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInJlY3QiKTtfLnNldEF0dHJpYnV0ZSgicngiLDApLF8uc2V0QXR0cmlidXRlKCJyeSIsMCksXy5zZXRBdHRyaWJ1dGUoIndpZHRoIix4LndpZHRoKSxfLnNldEF0dHJpYnV0ZSgiaGVpZ2h0Iix4LmhlaWdodCksYi5pbnNlcnRCZWZvcmUoXyxiLmZpcnN0Q2hpbGQpfX07ZnVuY3Rpb24gVHModCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIEVzKHQpfSh0KXx8ZnVuY3Rpb24odCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPXRbU3ltYm9sLml0ZXJhdG9yXXx8bnVsbCE9dFsiQEBpdGVyYXRvciJdKXJldHVybiBBcnJheS5mcm9tKHQpfSh0KXx8ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm47aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBFcyh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTsiT2JqZWN0Ij09PW4mJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSk7aWYoIk1hcCI9PT1ufHwiU2V0Ij09PW4pcmV0dXJuIEFycmF5LmZyb20odCk7aWYoIkFyZ3VtZW50cyI9PT1ufHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gRXModCxlKX0odCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gRXModCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIG49MCxyPW5ldyBBcnJheShlKTtuPGU7bisrKXJbbl09dFtuXTtyZXR1cm4gcn12YXIgQ3M9IiIsU3M9IiIsQXM9W10sTXM9W10sT3M9W10sTnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9ITAsZT0wO2U8T3MubGVuZ3RoO2UrKylPc1tlXS5wcm9jZXNzZWQsdD10JiZPc1tlXS5wcm9jZXNzZWQ7cmV0dXJuIHR9LEJzPXtwYXJzZURpcmVjdGl2ZTpmdW5jdGlvbih0LGUsbil7eWMucGFyc2VEaXJlY3RpdmUodGhpcyx0LGUsbil9LGdldENvbmZpZzpmdW5jdGlvbigpe3JldHVybiBoZSgpLmpvdXJuZXl9LGNsZWFyOmZ1bmN0aW9uKCl7QXMubGVuZ3RoPTAsTXMubGVuZ3RoPTAsU3M9IiIsQ3M9IiIsT3MubGVuZ3RoPTB9LHNldFRpdGxlOmZ1bmN0aW9uKHQpe0NzPXR9LGdldFRpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIENzfSxhZGRTZWN0aW9uOmZ1bmN0aW9uKHQpe1NzPXQsQXMucHVzaCh0KX0sZ2V0U2VjdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gQXN9LGdldFRhc2tzOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PU5zKCksZT0wOyF0JiZlPDEwMDspdD1OcygpLGUrKztyZXR1cm4gTXMucHVzaC5hcHBseShNcyxPcyksTXN9LGFkZFRhc2s6ZnVuY3Rpb24odCxlKXt2YXIgbj1lLnN1YnN0cigxKS5zcGxpdCgiOiIpLHI9MCxpPVtdOzE9PT1uLmxlbmd0aD8ocj1OdW1iZXIoblswXSksaT1bXSk6KHI9TnVtYmVyKG5bMF0pLGk9blsxXS5zcGxpdCgiLCIpKTt2YXIgYT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJpbSgpfSkpLG89e3NlY3Rpb246U3MsdHlwZTpTcyxwZW9wbGU6YSx0YXNrOnQsc2NvcmU6cn07T3MucHVzaChvKX0sYWRkVGFza09yZzpmdW5jdGlvbih0KXt2YXIgZT17c2VjdGlvbjpTcyx0eXBlOlNzLGRlc2NyaXB0aW9uOnQsdGFzazp0LGNsYXNzZXM6W119O01zLnB1c2goZSl9LGdldEFjdG9yczpmdW5jdGlvbigpe3JldHVybiB0PVtdLE1zLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucGVvcGxlJiZ0LnB1c2guYXBwbHkodCxUcyhlLnBlb3BsZSkpfSkpLFRzKG5ldyBTZXQodCkpLnNvcnQoKTt2YXIgdH19LERzPW4oMjgpLExzPW4ubihEcyksSXM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgicmVjdCIpO3JldHVybiBuLmF0dHIoIngiLGUueCksbi5hdHRyKCJ5IixlLnkpLG4uYXR0cigiZmlsbCIsZS5maWxsKSxuLmF0dHIoInN0cm9rZSIsZS5zdHJva2UpLG4uYXR0cigid2lkdGgiLGUud2lkdGgpLG4uYXR0cigiaGVpZ2h0IixlLmhlaWdodCksbi5hdHRyKCJyeCIsZS5yeCksbi5hdHRyKCJyeSIsZS5yeSksdm9pZCAwIT09ZS5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsZS5jbGFzcyksbn0sUnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmFwcGVuZCgiY2lyY2xlIik7cmV0dXJuIG4uYXR0cigiY3giLGUuY3gpLG4uYXR0cigiY3kiLGUuY3kpLG4uYXR0cigiY2xhc3MiLCJhY3Rvci0iK2UucG9zKSxuLmF0dHIoImZpbGwiLGUuZmlsbCksbi5hdHRyKCJzdHJva2UiLGUuc3Ryb2tlKSxuLmF0dHIoInIiLGUuciksdm9pZCAwIT09bi5jbGFzcyYmbi5hdHRyKCJjbGFzcyIsbi5jbGFzcyksdm9pZCAwIT09ZS50aXRsZSYmbi5hcHBlbmQoInRpdGxlIikudGV4dChlLnRpdGxlKSxufSxGcz1mdW5jdGlvbih0LGUpe3ZhciBuPWUudGV4dC5yZXBsYWNlKC88YnJccypcLz8+L2dpLCIgIikscj10LmFwcGVuZCgidGV4dCIpO3IuYXR0cigieCIsZS54KSxyLmF0dHIoInkiLGUueSksci5hdHRyKCJjbGFzcyIsImxlZ2VuZCIpLHIuc3R5bGUoInRleHQtYW5jaG9yIixlLmFuY2hvciksdm9pZCAwIT09ZS5jbGFzcyYmci5hdHRyKCJjbGFzcyIsZS5jbGFzcyk7dmFyIGk9ci5hcHBlbmQoInRzcGFuIik7cmV0dXJuIGkuYXR0cigieCIsZS54KzIqZS50ZXh0TWFyZ2luKSxpLnRleHQobikscn0sUHM9LTEsanM9ZnVuY3Rpb24oKXtyZXR1cm57eDowLHk6MCx3aWR0aDoxMDAsYW5jaG9yOiJzdGFydCIsaGVpZ2h0OjEwMCxyeDowLHJ5OjB9fSxZcz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4saSxhLG8scyxjKXtyKGUuYXBwZW5kKCJ0ZXh0IikuYXR0cigieCIsbithLzIpLmF0dHIoInkiLGkrby8yKzUpLnN0eWxlKCJmb250LWNvbG9yIixjKS5zdHlsZSgidGV4dC1hbmNob3IiLCJtaWRkbGUiKS50ZXh0KHQpLHMpfWZ1bmN0aW9uIGUodCxlLG4saSxhLG8scyxjLHUpe2Zvcih2YXIgbD1jLnRhc2tGb250U2l6ZSxoPWMudGFza0ZvbnRGYW1pbHksZj10LnNwbGl0KC88YnJccypcLz8+L2dpKSxkPTA7ZDxmLmxlbmd0aDtkKyspe3ZhciBwPWQqbC1sKihmLmxlbmd0aC0xKS8yLHk9ZS5hcHBlbmQoInRleHQiKS5hdHRyKCJ4IixuK2EvMikuYXR0cigieSIsaSkuYXR0cigiZmlsbCIsdSkuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImZvbnQtc2l6ZSIsbCkuc3R5bGUoImZvbnQtZmFtaWx5IixoKTt5LmFwcGVuZCgidHNwYW4iKS5hdHRyKCJ4IixuK2EvMikuYXR0cigiZHkiLHApLnRleHQoZltkXSkseS5hdHRyKCJ5IixpK28vMikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwiY2VudHJhbCIpLHIoeSxzKX19ZnVuY3Rpb24gbih0LG4saSxhLG8scyxjLHUpe3ZhciBsPW4uYXBwZW5kKCJzd2l0Y2giKSxoPWwuYXBwZW5kKCJmb3JlaWduT2JqZWN0IikuYXR0cigieCIsaSkuYXR0cigieSIsYSkuYXR0cigid2lkdGgiLG8pLmF0dHIoImhlaWdodCIscykuYXR0cigicG9zaXRpb24iLCJmaXhlZCIpLmFwcGVuZCgieGh0bWw6ZGl2Iikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZSIpLnN0eWxlKCJoZWlnaHQiLCIxMDAlIikuc3R5bGUoIndpZHRoIiwiMTAwJSIpO2guYXBwZW5kKCJkaXYiKS5hdHRyKCJjbGFzcyIsImxhYmVsIikuc3R5bGUoImRpc3BsYXkiLCJ0YWJsZS1jZWxsIikuc3R5bGUoInRleHQtYWxpZ24iLCJjZW50ZXIiKS5zdHlsZSgidmVydGljYWwtYWxpZ24iLCJtaWRkbGUiKS50ZXh0KHQpLGUodCxsLGksYSxvLHMsYyx1KSxyKGgsYyl9ZnVuY3Rpb24gcih0LGUpe2Zvcih2YXIgbiBpbiBlKW4gaW4gZSYmdC5hdHRyKG4sZVtuXSl9cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiJmbyI9PT1yLnRleHRQbGFjZW1lbnQ/bjoib2xkIj09PXIudGV4dFBsYWNlbWVudD90OmV9fSgpLHpzPVJzLFVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LmFwcGVuZCgiZyIpLGk9anMoKTtpLng9ZS54LGkueT1lLnksaS5maWxsPWUuZmlsbCxpLndpZHRoPW4ud2lkdGgsaS5oZWlnaHQ9bi5oZWlnaHQsaS5jbGFzcz0iam91cm5leS1zZWN0aW9uIHNlY3Rpb24tdHlwZS0iK2UubnVtLGkucng9MyxpLnJ5PTMsSXMocixpKSxZcyhuKShlLnRleHQscixpLngsaS55LGkud2lkdGgsaS5oZWlnaHQse2NsYXNzOiJqb3VybmV5LXNlY3Rpb24gc2VjdGlvbi10eXBlLSIrZS5udW19LG4sZS5jb2xvdXIpfSwkcz1Gcyxxcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9ZS54K24ud2lkdGgvMixpPXQuYXBwZW5kKCJnIik7UHMrKzt2YXIgYSxvLHM7aS5hcHBlbmQoImxpbmUiKS5hdHRyKCJpZCIsInRhc2siK1BzKS5hdHRyKCJ4MSIscikuYXR0cigieTEiLGUueSkuYXR0cigieDIiLHIpLmF0dHIoInkyIiw0NTApLmF0dHIoImNsYXNzIiwidGFzay1saW5lIikuYXR0cigic3Ryb2tlLXdpZHRoIiwiMXB4IikuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsIjQgMiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxhPWksbz17Y3g6cixjeTozMDArMzAqKDUtZS5zY29yZSksc2NvcmU6ZS5zY29yZX0sYS5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KS5hdHRyKCJjeSIsby5jeSkuYXR0cigiY2xhc3MiLCJmYWNlIikuYXR0cigiciIsMTUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigib3ZlcmZsb3ciLCJ2aXNpYmxlIiksKHM9YS5hcHBlbmQoImciKSkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjeCIsby5jeC01KS5hdHRyKCJjeSIsby5jeS01KS5hdHRyKCJyIiwxLjUpLmF0dHIoInN0cm9rZS13aWR0aCIsMikuYXR0cigiZmlsbCIsIiM2NjYiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iikscy5hcHBlbmQoImNpcmNsZSIpLmF0dHIoImN4IixvLmN4KzUpLmF0dHIoImN5IixvLmN5LTUpLmF0dHIoInIiLDEuNSkuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJmaWxsIiwiIzY2NiIpLmF0dHIoInN0cm9rZSIsIiM2NjYiKSxvLnNjb3JlPjM/ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KHUuYXJjKSgpLnN0YXJ0QW5nbGUoTWF0aC5QSS8yKS5lbmRBbmdsZShNYXRoLlBJLzIqMykuaW5uZXJSYWRpdXMoNy41KS5vdXRlclJhZGl1cygxNS8yLjIpO3QuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJtb3V0aCIpLmF0dHIoImQiLGUpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28uY3grIiwiKyhvLmN5KzIpKyIpIil9KHMpOm8uc2NvcmU8Mz9mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QodS5hcmMpKCkuc3RhcnRBbmdsZSgzKk1hdGguUEkvMikuZW5kQW5nbGUoTWF0aC5QSS8yKjUpLmlubmVyUmFkaXVzKDcuNSkub3V0ZXJSYWRpdXMoMTUvMi4yKTt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJkIixlKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitvLmN4KyIsIisoby5jeSs3KSsiKSIpfShzKTpmdW5jdGlvbih0KXt0LmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2UiLDIpLmF0dHIoIngxIixvLmN4LTUpLmF0dHIoInkxIixvLmN5KzcpLmF0dHIoIngyIixvLmN4KzUpLmF0dHIoInkyIixvLmN5KzcpLmF0dHIoImNsYXNzIiwibW91dGgiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxcHgiKS5hdHRyKCJzdHJva2UiLCIjNjY2Iil9KHMpO3ZhciBjPWpzKCk7Yy54PWUueCxjLnk9ZS55LGMuZmlsbD1lLmZpbGwsYy53aWR0aD1uLndpZHRoLGMuaGVpZ2h0PW4uaGVpZ2h0LGMuY2xhc3M9InRhc2sgdGFzay10eXBlLSIrZS5udW0sYy5yeD0zLGMucnk9MyxJcyhpLGMpO3ZhciBsPWUueCsxNDtlLnBlb3BsZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgbj1lLmFjdG9yc1t0XS5jb2xvcixyPXtjeDpsLGN5OmUueSxyOjcsZmlsbDpuLHN0cm9rZToiIzAwMCIsdGl0bGU6dCxwb3M6ZS5hY3RvcnNbdF0ucG9zaXRpb259O1JzKGksciksbCs9MTB9KSksWXMobikoZS50YXNrLGksYy54LGMueSxjLndpZHRoLGMuaGVpZ2h0LHtjbGFzczoidGFzayJ9LG4sZS5jb2xvdXIpfSxXcz1mdW5jdGlvbih0KXt0LmFwcGVuZCgiZGVmcyIpLmFwcGVuZCgibWFya2VyIikuYXR0cigiaWQiLCJhcnJvd2hlYWQiKS5hdHRyKCJyZWZYIiw1KS5hdHRyKCJyZWZZIiwyKS5hdHRyKCJtYXJrZXJXaWR0aCIsNikuYXR0cigibWFya2VySGVpZ2h0Iiw0KS5hdHRyKCJvcmllbnQiLCJhdXRvIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0gMCwwIFYgNCBMNiwyIFoiKX07RHMucGFyc2VyLnl5PUJzO3ZhciBIcz17fTt2YXIgVnM9aGUoKS5qb3VybmV5LEdzPWhlKCkuam91cm5leS5sZWZ0TWFyZ2luLFhzPXtkYXRhOntzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdmVydGljYWxQb3M6MCxzZXF1ZW5jZUl0ZW1zOltdLGluaXQ6ZnVuY3Rpb24oKXt0aGlzLnNlcXVlbmNlSXRlbXM9W10sdGhpcy5kYXRhPXtzdGFydHg6dm9pZCAwLHN0b3B4OnZvaWQgMCxzdGFydHk6dm9pZCAwLHN0b3B5OnZvaWQgMH0sdGhpcy52ZXJ0aWNhbFBvcz0wfSx1cGRhdGVWYWw6ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09dFtlXT90W2VdPW46dFtlXT1yKG4sdFtlXSl9LHVwZGF0ZUJvdW5kczpmdW5jdGlvbih0LGUsbixyKXt2YXIgaSxhPWhlKCkuam91cm5leSxvPXRoaXMscz0wO3RoaXMuc2VxdWVuY2VJdGVtcy5mb3JFYWNoKChmdW5jdGlvbihjKXtzKys7dmFyIHU9by5zZXF1ZW5jZUl0ZW1zLmxlbmd0aC1zKzE7by51cGRhdGVWYWwoYywic3RhcnR5IixlLXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKGMsInN0b3B5IixyK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpLG8udXBkYXRlVmFsKFhzLmRhdGEsInN0YXJ0eCIsdC11KmEuYm94TWFyZ2luLE1hdGgubWluKSxvLnVwZGF0ZVZhbChYcy5kYXRhLCJzdG9weCIsbit1KmEuYm94TWFyZ2luLE1hdGgubWF4KSwiYWN0aXZhdGlvbiIhPT1pJiYoby51cGRhdGVWYWwoYywic3RhcnR4Iix0LXUqYS5ib3hNYXJnaW4sTWF0aC5taW4pLG8udXBkYXRlVmFsKGMsInN0b3B4IixuK3UqYS5ib3hNYXJnaW4sTWF0aC5tYXgpLG8udXBkYXRlVmFsKFhzLmRhdGEsInN0YXJ0eSIsZS11KmEuYm94TWFyZ2luLE1hdGgubWluKSxvLnVwZGF0ZVZhbChYcy5kYXRhLCJzdG9weSIscit1KmEuYm94TWFyZ2luLE1hdGgubWF4KSl9KSl9LGluc2VydDpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1NYXRoLm1pbih0LG4pLGE9TWF0aC5tYXgodCxuKSxvPU1hdGgubWluKGUscikscz1NYXRoLm1heChlLHIpO3RoaXMudXBkYXRlVmFsKFhzLmRhdGEsInN0YXJ0eCIsaSxNYXRoLm1pbiksdGhpcy51cGRhdGVWYWwoWHMuZGF0YSwic3RhcnR5IixvLE1hdGgubWluKSx0aGlzLnVwZGF0ZVZhbChYcy5kYXRhLCJzdG9weCIsYSxNYXRoLm1heCksdGhpcy51cGRhdGVWYWwoWHMuZGF0YSwic3RvcHkiLHMsTWF0aC5tYXgpLHRoaXMudXBkYXRlQm91bmRzKGksbyxhLHMpfSxidW1wVmVydGljYWxQb3M6ZnVuY3Rpb24odCl7dGhpcy52ZXJ0aWNhbFBvcz10aGlzLnZlcnRpY2FsUG9zK3QsdGhpcy5kYXRhLnN0b3B5PXRoaXMudmVydGljYWxQb3N9LGdldFZlcnRpY2FsUG9zOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmVydGljYWxQb3N9LGdldEJvdW5kczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxacz1Wcy5zZWN0aW9uRmlsbHMsS3M9VnMuc2VjdGlvbkNvbG91cnMsUXM9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj1oZSgpLmpvdXJuZXksaT0iIixhPW4rKDIqci5oZWlnaHQrci5kaWFncmFtTWFyZ2luWSksbz0wLHM9IiNDQ0MiLGM9ImJsYWNrIix1PTAsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgaD1lW2xdO2lmKGkhPT1oLnNlY3Rpb24pe3M9WnNbbyVacy5sZW5ndGhdLHU9byVacy5sZW5ndGgsYz1Lc1tvJUtzLmxlbmd0aF07dmFyIGY9e3g6bCpyLnRhc2tNYXJnaW4rbCpyLndpZHRoK0dzLHk6NTAsdGV4dDpoLnNlY3Rpb24sZmlsbDpzLG51bTp1LGNvbG91cjpjfTtVcyh0LGYsciksaT1oLnNlY3Rpb24sbysrfXZhciBkPWgucGVvcGxlLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gSHNbZV0mJih0W2VdPUhzW2VdKSx0fSkse30pO2gueD1sKnIudGFza01hcmdpbitsKnIud2lkdGgrR3MsaC55PWEsaC53aWR0aD1yLmRpYWdyYW1NYXJnaW5YLGguaGVpZ2h0PXIuZGlhZ3JhbU1hcmdpblksaC5jb2xvdXI9YyxoLmZpbGw9cyxoLm51bT11LGguYWN0b3JzPWQscXModCxoLHIpLFhzLmluc2VydChoLngsaC55LGgueCtoLndpZHRoK3IudGFza01hcmdpbiw0NTApfX0sSnM9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7VnNbZV09dFtlXX0pKX0sdGM9ZnVuY3Rpb24odCxlKXt2YXIgbj1oZSgpLmpvdXJuZXk7RHMucGFyc2VyLnl5LmNsZWFyKCksRHMucGFyc2VyLnBhcnNlKHQrIlxuIiksWHMuaW5pdCgpO3ZhciByPU9iamVjdCh1LnNlbGVjdCkoIiMiK2UpO3IuYXR0cigieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksV3Mocik7dmFyIGk9RHMucGFyc2VyLnl5LmdldFRhc2tzKCksYT1Ecy5wYXJzZXIueXkuZ2V0VGl0bGUoKSxvPURzLnBhcnNlci55eS5nZXRBY3RvcnMoKTtmb3IodmFyIHMgaW4gSHMpZGVsZXRlIEhzW3NdO3ZhciBjPTA7by5mb3JFYWNoKChmdW5jdGlvbih0KXtIc1t0XT17Y29sb3I6bi5hY3RvckNvbG91cnNbYyVuLmFjdG9yQ29sb3Vycy5sZW5ndGhdLHBvc2l0aW9uOmN9LGMrK30pKSxmdW5jdGlvbih0KXt2YXIgZT1oZSgpLmpvdXJuZXksbj02MDtPYmplY3Qua2V5cyhIcykuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9SHNbcl0uY29sb3IsYT17Y3g6MjAsY3k6bixyOjcsZmlsbDppLHN0cm9rZToiIzAwMCIscG9zOkhzW3JdLnBvc2l0aW9ufTt6cyh0LGEpO3ZhciBvPXt4OjQwLHk6bis3LGZpbGw6IiM2NjYiLHRleHQ6cix0ZXh0TWFyZ2luOjV8ZS5ib3hUZXh0TWFyZ2lufTskcyh0LG8pLG4rPTIwfSkpfShyKSxYcy5pbnNlcnQoMCwwLEdzLDUwKk9iamVjdC5rZXlzKEhzKS5sZW5ndGgpLFFzKHIsaSwwKTt2YXIgbD1Ycy5nZXRCb3VuZHMoKTthJiZyLmFwcGVuZCgidGV4dCIpLnRleHQoYSkuYXR0cigieCIsR3MpLmF0dHIoImZvbnQtc2l6ZSIsIjRleCIpLmF0dHIoImZvbnQtd2VpZ2h0IiwiYm9sZCIpLmF0dHIoInkiLDI1KTt2YXIgaD1sLnN0b3B5LWwuc3RhcnR5KzIqbi5kaWFncmFtTWFyZ2luWSxmPUdzK2wuc3RvcHgrMipuLmRpYWdyYW1NYXJnaW5YO3RlKHIsaCxmLG4udXNlTWF4V2lkdGgpLHIuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLEdzKS5hdHRyKCJ5MSIsNCpuLmhlaWdodCkuYXR0cigieDIiLGYtR3MtNCkuYXR0cigieTIiLDQqbi5oZWlnaHQpLmF0dHIoInN0cm9rZS13aWR0aCIsNCkuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJtYXJrZXItZW5kIiwidXJsKCNhcnJvd2hlYWQpIik7dmFyIGQ9YT83MDowO3IuYXR0cigidmlld0JveCIsIiIuY29uY2F0KGwuc3RhcnR4LCIgLTI1ICIpLmNvbmNhdChmLCIgIikuY29uY2F0KGgrZCkpLHIuYXR0cigicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSxyLmF0dHIoImhlaWdodCIsaCtkKzI1KX0sZWM9e30sbmM9ZnVuY3Rpb24odCl7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZWNbZV09dFtlXX0pKX0scmM9ZnVuY3Rpb24odCxlKXt0cnl7by5kZWJ1ZygiUmVuZXJpbmcgc3ZnIGZvciBzeW50YXggZXJyb3JcbiIpO3ZhciBuPU9iamVjdCh1LnNlbGVjdCkoIiMiK3QpLHI9bi5hcHBlbmQoImciKTtyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDExLjMxMywxMjMuMzEzYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyLTkuMzc1LDkuMzc1LTIwLjY4OC0yMC42ODhjLTEyLjQ4NC0xMi41LTMyLjc2Ni0xMi41LTQ1LjI1LDBsLTE2LDE2Yy0xLjI2MSwxLjI2MS0yLjMwNCwyLjY0OC0zLjMxLDQuMDUxLTIxLjczOS04LjU2MS00NS4zMjQtMTMuNDI2LTcwLjA2NS0xMy40MjYtMTA1Ljg2NywwLTE5Miw4Ni4xMzMtMTkyLDE5MnM4Ni4xMzMsMTkyIDE5MiwxOTIgMTkyLTg2LjEzMyAxOTItMTkyYzAtMjQuNzQxLTQuODY0LTQ4LjMyNy0xMy40MjYtNzAuMDY1IDEuNDAyLTEuMDA3IDIuNzktMi4wNDkgNC4wNTEtMy4zMWwxNi0xNmMxMi41LTEyLjQ5MiAxMi41LTMyLjc1OCAwLTQ1LjI1bC0yMC42ODgtMjAuNjg4IDkuMzc1LTkuMzc1IDMyLjAwMS0zMS45OTl6bS0yMTkuMzEzLDEwMC42ODdjLTUyLjkzOCwwLTk2LDQzLjA2My05Niw5NiAwLDguODM2LTcuMTY0LDE2LTE2LDE2cy0xNi03LjE2NC0xNi0xNmMwLTcwLjU3OCA1Ny40MjItMTI4IDEyOC0xMjggOC44MzYsMCAxNiw3LjE2NCAxNiwxNnMtNy4xNjQsMTYtMTYsMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQ1OS4wMiwxNDguOThjLTYuMjUtNi4yNS0xNi4zNzUtNi4yNS0yMi42MjUsMHMtNi4yNSwxNi4zNzUgMCwyMi42MjVsMTYsMTZjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4IDYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNWwtMTYuMDAxLTE2eiIpLHIuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJlcnJvci1pY29uIikuYXR0cigiZCIsIm0zNDAuMzk1LDc1LjYwNWMzLjEyNSwzLjEyNSA3LjIxOSw0LjY4OCAxMS4zMTMsNC42ODggNC4wOTQsMCA4LjE4OC0xLjU2MyAxMS4zMTMtNC42ODggNi4yNS02LjI1IDYuMjUtMTYuMzc1IDAtMjIuNjI1bC0xNi0xNmMtNi4yNS02LjI1LTE2LjM3NS02LjI1LTIyLjYyNSwwcy02LjI1LDE2LjM3NSAwLDIyLjYyNWwxNS45OTksMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQwMCw2NGM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2di0zMmMwLTguODM2LTcuMTU2LTE2LTE2LTE2LTguODQ0LDAtMTYsNy4xNjQtMTYsMTZ2MzJjMCw4LjgzNiA3LjE1NiwxNiAxNiwxNnoiKSxyLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZXJyb3ItaWNvbiIpLmF0dHIoImQiLCJtNDk2LDk2LjU4NmgtMzJjLTguODQ0LDAtMTYsNy4xNjQtMTYsMTYgMCw4LjgzNiA3LjE1NiwxNiAxNiwxNmgzMmM4Ljg0NCwwIDE2LTcuMTY0IDE2LTE2IDAtOC44MzYtNy4xNTYtMTYtMTYtMTZ6Iiksci5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsImVycm9yLWljb24iKS5hdHRyKCJkIiwibTQzNi45OCw3NS42MDVjMy4xMjUsMy4xMjUgNy4yMTksNC42ODggMTEuMzEzLDQuNjg4IDQuMDk0LDAgOC4xODgtMS41NjMgMTEuMzEzLTQuNjg4bDMyLTMyYzYuMjUtNi4yNSA2LjI1LTE2LjM3NSAwLTIyLjYyNXMtMTYuMzc1LTYuMjUtMjIuNjI1LDBsLTMyLDMyYy02LjI1MSw2LjI1LTYuMjUxLDE2LjM3NS0wLjAwMSwyMi42MjV6Iiksci5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxMjQwKS5hdHRyKCJ5IiwyNTApLmF0dHIoImZvbnQtc2l6ZSIsIjE1MHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgiU3ludGF4IGVycm9yIGluIGdyYXBoIiksci5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImVycm9yLXRleHQiKS5hdHRyKCJ4IiwxMDUwKS5hdHRyKCJ5Iiw0MDApLmF0dHIoImZvbnQtc2l6ZSIsIjEwMHB4Iikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIikudGV4dCgibWVybWFpZCB2ZXJzaW9uICIrZSksbi5hdHRyKCJoZWlnaHQiLDEwMCksbi5hdHRyKCJ3aWR0aCIsNDAwKSxuLmF0dHIoInZpZXdCb3giLCI3NjggMCA1MTIgNTEyIil9Y2F0Y2godCl7by5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIGluZm8gZGlhZ3JhbSIpLG8uZXJyb3IodC5tZXNzYWdlKX19LGljPWZ1bmN0aW9uKHQpe3JldHVybiJnLmNsYXNzR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmaWxsOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICBmb250LXNpemU6IDEwcHg7XG5cbiAgLnRpdGxlIHtcbiAgICBmb250LXdlaWdodDogYm9sZGVyO1xuICB9XG5cbn1cblxuLm5vZGVMYWJlbCwgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5jbGFzc1RleHQsIjtcbn1cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG59XG4ubGFiZWwgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmNsYXNzVGV4dCwiO1xufVxuLmVkZ2VMYWJlbCAubGFiZWwgc3BhbiB7XG4gIGJhY2tncm91bmQ6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbn1cblxuLmNsYXNzVGl0bGUge1xuICBmb250LXdlaWdodDogYm9sZGVyO1xufVxuLm5vZGUgcmVjdCxcbiAgLm5vZGUgY2lyY2xlLFxuICAubm9kZSBlbGxpcHNlLFxuICAubm9kZSBwb2x5Z29uLFxuICAubm9kZSBwYXRoIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuXG4uZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBzdHJva2U6IDE7XG59XG5cbmcuY2xpY2thYmxlIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG5nLmNsYXNzR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuY2xhc3NHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cblxuLmNsYXNzTGFiZWwgLmJveCB7XG4gIHN0cm9rZTogbm9uZTtcbiAgc3Ryb2tlLXdpZHRoOiAwO1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIG9wYWNpdHk6IDAuNTtcbn1cblxuLmNsYXNzTGFiZWwgLmxhYmVsIHtcbiAgZmlsbDogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5cbi5yZWxhdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLmRhc2hlZC1saW5le1xuICBzdHJva2UtZGFzaGFycmF5OiAzO1xufVxuXG4jY29tcG9zaXRpb25TdGFydCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNjb21wb3NpdGlvbkVuZCwgLmNvbXBvc2l0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsIC5kZXBlbmRlbmN5IHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNleHRlbnNpb25TdGFydCwgLmV4dGVuc2lvbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4jZXh0ZW5zaW9uRW5kLCAuZXh0ZW5zaW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvblN0YXJ0LCAuYWdncmVnYXRpb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIiAhaW1wb3J0YW50O1xuICBzdHJva2Utd2lkdGg6IDE7XG59XG5cbiNhZ2dyZWdhdGlvbkVuZCwgLmFnZ3JlZ2F0aW9uIHtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiICFpbXBvcnRhbnQ7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4uZWRnZVRlcm1pbmFscyB7XG4gIGZvbnQtc2l6ZTogMTFweDtcbn1cblxuIil9LGFjPWZ1bmN0aW9uKHQpe3JldHVybiIubGFiZWwge1xuICAgIGZvbnQtZmFtaWx5OiAiLmNvbmNhdCh0LmZvbnRGYW1pbHksIjtcbiAgICBjb2xvcjogIikuY29uY2F0KHQubm9kZVRleHRDb2xvcnx8dC50ZXh0Q29sb3IsIjtcbiAgfVxuICAuY2x1c3Rlci1sYWJlbCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cbiAgLmNsdXN0ZXItbGFiZWwgc3BhbiB7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5sYWJlbCB0ZXh0LHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gICAgY29sb3I6ICIpLmNvbmNhdCh0Lm5vZGVUZXh0Q29sb3J8fHQudGV4dENvbG9yLCI7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAyLjBweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5jbHVzdGVyQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jbHVzdGVyQm9yZGVyLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIH1cblxuICAuY2x1c3RlciB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuY2x1c3RlciBzcGFuIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG4gIC8vIC5jbHVzdGVyIGRpdiB7XG4gIC8vICAgY29sb3I6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgLy8gfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBiYWNrZ3JvdW5kOiAiKS5jb25jYXQodC50ZXJ0aWFyeUNvbG9yLCI7XG4gICAgYm9yZGVyOiAxcHggc29saWQgIikuY29uY2F0KHQuYm9yZGVyMiwiO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxMDA7XG4gIH1cbiIpfSxvYz1mdW5jdGlvbih0KXtyZXR1cm4iXG5kZWZzICNzdGF0ZWRpYWdyYW0tYmFyYkVuZCB7XG4gICAgZmlsbDogIi5jb25jYXQodC50cmFuc2l0aW9uQ29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnRyYW5zaXRpb25Db2xvciwiO1xuICB9XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgc3Ryb2tlOiBub25lO1xuICBmb250LXNpemU6IDEwcHg7XG59XG5nLnN0YXRlR3JvdXAgdGV4dCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICBzdHJva2U6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMTBweDtcblxufVxuZy5zdGF0ZUdyb3VwIC5zdGF0ZS10aXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnN0YXRlTGFiZWxDb2xvciwiO1xufVxuXG5nLnN0YXRlR3JvdXAgcmVjdCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG59XG5cbmcuc3RhdGVHcm91cCBsaW5lIHtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxO1xufVxuXG4udHJhbnNpdGlvbiB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQudHJhbnNpdGlvbkNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbiAgZmlsbDogbm9uZTtcbn1cblxuLnN0YXRlR3JvdXAgLmNvbXBvc2l0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuYmFja2dyb3VuZCwiO1xuICBib3JkZXItYm90dG9tOiAxcHhcbn1cblxuLnN0YXRlR3JvdXAgLmFsdC1jb21wb3NpdCB7XG4gIGZpbGw6ICNlMGUwZTA7XG4gIGJvcmRlci1ib3R0b206IDFweFxufVxuXG4uc3RhdGUtbm90ZSB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVCa2dDb2xvciwiO1xuXG4gIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gICAgZm9udC1zaXplOiAxMHB4O1xuICB9XG59XG5cbi5zdGF0ZUxhYmVsIC5ib3gge1xuICBzdHJva2U6IG5vbmU7XG4gIHN0cm9rZS13aWR0aDogMDtcbiAgZmlsbDogIikuY29uY2F0KHQubWFpbkJrZywiO1xuICBvcGFjaXR5OiAwLjU7XG59XG5cbi5lZGdlTGFiZWwgLmxhYmVsIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJhY2tncm91bmRDb2xvciwiO1xuICBvcGFjaXR5OiAwLjU7XG59XG4uZWRnZUxhYmVsIC5sYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQudHJhbnNpdGlvbkxhYmVsQ29sb3J8fHQudGVydGlhcnlUZXh0Q29sb3IsIjtcbn1cbi5sYWJlbCBkaXYgLmVkZ2VMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC50cmFuc2l0aW9uTGFiZWxDb2xvcnx8dC50ZXJ0aWFyeVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVMYWJlbCB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQuc3RhdGVMYWJlbENvbG9yLCI7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5ub2RlIGNpcmNsZS5zdGF0ZS1zdGFydCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgLmZvcmstam9pbiB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LnNwZWNpYWxTdGF0ZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3BlY2lhbFN0YXRlQ29sb3IsIjtcbn1cblxuLm5vZGUgY2lyY2xlLnN0YXRlLWVuZCB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmlubmVyRW5kQmFja2dyb3VuZCwiO1xuICBzdHJva2U6ICIpLmNvbmNhdCh0LmJhY2tncm91bmQsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxLjVcbn1cbi5lbmQtc3RhdGUtaW5uZXIge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVCYWNrZ3JvdW5kfHx0LmJhY2tncm91bmQsIjtcbiAgLy8gc3Ryb2tlOiAiKS5jb25jYXQodC5iYWNrZ3JvdW5kLCI7XG4gIHN0cm9rZS13aWR0aDogMS41XG59XG5cbi5ub2RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5zdGF0ZUJrZ3x8dC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xuICBzdHJva2Utd2lkdGg6IDFweDtcbn1cbi5ub2RlIHBvbHlnb24ge1xuICBmaWxsOiAiKS5jb25jYXQodC5tYWluQmtnLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiOztcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG59XG4jc3RhdGVkaWFncmFtLWJhcmJFbmQge1xuICBmaWxsOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5jb21wb3NpdGVUaXRsZUJhY2tncm91bmQsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5zdGF0ZUJvcmRlcnx8dC5ub2RlQm9yZGVyLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xufVxuXG4uY2x1c3Rlci1sYWJlbCwgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5zdGF0ZUxhYmVsQ29sb3IsIjtcbn1cblxuLnN0YXRlZGlhZ3JhbS1jbHVzdGVyIHJlY3Qub3V0ZXIge1xuICByeDogNXB4O1xuICByeTogNXB4O1xufVxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSAuZGl2aWRlciB7XG4gIHN0cm9rZTogIikuY29uY2F0KHQuc3RhdGVCb3JkZXJ8fHQubm9kZUJvcmRlciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLXN0YXRlIC50aXRsZS1zdGF0ZSB7XG4gIHJ4OiA1cHg7XG4gIHJ5OiA1cHg7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgZmlsbDogIikuY29uY2F0KHQuY29tcG9zaXRlQmFja2dyb3VuZHx8dC5iYWNrZ3JvdW5kLCI7XG59XG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIuc3RhdGVkaWFncmFtLWNsdXN0ZXItYWx0IC5pbm5lciB7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4uc3RhdGVkaWFncmFtLWNsdXN0ZXIgLmlubmVyIHtcbiAgcng6MDtcbiAgcnk6MDtcbn1cblxuLnN0YXRlZGlhZ3JhbS1zdGF0ZSByZWN0LmJhc2ljIHtcbiAgcng6IDVweDtcbiAgcnk6IDVweDtcbn1cbi5zdGF0ZWRpYWdyYW0tc3RhdGUgcmVjdC5kaXZpZGVyIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogMTAsMTA7XG4gIGZpbGw6ICIpLmNvbmNhdCh0LmFsdEJhY2tncm91bmQ/dC5hbHRCYWNrZ3JvdW5kOiIjZWZlZmVmIiwiO1xufVxuXG4ubm90ZS1lZGdlIHtcbiAgc3Ryb2tlLWRhc2hhcnJheTogNTtcbn1cblxuLnN0YXRlZGlhZ3JhbS1ub3RlIHJlY3Qge1xuICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgc3Ryb2tlLXdpZHRoOiAxcHg7XG4gIHJ4OiAwO1xuICByeTogMDtcbn1cbi5zdGF0ZWRpYWdyYW0tbm90ZSByZWN0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZUJrZ0NvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubm90ZUJvcmRlckNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMXB4O1xuICByeDogMDtcbiAgcnk6IDA7XG59XG5cbi5zdGF0ZWRpYWdyYW0tbm90ZSB0ZXh0IHtcbiAgZmlsbDogIikuY29uY2F0KHQubm90ZVRleHRDb2xvciwiO1xufVxuXG4uc3RhdGVkaWFncmFtLW5vdGUgLm5vZGVMYWJlbCB7XG4gIGNvbG9yOiAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG4uc3RhdGVkaWFncmFtIC5lZGdlTGFiZWwge1xuICBjb2xvcjogcmVkOyAvLyAiKS5jb25jYXQodC5ub3RlVGV4dENvbG9yLCI7XG59XG5cbiNkZXBlbmRlbmN5U3RhcnQsICNkZXBlbmRlbmN5RW5kIHtcbiAgZmlsbDogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gIHN0cm9rZS13aWR0aDogMTtcbn1cbiIpfSxzYz17Zmxvd2NoYXJ0OmFjLCJmbG93Y2hhcnQtdjIiOmFjLHNlcXVlbmNlOmZ1bmN0aW9uKHQpe3JldHVybiIuYWN0b3Ige1xuICAgIHN0cm9rZTogIi5jb25jYXQodC5hY3RvckJvcmRlciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yQmtnLCI7XG4gIH1cblxuICB0ZXh0LmFjdG9yID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdG9yVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmFjdG9yLWxpbmUge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0b3JMaW5lQ29sb3IsIjtcbiAgfVxuXG4gIC5tZXNzYWdlTGluZTAge1xuICAgIHN0cm9rZS13aWR0aDogMS41O1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IG5vbmU7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgLm1lc3NhZ2VMaW5lMSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjU7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gIH1cblxuICAjYXJyb3doZWFkIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgLnNlcXVlbmNlTnVtYmVyIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zZXF1ZW5jZU51bWJlckNvbG9yLCI7XG4gIH1cblxuICAjc2VxdWVuY2VudW1iZXIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gIH1cblxuICAjY3Jvc3NoZWFkIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnNpZ25hbENvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5zaWduYWxDb2xvciwiO1xuICB9XG5cbiAgLm1lc3NhZ2VUZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5zaWduYWxUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnNpZ25hbFRleHRDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsQm94IHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxhYmVsQm94Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJveEJrZ0NvbG9yLCI7XG4gIH1cblxuICAubGFiZWxUZXh0LCAubGFiZWxUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmxhYmVsVGV4dENvbG9yLCI7XG4gICAgc3Ryb2tlOiBub25lO1xuICB9XG5cbiAgLmxvb3BUZXh0LCAubG9vcFRleHQgPiB0c3BhbiB7XG4gICAgZmlsbDogIikuY29uY2F0KHQubG9vcFRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogbm9uZTtcbiAgfVxuXG4gIC5sb29wTGluZSB7XG4gICAgc3Ryb2tlLXdpZHRoOiAycHg7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMiwgMjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxhYmVsQm94Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5sYWJlbEJveEJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAubm90ZSB7XG4gICAgLy9zdHJva2U6ICNkZWNjOTM7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub3RlQm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5ub3RlQmtnQ29sb3IsIjtcbiAgfVxuXG4gIC5ub3RlVGV4dCwgLm5vdGVUZXh0ID4gdHNwYW4ge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm5vdGVUZXh0Q29sb3IsIjtcbiAgICBzdHJva2U6IG5vbmU7XG4gIH1cblxuICAuYWN0aXZhdGlvbjAge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZhdGlvbjEge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZhdGlvbjIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2YXRpb25Ca2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZhdGlvbkJvcmRlckNvbG9yLCI7XG4gIH1cbiIpfSxnYW50dDpmdW5jdGlvbih0KXtyZXR1cm4nXG4gIC5tZXJtYWlkLW1haW4tZm9udCB7XG4gICAgZm9udC1mYW1pbHk6ICJ0cmVidWNoZXQgbXMiLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cblxuICAuc2VjdGlvbiB7XG4gICAgc3Ryb2tlOiBub25lO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uMCB7XG4gICAgZmlsbDogJy5jb25jYXQodC5zZWN0aW9uQmtnQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uMiB7XG4gICAgZmlsbDogIikuY29uY2F0KHQuc2VjdGlvbkJrZ0NvbG9yMiwiO1xuICB9XG5cbiAgLnNlY3Rpb24xLFxuICAuc2VjdGlvbjMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFsdFNlY3Rpb25Ca2dDb2xvciwiO1xuICAgIG9wYWNpdHk6IDAuMjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUwIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlMSB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGl0bGVDb2xvciwiO1xuICB9XG5cbiAgLnNlY3Rpb25UaXRsZTIge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIC5zZWN0aW9uVGl0bGUzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50aXRsZUNvbG9yLCI7XG4gIH1cblxuICAuc2VjdGlvblRpdGxlIHtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gICAgLy8gdGV4dC1oZWlnaHQ6IDE0cHg7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG5cbiAgLyogR3JpZCBhbmQgYXhpcyAqL1xuXG4gIC5ncmlkIC50aWNrIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmdyaWRDb2xvciwiO1xuICAgIG9wYWNpdHk6IDAuODtcbiAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7XG4gICAgdGV4dCB7XG4gICAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgICAgZmlsbDogIikuY29uY2F0KHQudGV4dENvbG9yLCI7XG4gICAgfVxuICB9XG5cbiAgLmdyaWQgcGF0aCB7XG4gICAgc3Ryb2tlLXdpZHRoOiAwO1xuICB9XG5cblxuICAvKiBUb2RheSBsaW5lICovXG5cbiAgLnRvZGF5IHtcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudG9kYXlMaW5lQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDJweDtcbiAgfVxuXG5cbiAgLyogVGFzayBzdHlsaW5nICovXG5cbiAgLyogRGVmYXVsdCB0YXNrICovXG5cbiAgLnRhc2sge1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC50YXNrVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuXG4gIC8vIC50YXNrVGV4dDpub3QoW2ZvbnQtc2l6ZV0pIHtcbiAgLy8gICBmb250LXNpemU6ICIpLmNvbmNhdCh0LmdhbnR0Rm9udFNpemUsIjtcbiAgLy8gfVxuXG4gIC50YXNrVGV4dE91dHNpZGVSaWdodCB7XG4gICAgZmlsbDogIikuY29uY2F0KHQudGFza1RleHREYXJrQ29sb3IsIjtcbiAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG5cbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiO1xuICAgIHRleHQtYW5jaG9yOiBlbmQ7XG4gICAgLy8gZm9udC1zaXplOiAiKS5jb25jYXQodC5nYW50dEZvbnRTaXplLCI7XG4gIH1cblxuICAvKiBTcGVjaWFsIGNhc2UgY2xpY2thYmxlICovXG4gIC50YXNrLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG4gIC50YXNrVGV4dC5jbGlja2FibGUge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENsaWNrYWJsZUNvbG9yLCIgIWltcG9ydGFudDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIC50YXNrVGV4dE91dHNpZGVMZWZ0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLnRhc2tUZXh0T3V0c2lkZVJpZ2h0LmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0Q2xpY2thYmxlQ29sb3IsIiAhaW1wb3J0YW50O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgLyogU3BlY2lmaWMgdGFzayBzZXR0aW5ncyBmb3IgdGhlIHNlY3Rpb25zKi9cblxuICAudGFza1RleHQwLFxuICAudGFza1RleHQxLFxuICAudGFza1RleHQyLFxuICAudGFza1RleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dENvbG9yLCI7XG4gIH1cblxuICAudGFzazAsXG4gIC50YXNrMSxcbiAgLnRhc2syLFxuICAudGFzazMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudGFza0JvcmRlckNvbG9yLCI7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMCxcbiAgLnRhc2tUZXh0T3V0c2lkZTJcbiAge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0T3V0c2lkZUNvbG9yLCI7XG4gIH1cblxuICAudGFza1RleHRPdXRzaWRlMSxcbiAgLnRhc2tUZXh0T3V0c2lkZTMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0T3V0c2lkZUNvbG9yLCI7XG4gIH1cblxuXG4gIC8qIEFjdGl2ZSB0YXNrICovXG5cbiAgLmFjdGl2ZTAsXG4gIC5hY3RpdmUxLFxuICAuYWN0aXZlMixcbiAgLmFjdGl2ZTMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFjdGl2ZVRhc2tCa2dDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuYWN0aXZlVGFza0JvcmRlckNvbG9yLCI7XG4gIH1cblxuICAuYWN0aXZlVGV4dDAsXG4gIC5hY3RpdmVUZXh0MSxcbiAgLmFjdGl2ZVRleHQyLFxuICAuYWN0aXZlVGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG5cbiAgLyogQ29tcGxldGVkIHRhc2sgKi9cblxuICAuZG9uZTAsXG4gIC5kb25lMSxcbiAgLmRvbmUyLFxuICAuZG9uZTMge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQuZG9uZVRhc2tCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZVRleHQwLFxuICAuZG9uZVRleHQxLFxuICAuZG9uZVRleHQyLFxuICAuZG9uZVRleHQzIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC50YXNrVGV4dERhcmtDb2xvciwiICFpbXBvcnRhbnQ7XG4gIH1cblxuXG4gIC8qIFRhc2tzIG9uIHRoZSBjcml0aWNhbCBsaW5lICovXG5cbiAgLmNyaXQwLFxuICAuY3JpdDEsXG4gIC5jcml0MixcbiAgLmNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmNyaXRCa2dDb2xvciwiO1xuICAgIHN0cm9rZS13aWR0aDogMjtcbiAgfVxuXG4gIC5hY3RpdmVDcml0MCxcbiAgLmFjdGl2ZUNyaXQxLFxuICAuYWN0aXZlQ3JpdDIsXG4gIC5hY3RpdmVDcml0MyB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5jcml0Qm9yZGVyQ29sb3IsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5hY3RpdmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gIH1cblxuICAuZG9uZUNyaXQwLFxuICAuZG9uZUNyaXQxLFxuICAuZG9uZUNyaXQyLFxuICAuZG9uZUNyaXQzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmNyaXRCb3JkZXJDb2xvciwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmRvbmVUYXNrQmtnQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHNoYXBlLXJlbmRlcmluZzogY3Jpc3BFZGdlcztcbiAgfVxuXG4gIC5taWxlc3RvbmUge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKSBzY2FsZSgwLjgsMC44KTtcbiAgfVxuXG4gIC5taWxlc3RvbmVUZXh0IHtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIH1cbiAgLmRvbmVDcml0VGV4dDAsXG4gIC5kb25lQ3JpdFRleHQxLFxuICAuZG9uZUNyaXRUZXh0MixcbiAgLmRvbmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5hY3RpdmVDcml0VGV4dDAsXG4gIC5hY3RpdmVDcml0VGV4dDEsXG4gIC5hY3RpdmVDcml0VGV4dDIsXG4gIC5hY3RpdmVDcml0VGV4dDMge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRhc2tUZXh0RGFya0NvbG9yLCIgIWltcG9ydGFudDtcbiAgfVxuXG4gIC50aXRsZVRleHQge1xuICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7XG4gICAgZm9udC1zaXplOiAxOHB4O1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiICAgIDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgfVxuIil9LGNsYXNzRGlhZ3JhbTppYywiY2xhc3NEaWFncmFtLXYyIjppYyxjbGFzczppYyxzdGF0ZURpYWdyYW06b2Msc3RhdGU6b2MsZ2l0OmZ1bmN0aW9uKCl7cmV0dXJuIlxuICAuY29tbWl0LWlkLFxuICAuY29tbWl0LW1zZyxcbiAgLmJyYW5jaC1sYWJlbCB7XG4gICAgZmlsbDogbGlnaHRncmV5O1xuICAgIGNvbG9yOiBsaWdodGdyZXk7XG4gICAgZm9udC1mYW1pbHk6ICd0cmVidWNoZXQgbXMnLCB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LWZhbWlseTogdmFyKC0tbWVybWFpZC1mb250LWZhbWlseSk7XG4gIH1cbiJ9LGluZm86ZnVuY3Rpb24oKXtyZXR1cm4iIn0scGllOmZ1bmN0aW9uKHQpe3JldHVybiJcbiAgLnBpZUNpcmNsZXtcbiAgICBzdHJva2U6ICIuY29uY2F0KHQucGllU3Ryb2tlQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGggOiAiKS5jb25jYXQodC5waWVTdHJva2VXaWR0aCwiO1xuICAgIG9wYWNpdHkgOiAiKS5jb25jYXQodC5waWVPcGFjaXR5LCI7XG4gIH1cbiAgLnBpZVRpdGxlVGV4dCB7XG4gICAgdGV4dC1hbmNob3I6IG1pZGRsZTtcbiAgICBmb250LXNpemU6ICIpLmNvbmNhdCh0LnBpZVRpdGxlVGV4dFNpemUsIjtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVUaXRsZVRleHRDb2xvciwiO1xuICAgIGZvbnQtZmFtaWx5OiAiKS5jb25jYXQodC5mb250RmFtaWx5LCI7XG4gIH1cbiAgLnNsaWNlIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnBpZVNlY3Rpb25UZXh0Q29sb3IsIjtcbiAgICBmb250LXNpemU6IikuY29uY2F0KHQucGllU2VjdGlvblRleHRTaXplLCI7XG4gICAgLy8gZmlsbDogd2hpdGU7XG4gIH1cbiAgLmxlZ2VuZCB0ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5waWVMZWdlbmRUZXh0Q29sb3IsIjtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KHQucGllTGVnZW5kVGV4dFNpemUsIjtcbiAgfVxuIil9LGVyOmZ1bmN0aW9uKHQpe3JldHVybiJcbiAgLmVudGl0eUJveCB7XG4gICAgZmlsbDogIi5jb25jYXQodC5tYWluQmtnLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIH1cblxuICAuYXR0cmlidXRlQm94T2RkIHtcbiAgICBmaWxsOiAjZmZmZmZmO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubm9kZUJvcmRlciwiO1xuICB9XG5cbiAgLmF0dHJpYnV0ZUJveEV2ZW4ge1xuICAgIGZpbGw6ICNmMmYyZjI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5ub2RlQm9yZGVyLCI7XG4gIH1cblxuICAucmVsYXRpb25zaGlwTGFiZWxCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRlcnRpYXJ5Q29sb3IsIjtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgICAgcmVjdCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIH1cbiAgfVxuXG4gICAgLnJlbGF0aW9uc2hpcExpbmUge1xuICAgICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICB9XG4iKX0sam91cm5leTpmdW5jdGlvbih0KXtyZXR1cm4iLmxhYmVsIHtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBjb2xvcjogIi5jb25jYXQodC50ZXh0Q29sb3IsIjtcbiAgfVxuICAubW91dGgge1xuICAgIHN0cm9rZTogIzY2NjtcbiAgfVxuXG4gIGxpbmUge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQudGV4dENvbG9yLCJcbiAgfVxuXG4gIC5sZWdlbmQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRleHRDb2xvciwiO1xuICB9XG5cbiAgLmxhYmVsIHRleHQge1xuICAgIGZpbGw6ICMzMzM7XG4gIH1cbiAgLmxhYmVsIHtcbiAgICBjb2xvcjogIikuY29uY2F0KHQudGV4dENvbG9yLCJcbiAgfVxuXG4gIC5mYWNlIHtcbiAgICAiKS5jb25jYXQodC5mYWNlQ29sb3I/ImZpbGw6ICIuY29uY2F0KHQuZmFjZUNvbG9yKToiZmlsbDogI0ZGRjhEQyIsIjtcbiAgICBzdHJva2U6ICM5OTk7XG4gIH1cblxuICAubm9kZSByZWN0LFxuICAubm9kZSBjaXJjbGUsXG4gIC5ub2RlIGVsbGlwc2UsXG4gIC5ub2RlIHBvbHlnb24sXG4gIC5ub2RlIHBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0Lm1haW5Ca2csIjtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0Lm5vZGVCb3JkZXIsIjtcbiAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgfVxuXG4gIC5ub2RlIC5sYWJlbCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB9XG4gIC5ub2RlLmNsaWNrYWJsZSB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmFycm93aGVhZFBhdGgge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LmFycm93aGVhZENvbG9yLCI7XG4gIH1cblxuICAuZWRnZVBhdGggLnBhdGgge1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjVweDtcbiAgfVxuXG4gIC5mbG93Y2hhcnQtbGluayB7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQodC5saW5lQ29sb3IsIjtcbiAgICBmaWxsOiBub25lO1xuICB9XG5cbiAgLmVkZ2VMYWJlbCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIikuY29uY2F0KHQuZWRnZUxhYmVsQmFja2dyb3VuZCwiO1xuICAgIHJlY3Qge1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIH1cblxuICAuY2x1c3RlciByZWN0IHtcbiAgfVxuXG4gIC5jbHVzdGVyIHRleHQge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnRpdGxlQ29sb3IsIjtcbiAgfVxuXG4gIGRpdi5tZXJtYWlkVG9vbHRpcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBmb250LWZhbWlseTogJ3RyZWJ1Y2hldCBtcycsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1tZXJtYWlkLWZvbnQtZmFtaWx5KTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgYmFja2dyb3VuZDogIikuY29uY2F0KHQudGVydGlhcnlDb2xvciwiO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICIpLmNvbmNhdCh0LmJvcmRlcjIsIjtcbiAgICBib3JkZXItcmFkaXVzOiAycHg7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTAwO1xuICB9XG5cbiAgLnRhc2stdHlwZS0wLCAuc2VjdGlvbi10eXBlLTAgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUwKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtMSwgLnNlY3Rpb24tdHlwZS0xICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlMSk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTIsIC5zZWN0aW9uLXR5cGUtMiAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTIpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS0zLCAuc2VjdGlvbi10eXBlLTMgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGUzKToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNCwgLnNlY3Rpb24tdHlwZS00ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNCk6IiIsIjtcbiAgfVxuICAudGFzay10eXBlLTUsIC5zZWN0aW9uLXR5cGUtNSAge1xuICAgICIpLmNvbmNhdCh0LmZpbGxUeXBlMD8iZmlsbDogIi5jb25jYXQodC5maWxsVHlwZTUpOiIiLCI7XG4gIH1cbiAgLnRhc2stdHlwZS02LCAuc2VjdGlvbi10eXBlLTYgIHtcbiAgICAiKS5jb25jYXQodC5maWxsVHlwZTA/ImZpbGw6ICIuY29uY2F0KHQuZmlsbFR5cGU2KToiIiwiO1xuICB9XG4gIC50YXNrLXR5cGUtNywgLnNlY3Rpb24tdHlwZS03ICB7XG4gICAgIikuY29uY2F0KHQuZmlsbFR5cGUwPyJmaWxsOiAiLmNvbmNhdCh0LmZpbGxUeXBlNyk6IiIsIjtcbiAgfVxuXG4gIC5hY3Rvci0wIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjA/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IwKToiIiwiO1xuICB9XG4gIC5hY3Rvci0xIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjE/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IxKToiIiwiO1xuICB9XG4gIC5hY3Rvci0yIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjI/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IyKToiIiwiO1xuICB9XG4gIC5hY3Rvci0zIHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjM/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3IzKToiIiwiO1xuICB9XG4gIC5hY3Rvci00IHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjQ/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3I0KToiIiwiO1xuICB9XG4gIC5hY3Rvci01IHtcbiAgICAiKS5jb25jYXQodC5hY3RvcjU/ImZpbGw6ICIuY29uY2F0KHQuYWN0b3I1KToiIiwiO1xuICB9XG5cbiAgfVxuIil9LHJlcXVpcmVtZW50OmZ1bmN0aW9uKHQpe3JldHVybiJcblxuICBtYXJrZXIge1xuICAgIGZpbGw6ICIuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KHQucmVsYXRpb25Db2xvciwiO1xuICB9XG5cbiAgbWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KHQuZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KHQuZm9udFNpemUsIjtcbiAgfVxuXG4gIC5yZXFCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50QmFja2dyb3VuZCwiO1xuICAgIGZpbGwtb3BhY2l0eTogMTAwJTtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIFxuICAucmVxVGl0bGUsIC5yZXFMYWJlbHtcbiAgICBmaWxsOiAgIikuY29uY2F0KHQucmVxdWlyZW1lbnRUZXh0Q29sb3IsIjtcbiAgfVxuICAucmVxTGFiZWxCb3gge1xuICAgIGZpbGw6ICIpLmNvbmNhdCh0LnJlbGF0aW9uTGFiZWxCYWNrZ3JvdW5kLCI7XG4gICAgZmlsbC1vcGFjaXR5OiAxMDAlO1xuICB9XG5cbiAgLnJlcS10aXRsZS1saW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6ICIpLmNvbmNhdCh0LnJlcXVpcmVtZW50Qm9yZGVyU2l6ZSwiO1xuICB9XG4gIC5yZWxhdGlvbnNoaXBMaW5lIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdCh0LnJlbGF0aW9uQ29sb3IsIjtcbiAgICBzdHJva2Utd2lkdGg6IDE7XG4gIH1cbiAgLnJlbGF0aW9uc2hpcExhYmVsIHtcbiAgICBmaWxsOiAiKS5jb25jYXQodC5yZWxhdGlvbkxhYmVsQ29sb3IsIjtcbiAgfVxuXG4iKX19LGNjPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4iIHtcbiAgICBmb250LWZhbWlseTogIi5jb25jYXQobi5mb250RmFtaWx5LCI7XG4gICAgZm9udC1zaXplOiAiKS5jb25jYXQobi5mb250U2l6ZSwiO1xuICAgIGZpbGw6ICIpLmNvbmNhdChuLnRleHRDb2xvciwiXG4gIH1cblxuICAvKiBDbGFzc2VzIGNvbW1vbiBmb3IgbXVsdGlwbGUgZGlhZ3JhbXMgKi9cblxuICAuZXJyb3ItaWNvbiB7XG4gICAgZmlsbDogIikuY29uY2F0KG4uZXJyb3JCa2dDb2xvciwiO1xuICB9XG4gIC5lcnJvci10ZXh0IHtcbiAgICBmaWxsOiAiKS5jb25jYXQobi5lcnJvclRleHRDb2xvciwiO1xuICAgIHN0cm9rZTogIikuY29uY2F0KG4uZXJyb3JUZXh0Q29sb3IsIjtcbiAgfVxuXG4gIC5lZGdlLXRoaWNrbmVzcy1ub3JtYWwge1xuICAgIHN0cm9rZS13aWR0aDogMnB4O1xuICB9XG4gIC5lZGdlLXRoaWNrbmVzcy10aGljayB7XG4gICAgc3Ryb2tlLXdpZHRoOiAzLjVweFxuICB9XG4gIC5lZGdlLXBhdHRlcm4tc29saWQge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDA7XG4gIH1cblxuICAuZWRnZS1wYXR0ZXJuLWRhc2hlZHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAzO1xuICB9XG4gIC5lZGdlLXBhdHRlcm4tZG90dGVkIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAyO1xuICB9XG5cbiAgLm1hcmtlciB7XG4gICAgZmlsbDogIikuY29uY2F0KG4ubGluZUNvbG9yLCI7XG4gICAgc3Ryb2tlOiAiKS5jb25jYXQobi5saW5lQ29sb3IsIjtcbiAgfVxuICAubWFya2VyLmNyb3NzIHtcbiAgICBzdHJva2U6ICIpLmNvbmNhdChuLmxpbmVDb2xvciwiO1xuICB9XG5cbiAgc3ZnIHtcbiAgICBmb250LWZhbWlseTogIikuY29uY2F0KG4uZm9udEZhbWlseSwiO1xuICAgIGZvbnQtc2l6ZTogIikuY29uY2F0KG4uZm9udFNpemUsIjtcbiAgfVxuXG4gICIpLmNvbmNhdChzY1t0XShuKSwiXG5cbiAgIikuY29uY2F0KGUsIlxuIil9O2Z1bmN0aW9uIHVjKHQpe3JldHVybih1Yz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0JiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ0LmNvbnN0cnVjdG9yPT09U3ltYm9sJiZ0IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgdH0pKHQpfXZhciBsYz17fSxoYz1mdW5jdGlvbih0LGUsbil7c3dpdGNoKG8uZGVidWcoIkRpcmVjdGl2ZSB0eXBlPSIuY29uY2F0KGUudHlwZSwiIHdpdGggYXJnczoiKSxlLmFyZ3MpLGUudHlwZSl7Y2FzZSJpbml0IjpjYXNlImluaXRpYWxpemUiOlsiY29uZmlnIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dm9pZCAwIT09ZS5hcmdzW3RdJiYoImZsb3djaGFydC12MiI9PT1uJiYobj0iZmxvd2NoYXJ0IiksZS5hcmdzW25dPWUuYXJnc1t0XSxkZWxldGUgZS5hcmdzW3RdKX0pKSxvLmRlYnVnKCJzYW5pdGl6ZSBpbiBoYW5kbGVEaXJlY3RpdmUiLGUuYXJncyksZWUoZS5hcmdzKSxvLmRlYnVnKCJzYW5pdGl6ZSBpbiBoYW5kbGVEaXJlY3RpdmUgKGRvbmUpIixlLmFyZ3MpLGUuYXJncyxkZShlLmFyZ3MpO2JyZWFrO2Nhc2Uid3JhcCI6Y2FzZSJub3dyYXAiOnQmJnQuc2V0V3JhcCYmdC5zZXRXcmFwKCJ3cmFwIj09PWUudHlwZSk7YnJlYWs7ZGVmYXVsdDpvLndhcm4oIlVuaGFuZGxlZCBkaXJlY3RpdmU6IHNvdXJjZTogJyUleyIuY29uY2F0KGUudHlwZSwiOiAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoZS5hcmdzP2UuYXJnczp7fSksIn0lJSIpLGUpfX07ZnVuY3Rpb24gZmModCl7eWEodC5naXQpLEtyKHQuZmxvd2NoYXJ0KSxyaSh0LmZsb3djaGFydCksdm9pZCAwIT09dC5zZXF1ZW5jZURpYWdyYW0mJmpvLnNldENvbmYoVnQodC5zZXF1ZW5jZSx0LnNlcXVlbmNlRGlhZ3JhbSkpLGpvLnNldENvbmYodC5zZXF1ZW5jZSksemkodC5nYW50dCksWmUodC5jbGFzcykscHModC5zdGF0ZSksa3ModC5zdGF0ZSksd2EodC5jbGFzcyksZXIodC5lciksSnModC5qb3VybmV5KSxLYSh0LnJlcXVpcmVtZW50KSxuYyh0LmNsYXNzKX1mdW5jdGlvbiBkYygpe312YXIgcGM9T2JqZWN0LmZyZWV6ZSh7cmVuZGVyOmZ1bmN0aW9uKHQsZSxuLHIpe3BlKCk7dmFyIGk9ZSxhPW5lLmRldGVjdEluaXQoaSk7YSYmZGUoYSk7dmFyIHM9aGUoKTtpZihlLmxlbmd0aD5zLm1heFRleHRTaXplJiYoaT0iZ3JhcGggVEI7YVtNYXhpbXVtIHRleHQgc2l6ZSBpbiBkaWFncmFtIGV4Y2VlZGVkXTtzdHlsZSBhIGZpbGw6I2ZhYSIpLHZvaWQgMCE9PXIpci5pbm5lckhUTUw9IiIsT2JqZWN0KHUuc2VsZWN0KShyKS5hcHBlbmQoImRpdiIpLmF0dHIoImlkIiwiZCIrdCkuYXR0cigic3R5bGUiLCJmb250LWZhbWlseTogIitzLmZvbnRGYW1pbHkpLmFwcGVuZCgic3ZnIikuYXR0cigiaWQiLHQpLmF0dHIoIndpZHRoIiwiMTAwJSIpLmF0dHIoInhtbG5zIiwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKS5hcHBlbmQoImciKTtlbHNle3ZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpO2MmJmMucmVtb3ZlKCk7dmFyIGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2QiK3QpO2wmJmwucmVtb3ZlKCksT2JqZWN0KHUuc2VsZWN0KSgiYm9keSIpLmFwcGVuZCgiZGl2IikuYXR0cigiaWQiLCJkIit0KS5hcHBlbmQoInN2ZyIpLmF0dHIoImlkIix0KS5hdHRyKCJ3aWR0aCIsIjEwMCUiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIikuYXBwZW5kKCJnIil9d2luZG93LnR4dD1pLGk9ZnVuY3Rpb24odCl7dmFyIGU9dDtyZXR1cm4gZT0oZT0oZT1lLnJlcGxhY2UoL3N0eWxlLio6XFMqIy4qOy9nLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0xKX0pKSkucmVwbGFjZSgvY2xhc3NEZWYuKjpcUyojLio7L2csKGZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpfSkpKS5yZXBsYWNlKC8jXHcrOy9nLChmdW5jdGlvbih0KXt2YXIgZT10LnN1YnN0cmluZygxLHQubGVuZ3RoLTEpO3JldHVybi9eXCs/XGQrJC8udGVzdChlKT8i76yCwrDCsCIrZSsiwrbDnyI6Iu+sgsKwIitlKyLCtsOfIn0pKX0oaSk7dmFyIGg9T2JqZWN0KHUuc2VsZWN0KSgiI2QiK3QpLm5vZGUoKSxmPW5lLmRldGVjdFR5cGUoaSxzKSxkPWguZmlyc3RDaGlsZCxwPWQuZmlyc3RDaGlsZCx5PSIiO2lmKHZvaWQgMCE9PXMudGhlbWVDU1MmJih5Kz0iXG4iLmNvbmNhdChzLnRoZW1lQ1NTKSksdm9pZCAwIT09cy5mb250RmFtaWx5JiYoeSs9IlxuOnJvb3QgeyAtLW1lcm1haWQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuZm9udEZhbWlseSwifSIpKSx2b2lkIDAhPT1zLmFsdEZvbnRGYW1pbHkmJih5Kz0iXG46cm9vdCB7IC0tbWVybWFpZC1hbHQtZm9udC1mYW1pbHk6ICIuY29uY2F0KHMuYWx0Rm9udEZhbWlseSwifSIpKSwiZmxvd2NoYXJ0Ij09PWZ8fCJmbG93Y2hhcnQtdjIiPT09Znx8ImdyYXBoIj09PWYpe3ZhciBnPVFyKGkpLG09cy5odG1sTGFiZWxzfHxzLmZsb3djaGFydC5odG1sTGFiZWxzO2Zvcih2YXIgdiBpbiBnKW0/KHkrPSJcbi4iLmNvbmNhdCh2LCIgPiAqIHsgIikuY29uY2F0KGdbdl0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5Kz0iXG4uIi5jb25jYXQodiwiIHNwYW4geyAiKS5jb25jYXQoZ1t2XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKTooeSs9IlxuLiIuY29uY2F0KHYsIiBwYXRoIHsgIikuY29uY2F0KGdbdl0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5Kz0iXG4uIi5jb25jYXQodiwiIHJlY3QgeyAiKS5jb25jYXQoZ1t2XS5zdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpLHkrPSJcbi4iLmNvbmNhdCh2LCIgcG9seWdvbiB7ICIpLmNvbmNhdChnW3ZdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IikseSs9IlxuLiIuY29uY2F0KHYsIiBlbGxpcHNlIHsgIikuY29uY2F0KGdbdl0uc3R5bGVzLmpvaW4oIiAhaW1wb3J0YW50OyAiKSwiICFpbXBvcnRhbnQ7IH0iKSx5Kz0iXG4uIi5jb25jYXQodiwiIGNpcmNsZSB7ICIpLmNvbmNhdChnW3ZdLnN0eWxlcy5qb2luKCIgIWltcG9ydGFudDsgIiksIiAhaW1wb3J0YW50OyB9IiksZ1t2XS50ZXh0U3R5bGVzJiYoeSs9IlxuLiIuY29uY2F0KHYsIiB0c3BhbiB7ICIpLmNvbmNhdChnW3ZdLnRleHRTdHlsZXMuam9pbigiICFpbXBvcnRhbnQ7ICIpLCIgIWltcG9ydGFudDsgfSIpKSl9dmFyIGIseCxfPShiPSIjIi5jb25jYXQodCkseD1jYyhmLHkscy50aGVtZVZhcmlhYmxlcyksVyh6KCIiLmNvbmNhdChiLCJ7IikuY29uY2F0KHgsIn0iKSksSCkpLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtrLmlubmVySFRNTD0iIyIuY29uY2F0KHQsIiAiKStfLGQuaW5zZXJ0QmVmb3JlKGsscCk7dHJ5e3N3aXRjaChmKXtjYXNlImdpdCI6cy5mbG93Y2hhcnQuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUseWEocy5naXQpLGdhKGksdCwhMSk7YnJlYWs7Y2FzZSJmbG93Y2hhcnQiOnMuZmxvd2NoYXJ0LmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLEtyKHMuZmxvd2NoYXJ0KSxKcihpLHQsITEpO2JyZWFrO2Nhc2UiZmxvd2NoYXJ0LXYyIjpzLmZsb3djaGFydC5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxyaShzLmZsb3djaGFydCksaWkoaSx0LCExKTticmVhaztjYXNlInNlcXVlbmNlIjpzLnNlcXVlbmNlLmFycm93TWFya2VyQWJzb2x1dGU9cy5hcnJvd01hcmtlckFic29sdXRlLHMuc2VxdWVuY2VEaWFncmFtPyhqby5zZXRDb25mKE9iamVjdC5hc3NpZ24ocy5zZXF1ZW5jZSxzLnNlcXVlbmNlRGlhZ3JhbSkpLGNvbnNvbGUuZXJyb3IoImBtZXJtYWlkIGNvbmZpZy5zZXF1ZW5jZURpYWdyYW1gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbmZpZy5zZXF1ZW5jZWAuIFBsZWFzZSB1cGRhdGUgeW91ciBtZXJtYWlkIGNvbmZpZy4iKSk6am8uc2V0Q29uZihzLnNlcXVlbmNlKSxqby5kcmF3KGksdCk7YnJlYWs7Y2FzZSJnYW50dCI6cy5nYW50dC5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSx6aShzLmdhbnR0KSxVaShpLHQpO2JyZWFrO2Nhc2UiY2xhc3MiOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUsWmUocy5jbGFzcyksS2UoaSx0KTticmVhaztjYXNlImNsYXNzRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxQbihzLmNsYXNzKSxqbihpLHQpO2JyZWFrO2Nhc2Uic3RhdGUiOnMuY2xhc3MuYXJyb3dNYXJrZXJBYnNvbHV0ZT1zLmFycm93TWFya2VyQWJzb2x1dGUscHMocy5zdGF0ZSkseXMoaSx0KTticmVhaztjYXNlInN0YXRlRGlhZ3JhbSI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSxrcyhzLnN0YXRlKSx3cyhpLHQpO2JyZWFrO2Nhc2UiaW5mbyI6cy5jbGFzcy5hcnJvd01hcmtlckFic29sdXRlPXMuYXJyb3dNYXJrZXJBYnNvbHV0ZSx3YShzLmNsYXNzKSxUYShpLHQsVi52ZXJzaW9uKTticmVhaztjYXNlInBpZSI6QmEoaSx0LFYudmVyc2lvbik7YnJlYWs7Y2FzZSJlciI6ZXIocy5lciksbnIoaSx0LFYudmVyc2lvbik7YnJlYWs7Y2FzZSJqb3VybmV5IjpKcyhzLmpvdXJuZXkpLHRjKGksdCxWLnZlcnNpb24pO2JyZWFrO2Nhc2UicmVxdWlyZW1lbnQiOkthKHMucmVxdWlyZW1lbnQpLFFhKGksdCxWLnZlcnNpb24pfX1jYXRjaChlKXt0aHJvdyByYyh0LFYudmVyc2lvbiksZX1PYmplY3QodS5zZWxlY3QpKCdbaWQ9IicuY29uY2F0KHQsJyJdJykpLnNlbGVjdEFsbCgiZm9yZWlnbm9iamVjdCA+ICoiKS5hdHRyKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiKTt2YXIgdz1PYmplY3QodS5zZWxlY3QpKCIjZCIrdCkubm9kZSgpLmlubmVySFRNTDtpZihvLmRlYnVnKCJjbmYuYXJyb3dNYXJrZXJBYnNvbHV0ZSIscy5hcnJvd01hcmtlckFic29sdXRlKSxzLmFycm93TWFya2VyQWJzb2x1dGUmJiJmYWxzZSIhPT1zLmFycm93TWFya2VyQWJzb2x1dGV8fCh3PXcucmVwbGFjZSgvbWFya2VyLWVuZD0idXJsXCguKj8jL2csJ21hcmtlci1lbmQ9InVybCgjJywiZyIpKSx3PSh3PWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIGU9KGU9KGU9ZS5yZXBsYWNlKC/vrILCsMKwL2csKGZ1bmN0aW9uKCl7cmV0dXJuIiYjIn0pKSkucmVwbGFjZSgv76yCwrAvZywoZnVuY3Rpb24oKXtyZXR1cm4iJiJ9KSkpLnJlcGxhY2UoL8K2w58vZywoZnVuY3Rpb24oKXtyZXR1cm4iOyJ9KSl9KHcpKS5yZXBsYWNlKC88YnI+L2csIjxici8+Iiksdm9pZCAwIT09bilzd2l0Y2goZil7Y2FzZSJmbG93Y2hhcnQiOmNhc2UiZmxvd2NoYXJ0LXYyIjpuKHcsQXIuYmluZEZ1bmN0aW9ucyk7YnJlYWs7Y2FzZSJnYW50dCI6bih3LFJpLmJpbmRGdW5jdGlvbnMpO2JyZWFrO2Nhc2UiY2xhc3MiOmNhc2UiY2xhc3NEaWFncmFtIjpuKHcsT2UuYmluZEZ1bmN0aW9ucyk7YnJlYWs7ZGVmYXVsdDpuKHcpfWVsc2Ugby5kZWJ1ZygiQ0IgPSB1bmRlZmluZWQhIik7dmFyIFQ9T2JqZWN0KHUuc2VsZWN0KSgiI2QiK3QpLm5vZGUoKTtyZXR1cm4gbnVsbCE9PVQmJiJmdW5jdGlvbiI9PXR5cGVvZiBULnJlbW92ZSYmT2JqZWN0KHUuc2VsZWN0KSgiI2QiK3QpLm5vZGUoKS5yZW1vdmUoKSx3fSxwYXJzZTpmdW5jdGlvbih0KXt2YXIgZT1oZSgpLG49bmUuZGV0ZWN0SW5pdCh0LGUpO24mJm8uZGVidWcoInJlaW5pdCAiLG4pO3ZhciByLGk9bmUuZGV0ZWN0VHlwZSh0LGUpO3N3aXRjaChvLmRlYnVnKCJUeXBlICIraSksaSl7Y2FzZSJnaXQiOihyPWlhLmEpLnBhcnNlci55eT1uYTticmVhaztjYXNlImZsb3djaGFydCI6Y2FzZSJmbG93Y2hhcnQtdjIiOkFyLmNsZWFyKCksKHI9T3IuYSkucGFyc2VyLnl5PUFyO2JyZWFrO2Nhc2Uic2VxdWVuY2UiOihyPXRvLmEpLnBhcnNlci55eT1tbzticmVhaztjYXNlImdhbnR0Ijoocj1qaS5hKS5wYXJzZXIueXk9Umk7YnJlYWs7Y2FzZSJjbGFzcyI6Y2FzZSJjbGFzc0RpYWdyYW0iOihyPVJlLmEpLnBhcnNlci55eT1PZTticmVhaztjYXNlInN0YXRlIjpjYXNlInN0YXRlRGlhZ3JhbSI6KHI9em8uYSkucGFyc2VyLnl5PWVzO2JyZWFrO2Nhc2UiaW5mbyI6by5kZWJ1ZygiaW5mbyBpbmZvIGluZm8iKSwocj1fYS5hKS5wYXJzZXIueXk9YmE7YnJlYWs7Y2FzZSJwaWUiOm8uZGVidWcoInBpZSIpLChyPUNhLmEpLnBhcnNlci55eT1PYTticmVhaztjYXNlImVyIjpvLmRlYnVnKCJlciIpLChyPVZuLmEpLnBhcnNlci55eT1XbjticmVhaztjYXNlImpvdXJuZXkiOm8uZGVidWcoIkpvdXJuZXkiKSwocj1Mcy5hKS5wYXJzZXIueXk9QnM7YnJlYWs7Y2FzZSJyZXF1aXJlbWVudCI6Y2FzZSJyZXF1aXJlbWVudERpYWdyYW0iOm8uZGVidWcoIlJlcXVpcmVtZW50RGlhZ3JhbSIpLChyPUxhLmEpLnBhcnNlci55eT1ZYX1yZXR1cm4gci5wYXJzZXIueXkuZ3JhcGhUeXBlPWksci5wYXJzZXIueXkucGFyc2VFcnJvcj1mdW5jdGlvbih0LGUpe3Rocm93e3N0cjp0LGhhc2g6ZX19LHIucGFyc2UodCkscn0scGFyc2VEaXJlY3RpdmU6ZnVuY3Rpb24odCxlLG4scil7dHJ5e2lmKHZvaWQgMCE9PWUpc3dpdGNoKGU9ZS50cmltKCksbil7Y2FzZSJvcGVuX2RpcmVjdGl2ZSI6bGM9e307YnJlYWs7Y2FzZSJ0eXBlX2RpcmVjdGl2ZSI6bGMudHlwZT1lLnRvTG93ZXJDYXNlKCk7YnJlYWs7Y2FzZSJhcmdfZGlyZWN0aXZlIjpsYy5hcmdzPUpTT04ucGFyc2UoZSk7YnJlYWs7Y2FzZSJjbG9zZV9kaXJlY3RpdmUiOmhjKHQsbGMsciksbGM9bnVsbH19Y2F0Y2godCl7by5lcnJvcigiRXJyb3Igd2hpbGUgcmVuZGVyaW5nIHNlcXVlbmNlRGlhZ3JhbSBkaXJlY3RpdmU6ICIuY29uY2F0KGUsIiBqaXNvbiBjb250ZXh0OiAiKS5jb25jYXQobikpLG8uZXJyb3IodC5tZXNzYWdlKX19LGluaXRpYWxpemU6ZnVuY3Rpb24odCl7dCYmdC5mb250RmFtaWx5JiYodC50aGVtZVZhcmlhYmxlcyYmdC50aGVtZVZhcmlhYmxlcy5mb250RmFtaWx5fHwodC50aGVtZVZhcmlhYmxlcz17Zm9udEZhbWlseTp0LmZvbnRGYW1pbHl9KSksaWU9VnQoe30sdCksdCYmdC50aGVtZSYmeHRbdC50aGVtZV0/dC50aGVtZVZhcmlhYmxlcz14dFt0LnRoZW1lXS5nZXRUaGVtZVZhcmlhYmxlcyh0LnRoZW1lVmFyaWFibGVzKTp0JiYodC50aGVtZVZhcmlhYmxlcz14dC5kZWZhdWx0LmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKTt2YXIgZT0ib2JqZWN0Ij09PXVjKHQpP2Z1bmN0aW9uKHQpe3JldHVybiBvZT1WdCh7fSxhZSksb2U9VnQob2UsdCksdC50aGVtZSYmKG9lLnRoZW1lVmFyaWFibGVzPXh0W3QudGhlbWVdLmdldFRoZW1lVmFyaWFibGVzKHQudGhlbWVWYXJpYWJsZXMpKSxjZT11ZShvZSxzZSksb2V9KHQpOmxlKCk7ZmMoZSkscyhlLmxvZ0xldmVsKX0scmVpbml0aWFsaXplOmRjLGdldENvbmZpZzpoZSxzZXRDb25maWc6ZnVuY3Rpb24odCl7cmV0dXJuIFZ0KGNlLHQpLGhlKCl9LGdldFNpdGVDb25maWc6bGUsdXBkYXRlU2l0ZUNvbmZpZzpmdW5jdGlvbih0KXtyZXR1cm4gb2U9VnQob2UsdCksdWUob2Usc2UpLG9lfSxyZXNldDpmdW5jdGlvbigpe3BlKCl9LGdsb2JhbFJlc2V0OmZ1bmN0aW9uKCl7cGUoKSxmYyhoZSgpKX0sZGVmYXVsdENvbmZpZzphZX0pO3MoaGUoKS5sb2dMZXZlbCkscGUoaGUoKSk7dmFyIHljPXBjLGdjPWZ1bmN0aW9uKCl7bWMuc3RhcnRPbkxvYWQ/eWMuZ2V0Q29uZmlnKCkuc3RhcnRPbkxvYWQmJm1jLmluaXQoKTp2b2lkIDA9PT1tYy5zdGFydE9uTG9hZCYmKG8uZGVidWcoIkluIHN0YXJ0LCBubyBjb25maWciKSx5Yy5nZXRDb25maWcoKS5zdGFydE9uTG9hZCYmbWMuaW5pdCgpKX07InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmCi8qIQogICAqIFdhaXQgZm9yIGRvY3VtZW50IGxvYWRlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGV4ZWN1dGlvbgogICAqLwp3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKGZ1bmN0aW9uKCl7Z2MoKX0pLCExKTt2YXIgbWM9e3N0YXJ0T25Mb2FkOiEwLGh0bWxMYWJlbHM6ITAsbWVybWFpZEFQSTp5YyxwYXJzZTp5Yy5wYXJzZSxyZW5kZXI6eWMucmVuZGVyLGluaXQ6ZnVuY3Rpb24oKXt2YXIgdCxlLG49dGhpcyxyPXljLmdldENvbmZpZygpO2FyZ3VtZW50cy5sZW5ndGg+PTI/KAovKiEgc2VxdWVuY2UgY29uZmlnIHdhcyBwYXNzZWQgYXMgIzEgKi8Kdm9pZCAwIT09YXJndW1lbnRzWzBdJiYobWMuc2VxdWVuY2VDb25maWc9YXJndW1lbnRzWzBdKSx0PWFyZ3VtZW50c1sxXSk6dD1hcmd1bWVudHNbMF0sImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdPyhlPWFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOnZvaWQgMCE9PXIubWVybWFpZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiByLm1lcm1haWQuY2FsbGJhY2s/KGU9ci5tZXJtYWlkLmNhbGxiYWNrLG8uZGVidWcoIkNhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpOm8uZGVidWcoIk5vIENhbGxiYWNrIGZ1bmN0aW9uIGZvdW5kIikpLHQ9dm9pZCAwPT09dD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIubWVybWFpZCIpOiJzdHJpbmciPT10eXBlb2YgdD9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHQpOnQgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZT9bdF06dCxvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGJlZm9yZTogIittYy5zdGFydE9uTG9hZCksdm9pZCAwIT09bWMuc3RhcnRPbkxvYWQmJihvLmRlYnVnKCJTdGFydCBPbiBMb2FkIGlubmVyOiAiK21jLnN0YXJ0T25Mb2FkKSx5Yy51cGRhdGVTaXRlQ29uZmlnKHtzdGFydE9uTG9hZDptYy5zdGFydE9uTG9hZH0pKSx2b2lkIDAhPT1tYy5nYW50dENvbmZpZyYmeWMudXBkYXRlU2l0ZUNvbmZpZyh7Z2FudHQ6bWMuZ2FudHRDb25maWd9KTtmb3IodmFyIGksYT1uZXcgbmUuaW5pdElkR2VuZXJhdGlvcihyLmRldGVybWluaXN0aWNJZHMsci5kZXRlcm1pbmlzdGljSURTZWVkKSxzPWZ1bmN0aW9uKHIpe3ZhciBzPXRbcl07Ci8qISBDaGVjayBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZCAqL2lmKHMuZ2V0QXR0cmlidXRlKCJkYXRhLXByb2Nlc3NlZCIpKXJldHVybiJjb250aW51ZSI7cy5zZXRBdHRyaWJ1dGUoImRhdGEtcHJvY2Vzc2VkIiwhMCk7dmFyIGM9Im1lcm1haWQtIi5jb25jYXQoYS5uZXh0KCkpO2k9cy5pbm5lckhUTUwsaT1uZS5lbnRpdHlEZWNvZGUoaSkudHJpbSgpLnJlcGxhY2UoLzxiclxzKlwvPz4vZ2ksIjxici8+Iik7dmFyIHU9bmUuZGV0ZWN0SW5pdChpKTt1JiZvLmRlYnVnKCJEZXRlY3RlZCBlYXJseSByZWluaXQ6ICIsdSk7dHJ5e3ljLnJlbmRlcihjLGksKGZ1bmN0aW9uKHQsbil7cy5pbm5lckhUTUw9dCx2b2lkIDAhPT1lJiZlKGMpLG4mJm4ocyl9KSxzKX1jYXRjaCh0KXtvLndhcm4oIlN5bnRheCBFcnJvciByZW5kZXJpbmciKSxvLndhcm4odCksbi5wYXJzZUVycm9yJiZuLnBhcnNlRXJyb3IodCl9fSxjPTA7Yzx0Lmxlbmd0aDtjKyspcyhjKX0saW5pdGlhbGl6ZTpmdW5jdGlvbih0KXt2b2lkIDAhPT10Lm1lcm1haWQmJih2b2lkIDAhPT10Lm1lcm1haWQuc3RhcnRPbkxvYWQmJihtYy5zdGFydE9uTG9hZD10Lm1lcm1haWQuc3RhcnRPbkxvYWQpLHZvaWQgMCE9PXQubWVybWFpZC5odG1sTGFiZWxzJiYobWMuaHRtbExhYmVscz0iZmFsc2UiIT09dC5tZXJtYWlkLmh0bWxMYWJlbHMmJiExIT09dC5tZXJtYWlkLmh0bWxMYWJlbHMpKSx5Yy5pbml0aWFsaXplKHQpfSxjb250ZW50TG9hZGVkOmdjfTtlLmRlZmF1bHQ9bWN9XSkuZGVmYXVsdH0pKTsKLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVybWFpZC5taW4uanMubWFw`; \ No newline at end of file diff --git a/packages/lib/package-lock.json b/packages/lib/package-lock.json index 5e93ebb3b97..15a2e93686e 100644 --- a/packages/lib/package-lock.json +++ b/packages/lib/package-lock.json @@ -1,8949 +1,8 @@ { "name": "@joplin/lib", "version": "2.4.1", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@joplin/lib", - "version": "2.4.1", - "license": "ISC", - "dependencies": { - "async-mutex": "^0.1.3", - "aws-sdk": "^2.588.0", - "base-64": "^0.1.0", - "base64-stream": "^1.0.0", - "builtin-modules": "^3.1.0", - "chokidar": "^3.4.3", - "color": "3.1.2", - "compare-versions": "^3.6.0", - "css": "^3.0.0", - "diff-match-patch": "^1.0.4", - "es6-promise-pool": "^2.5.0", - "file-uri-to-path": "^1.0.0", - "follow-redirects": "^1.2.4", - "form-data": "^2.1.4", - "fs-extra": "^5.0.0", - "html-entities": "^1.2.1", - "html-minifier": "^3.5.15", - "image-data-uri": "^2.0.0", - "image-type": "^3.0.0", - "immer": "^7.0.14", - "levenshtein": "^1.0.5", - "lodash": "^4.17.20", - "markdown-it": "^10.0.0", - "md5": "^2.2.1", - "md5-file": "^4.0.0", - "moment": "^2.29.1", - "multiparty": "^4.2.1", - "mustache": "^4.0.1", - "nanoid": "^3.1.12", - "node-fetch": "^1.7.1", - "node-notifier": "^8.0.0", - "node-persist": "^2.1.0", - "promise": "^7.1.1", - "query-string": "4.3.4", - "re-reselect": "^4.0.0", - "read-chunk": "^2.1.0", - "redux": "^3.7.2", - "relative": "^3.0.2", - "reselect": "^4.0.0", - "server-destroy": "^1.0.1", - "sprintf-js": "^1.1.2", - "sqlite3": "^5.0.0", - "string-padding": "^1.0.2", - "string-to-stream": "^1.1.0", - "tar": "^4.4.10", - "tcp-port-used": "^0.1.2", - "uglifycss": "0.0.29", - "url-parse": "^1.4.7", - "uslug": "git+https://github.com/laurent22/uslug.git#emoji-support", - "uuid": "^3.0.1", - "valid-url": "^1.0.9", - "word-wrap": "^1.2.3", - "xml2js": "^0.4.19" - }, - "devDependencies": { - "@types/fs-extra": "^9.0.6", - "@types/jest": "^26.0.15", - "@types/node": "^14.14.6", - "@types/react": "^17.0.20", - "clean-html": "^1.5.0", - "jest": "^26.6.3", - "sharp": "^0.26.2", - "typescript": "^4.0.5" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", - "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.10.4" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.7" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", - "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.7" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "dev": true - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", - "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.1" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.11.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "node_modules/@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" - } - }, - "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", - "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "node_modules/@babel/traverse": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", - "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/types": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", - "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", - "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz", - "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.16.tgz", - "integrity": "sha512-S63Dt4CZOkuTmpLGGWtT/mQdVORJOpx6SZWGVaP56dda/0Nx5nEe82K7/LAm8zYr6SfMq+1N2OreIOrHAx656w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/fs-extra": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.11.tgz", - "integrity": "sha512-mZsifGG4QeQ7hlkhO56u7zt/ycBgGxSVsFI/6lGTU34VtwkiqrrSDgw0+ygs8kFGWcXnFQWMrzF2h7TtDFNixA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz", - "integrity": "sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "26.0.15", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.15.tgz", - "integrity": "sha512-s2VMReFXRg9XXxV+CW9e5Nz8fH2K1aEhwgjUqPPbQd7g95T0laAcvLv032EhFHIa5GHsZ8W7iJEQVaJq6k3Gog==", - "dev": true, - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "node_modules/@types/node": { - "version": "14.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz", - "integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.1.5.tgz", - "integrity": "sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", - "dev": true - }, - "node_modules/@types/react": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.20.tgz", - "integrity": "sha512-wWZrPlihslrPpcKyCSlmIlruakxr57/buQN1RjlIeaaTWDLtJkTtRW429MoQJergvVKc4IWBpRhWw7YNh/7GVA==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "15.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.10.tgz", - "integrity": "sha512-z8PNtlhrj7eJNLmrAivM7rjBESG6JwC5xP3RVk12i/8HVP7Xnx/sEmERnRImyEuUaJfO942X0qMOYsoupaJbZQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-escape-sequences": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", - "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==", - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ansi-escape-sequences/node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "dependencies": { - "type-fest": "^0.11.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansi-styles/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ansi-styles/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/argparse/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "dev": true - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-mutex": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.1.4.tgz", - "integrity": "sha512-zVWTmAnxxHaeB2B1te84oecI8zTDJ/8G49aVBblRX6be0oq6pAybNcUSxwfgVOmOjSCvN4aYZAqwtyNI8e1YGw==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/aws-sdk": { - "version": "2.783.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.783.0.tgz", - "integrity": "sha512-u3/ZvY/ag1hEkPpgBJxypWRGf8930prIDOWk221pgH0WhlRA9qp3IE8D0j/BKFei0giqlxbN/AB05RITp/XlwQ==", - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/aws-sdk/node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" - }, - "node_modules/aws-sdk/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/aws-sdk/node_modules/xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz", - "integrity": "sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=" - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "node_modules/base64-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64-stream/-/base64-stream-1.0.0.tgz", - "integrity": "sha512-BQQZftaO48FcE1Kof9CmXMFaAdqkcNorgc8CxesZv9nMbbTF1EFyQe89UOuh//QMmdtfUDXyO8rgUalemL5ODA==" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "optional": true, - "dependencies": { - "inherits": "~2.0.0" - }, - "engines": { - "node": "0.4 || >=0.5.8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dependencies": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "node_modules/camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.2" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-html": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/clean-html/-/clean-html-1.5.0.tgz", - "integrity": "sha512-eDu0vN44ZBvoEU0oRIKwWPIccGWXtdnUNmKJuTukZ1de00Uoqavb5pfIMKiC7/r+knQ5RbvAjGuVZiN3JwJL4Q==", - "dev": true, - "dependencies": { - "htmlparser2": "^3.8.2", - "minimist": "^1.1.1" - }, - "bin": { - "clean-html": "cmd.js" - } - }, - "node_modules/cliss": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/cliss/-/cliss-0.0.2.tgz", - "integrity": "sha512-6rj9pgdukjT994Md13JCUAgTk91abAKrygL9sAvmHY4F6AKMOV8ccGaxhUUfcBuyg3sundWnn3JE0Mc9W6ZYqw==", - "dependencies": { - "command-line-usage": "^4.0.1", - "deepmerge": "^2.0.0", - "get-stdin": "^5.0.1", - "inspect-parameters-declaration": "0.0.9", - "object-to-arguments": "0.0.8", - "pipe-functions": "^1.3.0", - "strip-ansi": "^4.0.0", - "yargs-parser": "^7.0.0" - } - }, - "node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-line-usage": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz", - "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==", - "dependencies": { - "ansi-escape-sequences": "^4.0.0", - "array-back": "^2.0.0", - "table-layout": "^0.4.2", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" - }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "engines": { - "node": "*" - } - }, - "node_modules/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - } - }, - "node_modules/css/node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-match-patch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", - "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==" - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-ex/node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/es6-promise-pool": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/es6-promise-pool/-/es6-promise-pool-2.5.0.tgz", - "integrity": "sha1-FHxhKza0fxBQJ/nSv1SlmKmdnMs=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - } - }, - "node_modules/for-each-property": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/for-each-property/-/for-each-property-0.0.4.tgz", - "integrity": "sha1-z6hXrsFCLh0Sb/CHhPz2Jim8g/Y=", - "dependencies": { - "get-prototype-chain": "^1.0.1" - } - }, - "node_modules/for-each-property-deep": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/for-each-property-deep/-/for-each-property-deep-0.0.3.tgz", - "integrity": "sha1-MTCaSvw4qcygbxsiP1PWSm0IP60=", - "dependencies": { - "for-each-property": "0.0.4" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-prototype-chain": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-prototype-chain/-/get-prototype-chain-1.0.1.tgz", - "integrity": "sha1-oXGhFeoeSQbG7ThDofABwYUQQW8=", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dependencies": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "bin": { - "html-minifier": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/htmlparser2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/image-data-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/image-data-uri/-/image-data-uri-2.0.1.tgz", - "integrity": "sha512-BZh721F2Q5TwBdwpiqrBrHEdj8daj8KuMZK/DOCyqQlz1CqFhhuZWbK5ZCUnAvFJr8LaKHTaWl9ja3/a3DC2Ew==", - "dependencies": { - "fs-extra": "^0.26.7", - "magicli": "0.0.8", - "mime-types": "^2.1.18", - "request": "^2.88.0" - }, - "bin": { - "image-data-uri": "bin/magicli.js" - } - }, - "node_modules/image-data-uri/node_modules/fs-extra": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", - "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/image-data-uri/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/image-type": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/image-type/-/image-type-3.1.0.tgz", - "integrity": "sha512-edYRXKQ3WD2yHXFGUbwoJVn5v7j1A6Z505uZUYIfzCwOOhPGLYSc3VOucF9fqbsaUbgb37DdjOU+WV4uo7ZooQ==", - "dependencies": { - "file-type": "^10.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/immer": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.14.tgz", - "integrity": "sha512-BxCs6pJwhgSEUEOZjywW7OA8DXVzfHjkBelSEl0A+nEu0+zS4cFVdNOONvt55N4WOm8Pu4xqSPYxhm1Lv2iBBA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inspect-function": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz", - "integrity": "sha1-hdoMUli8TDMK4yg7Z0fgdZ2QpjU=", - "dependencies": { - "split-skip": "0.0.1", - "unpack-string": "0.0.2" - } - }, - "node_modules/inspect-function/node_modules/split-skip": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz", - "integrity": "sha1-gK2ONumOV2RUzDtmfB3SXYZejwA=" - }, - "node_modules/inspect-parameters-declaration": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.9.tgz", - "integrity": "sha512-c3jrKKA1rwwrsjdGMAo2hFWV0vNe3/RKHxpE/OBt41LP3ynOVI1qmgxpZYK5SQu3jtWCyaho8L7AZzCjJ4mEUw==", - "dependencies": { - "magicli": "0.0.5", - "split-skip": "0.0.2", - "stringify-parameters": "0.0.4", - "unpack-string": "0.0.2" - }, - "bin": { - "inspect-parameters-declaration": "bin/cli.js" - } - }, - "node_modules/inspect-parameters-declaration/node_modules/magicli": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", - "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", - "dependencies": { - "commander": "^2.9.0", - "get-stdin": "^5.0.1", - "inspect-function": "^0.2.1", - "pipe-functions": "^1.2.0" - } - }, - "node_modules/inspect-property": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/inspect-property/-/inspect-property-0.0.6.tgz", - "integrity": "sha512-LgjHkRl9W6bj2n+kWrAOgvCYPTYt+LanE4rtd/vKNq6yEb+SvVV7UTLzoSPpDX6/U1cAz7VfqPr+lPAIz7wHaQ==", - "dependencies": { - "for-each-property": "0.0.4", - "for-each-property-deep": "0.0.3", - "inspect-function": "^0.3.1" - } - }, - "node_modules/inspect-property/node_modules/inspect-function": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.3.4.tgz", - "integrity": "sha512-s0RsbJqK/sNZ+U1mykGoTickog3ea1A9Qk4mXniogOBu4PgkkZ56elScO7QC/r8D94lhGmJ2NyDI1ipOA/uq/g==", - "dependencies": { - "inspect-parameters-declaration": "0.0.8", - "magicli": "0.0.8", - "split-skip": "0.0.1", - "stringify-parameters": "0.0.4", - "unpack-string": "0.0.2" - }, - "bin": { - "inspect-function": "bin/magicli.js" - } - }, - "node_modules/inspect-property/node_modules/inspect-parameters-declaration": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.8.tgz", - "integrity": "sha512-W4QzN1LgFmasKOM+NoLlDd2OAZM3enNZlVUOXoGQKmYBDFgxoPDOyebF55ALaf8avyM9TavNwibXxg347RrzCg==", - "dependencies": { - "magicli": "0.0.5", - "split-skip": "0.0.2", - "stringify-parameters": "0.0.4", - "unpack-string": "0.0.2" - }, - "bin": { - "inspect-parameters-declaration": "bin/cli.js" - } - }, - "node_modules/inspect-property/node_modules/inspect-parameters-declaration/node_modules/inspect-function": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/inspect-function/-/inspect-function-0.2.2.tgz", - "integrity": "sha1-hdoMUli8TDMK4yg7Z0fgdZ2QpjU=", - "dependencies": { - "split-skip": "0.0.1", - "unpack-string": "0.0.2" - } - }, - "node_modules/inspect-property/node_modules/inspect-parameters-declaration/node_modules/inspect-function/node_modules/split-skip": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz", - "integrity": "sha1-gK2ONumOV2RUzDtmfB3SXYZejwA=" - }, - "node_modules/inspect-property/node_modules/inspect-parameters-declaration/node_modules/magicli": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", - "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", - "dependencies": { - "commander": "^2.9.0", - "get-stdin": "^5.0.1", - "inspect-function": "^0.2.1", - "pipe-functions": "^1.2.0" - } - }, - "node_modules/inspect-property/node_modules/inspect-parameters-declaration/node_modules/split-skip": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz", - "integrity": "sha1-2J2Iu9L3Pka1FYqjcKVhIk6A1GE=" - }, - "node_modules/inspect-property/node_modules/split-skip": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.1.tgz", - "integrity": "sha1-gK2ONumOV2RUzDtmfB3SXYZejwA=" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dependencies": { - "is-relative": "^0.2.1", - "is-windows": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true - }, - "node_modules/is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dependencies": { - "is-unc-path": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dependencies": { - "unc-path-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is2": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/is2/-/is2-0.0.9.tgz", - "integrity": "sha1-EZVW0dFlGkG6EFr4AyZ8gLKZ9ik=", - "dependencies": { - "deep-is": "0.1.2" - }, - "engines": { - "node": ">=v0.6.0" - } - }, - "node_modules/is2/node_modules/deep-is": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.2.tgz", - "integrity": "sha1-nO1l6gvAsJ9CptecGxkD+dkTzBg=" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-jsdom/node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/jest-environment-jsdom/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jest-environment-jsdom/node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-environment-jsdom/node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-environment-jsdom/node_modules/jsdom": { - "version": "16.4.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz", - "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "acorn": "^7.1.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.2.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.0", - "domexception": "^2.0.1", - "escodegen": "^1.14.1", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "5.1.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.8", - "saxes": "^5.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0", - "ws": "^7.2.3", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-jsdom/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "node_modules/jest-environment-jsdom/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-environment-jsdom/node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-environment-jsdom/node_modules/tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "dev": true, - "dependencies": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-environment-jsdom/node_modules/tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom/node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-environment-jsdom/node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/jest-environment-jsdom/node_modules/whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "node_modules/json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levenshtein": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/levenshtein/-/levenshtein-1.0.5.tgz", - "integrity": "sha1-ORFzepy1baNF0Aj1V4LG8TiXm6M=", - "engines": [ - "node >=0.2.0" - ] - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/linkify-it": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", - "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" - }, - "node_modules/lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "node_modules/lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magicli": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.8.tgz", - "integrity": "sha512-x/eBenweAHF+DsYy172sK4doRxZl0yrJnfxhLJiN7H6hPM3Ya0PfI6uBZshZ3ScFFSQD7HXgBqMdbnXKEZsO1g==", - "dependencies": { - "cliss": "0.0.2", - "find-up": "^2.1.0", - "for-each-property": "0.0.4", - "inspect-property": "0.0.6" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-it": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", - "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", - "dependencies": { - "argparse": "^1.0.7", - "entities": "~2.0.0", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it/node_modules/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz", - "integrity": "sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==", - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dependencies": { - "mime-db": "1.44.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multiparty": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.2.tgz", - "integrity": "sha512-NtZLjlvsjcoGrzojtwQwn/Tm90aWJ6XXtPppYF4WmOk/6ncdwMMKggFY2NlRRN9yiCEIVxpOfPWahVEG2HAG8Q==", - "dependencies": { - "http-errors": "~1.8.0", - "safe-buffer": "5.2.1", - "uid-safe": "2.1.5" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/mustache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.1.tgz", - "integrity": "sha512-yL5VE97+OXn4+Er3THSmTdCFCtx5hHWzrolvH+JObZnUYwuaG7XV+Ch4fR2cIrcYI0tFHxS7iyFYl14bW8y2sA==", - "bin": { - "mustache": "bin/mustache" - }, - "engines": { - "npm": ">=1.4.0" - } - }, - "node_modules/nanoid": { - "version": "3.1.16", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", - "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/needle": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", - "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dependencies": { - "lower-case": "^1.1.1" - } - }, - "node_modules/node-abi": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.26.0.tgz", - "integrity": "sha512-ag/Vos/mXXpWLLAYWsAoQdgS+gW7IwvgMLOgqopm/DbzAjazLltzgzpVMsFlgmo9TzG5hGXeaBZx2AI731RIsQ==", - "dev": true, - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", - "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" - }, - "node_modules/node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", - "dependencies": { - "lodash.toarray": "^4.4.0" - } - }, - "node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "optional": true, - "dependencies": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/node-gyp/node_modules/tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "optional": true, - "dependencies": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-notifier": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", - "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-persist": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-2.1.0.tgz", - "integrity": "sha1-5lK784haBNrWo1PXQXYXfIORRwc=", - "dependencies": { - "is-absolute": "^0.2.6", - "mkdirp": "~0.5.1", - "q": "~1.1.1" - } - }, - "node_modules/node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", - "dependencies": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/node-pre-gyp/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "optional": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "node_modules/npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "dependencies": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-to-arguments": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/object-to-arguments/-/object-to-arguments-0.0.8.tgz", - "integrity": "sha512-BfWfuAwuhdH1bhMG5EG90WE/eckkBhBvnke8eSEkCDXoLE9Jk5JwYGTbCx1ehGwV48HvBkn62VukPBdlMUOY9w==", - "dependencies": { - "inspect-parameters-declaration": "0.0.10", - "magicli": "0.0.5", - "split-skip": "0.0.2", - "stringify-parameters": "0.0.4", - "unpack-string": "0.0.2" - }, - "bin": { - "object-to-arguments": "bin/cli.js" - } - }, - "node_modules/object-to-arguments/node_modules/inspect-parameters-declaration": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/inspect-parameters-declaration/-/inspect-parameters-declaration-0.0.10.tgz", - "integrity": "sha512-L8/Bvt9iDXQTZ63xY5/MAyvzz+FagR/qGh1kIXvUpsno3AAE0Z95d6QO51zrcMGaEGpwh/57idfMxTxbvRmytg==", - "dependencies": { - "magicli": "0.0.5", - "split-skip": "0.0.2", - "stringify-parameters": "0.0.4", - "unpack-string": "0.0.2" - }, - "bin": { - "inspect-parameters-declaration": "bin/cli.js" - } - }, - "node_modules/object-to-arguments/node_modules/magicli": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", - "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", - "dependencies": { - "commander": "^2.9.0", - "get-stdin": "^5.0.1", - "inspect-function": "^0.2.1", - "pipe-functions": "^1.2.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "engines": { - "node": ">=4" - } - }, - "node_modules/param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dependencies": { - "no-case": "^2.2.0" - } - }, - "node_modules/parse-json": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", - "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "engines": { - "node": ">=4" - } - }, - "node_modules/pipe-functions": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pipe-functions/-/pipe-functions-1.3.0.tgz", - "integrity": "sha512-6Rtbp7criZRwedlvWbUYxqlqJoAlMvYHo2UcRWq79xZ54vZcaNHpVBOcWkX3ErT2aUA69tv+uiv4zKJbhD/Wgg==" - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.2.tgz", - "integrity": "sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ==", - "dev": true, - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - }, - "node_modules/q": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/q/-/q-1.1.2.tgz", - "integrity": "sha1-Y1fikSBnAdmfGXq4TlforRlvKok=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/re-reselect": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/re-reselect/-/re-reselect-4.0.0.tgz", - "integrity": "sha512-wuygyq8TXUlSdVXv2kigXxQNOgdb9m7LbIjwfTNGSpaY1riLd5e+VeQjlQMyUtrk0oiyhi1AqIVynworl3qxHA==", - "peerDependencies": { - "reselect": ">1.0.0" - } - }, - "node_modules/react-is": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz", - "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==", - "dev": true - }, - "node_modules/read-chunk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", - "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", - "dependencies": { - "pify": "^3.0.0", - "safe-buffer": "^5.1.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reduce-flatten": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", - "integrity": "sha1-JYx479FT3fk8tWEjf2EYTzaW4yc=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "dependencies": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/relative": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", - "integrity": "sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8=", - "dependencies": { - "isobject": "^2.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/relative/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/reselect": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz", - "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" - }, - "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/server-destroy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", - "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=" - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sharp": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz", - "integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "array-flatten": "^3.0.0", - "color": "^3.1.3", - "detect-libc": "^1.0.3", - "node-addon-api": "^3.0.2", - "npmlog": "^4.1.2", - "prebuild-install": "^6.0.0", - "semver": "^7.3.2", - "simple-get": "^4.0.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "node_modules/sharp/node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sharp/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sharp/node_modules/node-addon-api": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.0.tgz", - "integrity": "sha512-kcwSAWhPi4+QzAtsL2+2s/awvDo2GKLsvMCwNRxb5BUshteXU8U97NCyvQDsGKs/m0He9WcG4YWew/BnuLx++w==", - "dev": true - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp/node_modules/simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dev": true, - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "node_modules/split-skip": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/split-skip/-/split-skip-0.0.2.tgz", - "integrity": "sha1-2J2Iu9L3Pka1FYqjcKVhIk6A1GE=" - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" - }, - "node_modules/sqlite3": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.0.tgz", - "integrity": "sha512-rjvqHFUaSGnzxDy2AHCwhHy6Zp6MNJzCPGYju4kD8yi6bze4d1/zMTg6C7JI49b7/EM7jKMTvyfN/4ylBKdwfw==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "2.0.0", - "node-pre-gyp": "^0.11.0" - }, - "optionalDependencies": { - "node-gyp": "3.x" - }, - "peerDependencies": { - "node-gyp": "3.x" - }, - "peerDependenciesMeta": { - "node-gyp": { - "optional": true - } - } - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-length": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", - "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-padding": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-padding/-/string-padding-1.0.2.tgz", - "integrity": "sha1-OqrYVbPpc1xeQS3+chmMz5nH9I4=" - }, - "node_modules/string-to-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string-to-stream/-/string-to-stream-1.1.1.tgz", - "integrity": "sha512-QySF2+3Rwq0SdO3s7BAp4x+c3qsClpPQ6abAmb0DGViiSBAkT5kL6JT2iyzEVP+T1SmzHrQD1TwlP9QAHCc+Sw==", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.1.0" - } - }, - "node_modules/string-to-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/string-to-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/string-to-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stringify-parameters": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stringify-parameters/-/stringify-parameters-0.0.4.tgz", - "integrity": "sha512-H3L90ERn5UPtkpO8eugnKcLgpIVlvTyUTrcLGm607AV5JDH6z0GymtNLr3gjGlP6I6NB/mxNX9QpY6jEQGLPdQ==", - "dependencies": { - "magicli": "0.0.5", - "unpack-string": "0.0.2" - }, - "bin": { - "stringify-parameters": "bin/cli.js" - } - }, - "node_modules/stringify-parameters/node_modules/magicli": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/magicli/-/magicli-0.0.5.tgz", - "integrity": "sha1-zufQ+7THBRiqyxHsPrfiX/SaSSE=", - "dependencies": { - "commander": "^2.9.0", - "get-stdin": "^5.0.1", - "inspect-function": "^0.2.1", - "pipe-functions": "^1.2.0" - } - }, - "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table-layout": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", - "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", - "dependencies": { - "array-back": "^2.0.0", - "deep-extend": "~0.6.0", - "lodash.padend": "^4.6.1", - "typical": "^2.6.1", - "wordwrapjs": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/tar/node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/tcp-port-used": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-0.1.2.tgz", - "integrity": "sha1-lFDodoyDtBb9TRpqlEnuzL9JbCk=", - "dependencies": { - "debug": "0.7.4", - "is2": "0.0.9", - "q": "0.9.7" - } - }, - "node_modules/tcp-port-used/node_modules/debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "engines": { - "node": "*" - } - }, - "node_modules/tcp-port-used/node_modules/q": { - "version": "0.9.7", - "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz", - "integrity": "sha1-TeLmyzspCIyeTLwDv51C+5bOL3U=", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz", - "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dependencies": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglify-js/node_modules/commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" - }, - "node_modules/uglifycss": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.29.tgz", - "integrity": "sha512-J2SQ2QLjiknNGbNdScaNZsXgmMGI0kYNrXaDlr4obnPW9ni1jljb1NeEVWAiTgZ8z+EBWP2ozfT9vpy03rjlMQ==", - "bin": { - "uglifycss": "uglifycss" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/unpack-string": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/unpack-string/-/unpack-string-0.0.2.tgz", - "integrity": "sha1-MC7PCCOLATm9Q0pNf9Z83zPKJ10=" - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" - }, - "node_modules/uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/uslug": { - "version": "1.0.4", - "resolved": "git+ssh://git@github.com/laurent22/uslug.git#ba2834d79beb0435318709958b2f5e817d96674d", - "integrity": "sha512-6zzxOsQp+hbOW4zeplEUhKXnBzYIrqYAVlPepBFz/u5q2OulN7tCmBKyWEzDxaiZOLYnUCTViDLazNoq1J6ciA==", - "dependencies": { - "node-emoji": "^1.10.0", - "unorm": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz", - "integrity": "sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "devOptional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrapjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", - "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", - "dependencies": { - "reduce-flatten": "^1.0.1", - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", - "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dependencies": { - "camelcase": "^4.1.0" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - } - }, "dependencies": { "@babel/code-frame": { "version": "7.10.4", @@ -12747,8 +3806,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "26.0.0", @@ -14116,8 +5174,7 @@ "re-reselect": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/re-reselect/-/re-reselect-4.0.0.tgz", - "integrity": "sha512-wuygyq8TXUlSdVXv2kigXxQNOgdb9m7LbIjwfTNGSpaY1riLd5e+VeQjlQMyUtrk0oiyhi1AqIVynworl3qxHA==", - "requires": {} + "integrity": "sha512-wuygyq8TXUlSdVXv2kigXxQNOgdb9m7LbIjwfTNGSpaY1riLd5e+VeQjlQMyUtrk0oiyhi1AqIVynworl3qxHA==" }, "react-is": { "version": "17.0.1", @@ -15078,21 +6135,6 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, "string-length": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz", @@ -15188,6 +6230,21 @@ } } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "stringify-parameters": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stringify-parameters/-/stringify-parameters-0.0.4.tgz", @@ -15702,7 +6759,6 @@ }, "uslug": { "version": "git+ssh://git@github.com/laurent22/uslug.git#ba2834d79beb0435318709958b2f5e817d96674d", - "integrity": "sha512-6zzxOsQp+hbOW4zeplEUhKXnBzYIrqYAVlPepBFz/u5q2OulN7tCmBKyWEzDxaiZOLYnUCTViDLazNoq1J6ciA==", "from": "uslug@git+https://github.com/laurent22/uslug.git#emoji-support", "requires": { "node-emoji": "^1.10.0", @@ -15800,7 +6856,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "devOptional": true, "requires": { "isexe": "^2.0.0" } @@ -15899,8 +6954,7 @@ "version": "7.3.1", "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", - "dev": true, - "requires": {} + "dev": true }, "xml-name-validator": { "version": "3.0.0", diff --git a/packages/renderer/assets/highlight.js/atom-one-dark-reasonable.css b/packages/renderer/assets/highlight.js/atom-one-dark-reasonable.css index 0a43fe26b95..9296216ebf9 100644 --- a/packages/renderer/assets/highlight.js/atom-one-dark-reasonable.css +++ b/packages/renderer/assets/highlight.js/atom-one-dark-reasonable.css @@ -1,75 +1 @@ -/* - -Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage - -Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax - -*/ -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #abb2bf; - background: #282c34; -} -.hljs-keyword, .hljs-operator { - color: #F92672; -} -.hljs-pattern-match { - color: #F92672; -} -.hljs-pattern-match .hljs-constructor { - color: #61aeee; -} -.hljs-function { - color: #61aeee; -} -.hljs-function .hljs-params { - color: #A6E22E; -} -.hljs-function .hljs-params .hljs-typing { - color: #FD971F; -} -.hljs-module-access .hljs-module { - color: #7e57c2; -} -.hljs-constructor { - color: #e2b93d; -} -.hljs-constructor .hljs-string { - color: #9CCC65; -} -.hljs-comment, .hljs-quote { - color: #b18eb1; - font-style: italic; -} -.hljs-doctag, .hljs-formula { - color: #c678dd; -} -.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst { - color: #e06c75; -} -.hljs-literal { - color: #56b6c2; -} -.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string { - color: #98c379; -} -.hljs-built_in, .hljs-class .hljs-title { - color: #e6c07b; -} -.hljs-attr, .hljs-variable, .hljs-template-variable, .hljs-type, .hljs-selector-class, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-number { - color: #d19a66; -} -.hljs-symbol, .hljs-bullet, .hljs-link, .hljs-meta, .hljs-selector-id, .hljs-title { - color: #61aeee; -} -.hljs-emphasis { - font-style: italic; -} -.hljs-strong { - font-weight: bold; -} -.hljs-link { - text-decoration: underline; -} +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-keyword,.hljs-operator,.hljs-pattern-match{color:#f92672}.hljs-function,.hljs-pattern-match .hljs-constructor{color:#61aeee}.hljs-function .hljs-params{color:#a6e22e}.hljs-function .hljs-params .hljs-typing{color:#fd971f}.hljs-module-access .hljs-module{color:#7e57c2}.hljs-constructor{color:#e2b93d}.hljs-constructor .hljs-string{color:#9ccc65}.hljs-comment,.hljs-quote{color:#b18eb1;font-style:italic}.hljs-doctag,.hljs-formula{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/packages/renderer/assets/highlight.js/atom-one-light.css b/packages/renderer/assets/highlight.js/atom-one-light.css index d5bd1d2a9a3..df0268a948d 100644 --- a/packages/renderer/assets/highlight.js/atom-one-light.css +++ b/packages/renderer/assets/highlight.js/atom-one-light.css @@ -1,96 +1 @@ -/* - -Atom One Light by Daniel Gamage -Original One Light Syntax theme from https://github.com/atom/one-light-syntax - -base: #fafafa -mono-1: #383a42 -mono-2: #686b77 -mono-3: #a0a1a7 -hue-1: #0184bb -hue-2: #4078f2 -hue-3: #a626a4 -hue-4: #50a14f -hue-5: #e45649 -hue-5-2: #c91243 -hue-6: #986801 -hue-6-2: #c18401 - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #383a42; - background: #fafafa; -} - -.hljs-comment, -.hljs-quote { - color: #a0a1a7; - font-style: italic; -} - -.hljs-doctag, -.hljs-keyword, -.hljs-formula { - color: #a626a4; -} - -.hljs-section, -.hljs-name, -.hljs-selector-tag, -.hljs-deletion, -.hljs-subst { - color: #e45649; -} - -.hljs-literal { - color: #0184bb; -} - -.hljs-string, -.hljs-regexp, -.hljs-addition, -.hljs-attribute, -.hljs-meta-string { - color: #50a14f; -} - -.hljs-built_in, -.hljs-class .hljs-title { - color: #c18401; -} - -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-type, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-number { - color: #986801; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link, -.hljs-meta, -.hljs-selector-id, -.hljs-title { - color: #4078f2; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-link { - text-decoration: underline; -} +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#383a42;background:#fafafa}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#c18401}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/packages/renderer/assets/mermaid/mermaid.min.js b/packages/renderer/assets/mermaid/mermaid.min.js index 0a4028453a2..69a4770d655 100644 --- a/packages/renderer/assets/mermaid/mermaid.min.js +++ b/packages/renderer/assets/mermaid/mermaid.min.js @@ -1,4 +1,4 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mermaid=e():t.mermaid=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=384)}([function(t,e,n){"use strict";n.r(e);var r=function(t,e){return te?1:t>=e?0:NaN},i=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return r(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)>0?i=a:r=a+1}return r}}};var a=i(r),o=a.right,s=a.left,c=o,u=function(t,e){null==e&&(e=l);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);nt?1:e>=t?0:NaN},d=function(t){return null===t?NaN:+t},p=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o1)return c/(a-1)},y=function(t,e){var n=p(t,e);return n?Math.sqrt(n):n},g=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o=n)for(r=i=n;++on&&(r=n),i=n)for(r=i=n;++on&&(r=n),i0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=0?(a>=w?10:a>=E?5:a>=T?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=w?10:a>=E?5:a>=T?2:1)}function A(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=w?i*=10:a>=E?i*=5:a>=T&&(i*=2),eh;)f.pop(),--d;var p,y=new Array(d+1);for(i=0;i<=d;++i)(p=y[i]=[]).x0=i>0?f[i-1]:l,p.x1=i=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},N=function(t,e,n){return t=b.call(t,d).sort(r),Math.ceil((n-e)/(2*(B(t,.75)-B(t,.25))*Math.pow(t.length,-1/3)))},D=function(t,e,n){return Math.ceil((n-e)/(3.5*y(t)*Math.pow(t.length,-1/3)))},L=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++ar&&(r=n)}else for(;++a=n)for(r=n;++ar&&(r=n);return r},I=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},P=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++an&&(r=n)}else for(;++a=n)for(r=n;++an&&(r=n);return r},j=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},Y=function(t,e){if(n=t.length){var n,i,a=0,o=0,s=t[o];for(null==e&&(e=r);++a=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ct(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var _t="http://www.w3.org/1999/xhtml",kt={svg:"http://www.w3.org/2000/svg",xhtml:_t,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},wt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),kt.hasOwnProperty(e)?{space:kt[e],local:t}:t};function Et(t){return function(){this.removeAttribute(t)}}function Tt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Ct(t,e){return function(){this.setAttribute(t,e)}}function St(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function At(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}var Ot=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Bt(t){return function(){this.style.removeProperty(t)}}function Nt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Dt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Lt(t,e){return t.style.getPropertyValue(e)||Ot(t).getComputedStyle(t,null).getPropertyValue(e)}function It(t){return function(){delete this[t]}}function Rt(t,e){return function(){this[t]=e}}function Ft(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function Pt(t){return t.trim().split(/^|\s+/)}function jt(t){return t.classList||new Yt(t)}function Yt(t){this._node=t,this._names=Pt(t.getAttribute("class")||"")}function zt(t,e){for(var n=jt(t),r=-1,i=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Vt(){this.textContent=""}function Ht(t){return function(){this.textContent=t}}function Gt(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Xt(){this.innerHTML=""}function Zt(t){return function(){this.innerHTML=t}}function Qt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Kt(){this.nextSibling&&this.parentNode.appendChild(this)}function Jt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function te(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===_t&&e.documentElement.namespaceURI===_t?e.createElement(t):e.createElementNS(n,t)}}function ee(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}var ne=function(t){var e=wt(t);return(e.local?ee:te)(e)};function re(){return null}function ie(){var t=this.parentNode;t&&t.removeChild(this)}function ae(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function oe(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}var se={},ce=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(se={mouseenter:"mouseover",mouseleave:"mouseout"}));function ue(t,e,n){return t=le(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function le(t,e,n){return function(r){var i=ce;ce=r;try{t.call(this,this.__data__,e,n)}finally{ce=i}}}function he(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function fe(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=_&&(_=x+1);!(b=v[_])&&++_=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=xt);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?Bt:"function"==typeof e?Dt:Nt)(t,e,null==n?"":n)):Lt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?It:"function"==typeof e?Ft:Rt)(t,e)):this.node()[t]},classed:function(t,e){var n=Pt(t+"");if(arguments.length<2){for(var r=jt(this.node()),i=-1,a=n.length;++i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?new Ge(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?new Ge(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Le.exec(t))?new Ge(e[1],e[2],e[3],1):(e=Ie.exec(t))?new Ge(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Re.exec(t))?We(e[1],e[2],e[3],e[4]):(e=Fe.exec(t))?We(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Pe.exec(t))?Ke(e[1],e[2]/100,e[3]/100,1):(e=je.exec(t))?Ke(e[1],e[2]/100,e[3]/100,e[4]):Ye.hasOwnProperty(t)?qe(Ye[t]):"transparent"===t?new Ge(NaN,NaN,NaN,0):null}function qe(t){return new Ge(t>>16&255,t>>8&255,255&t,1)}function We(t,e,n,r){return r<=0&&(t=e=n=NaN),new Ge(t,e,n,r)}function Ve(t){return t instanceof Me||(t=$e(t)),t?new Ge((t=t.rgb()).r,t.g,t.b,t.opacity):new Ge}function He(t,e,n,r){return 1===arguments.length?Ve(t):new Ge(t,e,n,null==r?1:r)}function Ge(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Xe(){return"#"+Qe(this.r)+Qe(this.g)+Qe(this.b)}function Ze(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Qe(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Ke(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new en(t,e,n,r)}function Je(t){if(t instanceof en)return new en(t.h,t.s,t.l,t.opacity);if(t instanceof Me||(t=$e(t)),!t)return new en;if(t instanceof en)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new en(o,s,c,t.opacity)}function tn(t,e,n,r){return 1===arguments.length?Je(t):new en(t,e,n,null==r?1:r)}function en(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function nn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function rn(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Se(Me,$e,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:ze,formatHex:ze,formatHsl:function(){return Je(this).formatHsl()},formatRgb:Ue,toString:Ue}),Se(Ge,He,Ae(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ge(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ge(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Xe,formatHex:Xe,formatRgb:Ze,toString:Ze})),Se(en,tn,Ae(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new en(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new en(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Ge(nn(t>=240?t-240:t+120,i,r),nn(t,i,r),nn(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var an=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r180||n<-180?n-360*Math.round(n/360):n):sn(isNaN(t)?e:t)}function ln(t){return 1==(t=+t)?hn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):sn(isNaN(e)?n:e)}}function hn(t,e){var n=e-t;return n?cn(t,n):sn(isNaN(t)?e:t)}var fn=function t(e){var n=ln(e);function r(t,e){var r=n((t=He(t)).r,(e=He(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=hn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function dn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:_n(n,r)})),a=En.lastIndex;return a=0&&e._call.call(null,t),e=e._next;--Dn}function Vn(){Fn=(Rn=jn.now())+Pn,Dn=Ln=0;try{Wn()}finally{Dn=0,function(){var t,e,n=Tn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Tn=e);Cn=t,Gn(r)}(),Fn=0}}function Hn(){var t=jn.now(),e=t-Rn;e>1e3&&(Pn-=e,Rn=t)}function Gn(t){Dn||(Ln&&(Ln=clearTimeout(Ln)),t-Fn>24?(t<1/0&&(Ln=setTimeout(Vn,t-jn.now()-Pn)),In&&(In=clearInterval(In))):(In||(Rn=jn.now(),In=setInterval(Hn,1e3)),Dn=1,Yn(Vn)))}$n.prototype=qn.prototype={constructor:$n,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?zn():+n)+(null==e?0:+e),this._next||Cn===this||(Cn?Cn._next=this:Tn=this,Cn=this),this._call=t,this._time=n,Gn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Gn())}};var Xn=function(t,e,n){var r=new $n;return e=null==e?0:+e,r.restart((function(n){r.stop(),t(n+e)}),e,n),r},Zn=lt("start","end","cancel","interrupt"),Qn=[],Kn=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Xn(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function tr(t,e){var n=er(t,e);if(n.state>3)throw new Error("too late; already running");return n}function er(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var nr,rr,ir,ar,or=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}},sr=180/Math.PI,cr={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},ur=function(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:_n(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:_n(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:_n(t,n)},{i:s-2,x:_n(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?Jn:tr;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Dr=_e.prototype.constructor;function Lr(t){return function(){this.style.removeProperty(t)}}function Ir(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Rr(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Ir(t,a,n)),r}return a._value=e,a}function Fr(t){return function(e){this.textContent=t.call(this,e)}}function Pr(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Fr(r)),e}return r._value=t,r}var jr=0;function Yr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function zr(t){return _e().transition(t)}function Ur(){return++jr}var $r=_e.prototype;function qr(t){return t*t*t}function Wr(t){return--t*t*t+1}function Vr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}Yr.prototype=zr.prototype={constructor:Yr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=ft(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o1&&n.name===e)return new Yr([[t]],Xr,e,+r);return null},Qr=function(t){return function(){return t}},Kr=function(t,e,n){this.target=t,this.type=e,this.selection=n};function Jr(){ce.stopImmediatePropagation()}var ti=function(){ce.preventDefault(),ce.stopImmediatePropagation()},ei={name:"drag"},ni={name:"space"},ri={name:"handle"},ii={name:"center"};function ai(t){return[+t[0],+t[1]]}function oi(t){return[ai(t[0]),ai(t[1])]}function si(t){return function(e){return Bn(e,ce.touches,t)}}var ci={name:"x",handles:["w","e"].map(gi),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ui={name:"y",handles:["n","s"].map(gi),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},li={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(gi),input:function(t){return null==t?null:oi(t)},output:function(t){return t}},hi={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},fi={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},di={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},pi={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},yi={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function gi(t){return{type:t}}function vi(){return!ce.ctrlKey&&!ce.button}function mi(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function bi(){return navigator.maxTouchPoints||"ontouchstart"in this}function xi(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function _i(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function ki(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function wi(){return Ci(ci)}function Ei(){return Ci(ui)}var Ti=function(){return Ci(li)};function Ci(t){var e,n=mi,r=vi,i=bi,a=!0,o=lt("start","brush","end"),s=6;function c(e){var n=e.property("__brush",y).selectAll(".overlay").data([gi("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",hi.overlay).merge(n).each((function(){var t=xi(this).extent;ke(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([gi("selection")]).enter().append("rect").attr("class","selection").attr("cursor",hi.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return hi[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(i).on("touchstart.brush",f).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=ke(this),e=xi(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){return!n&&t.__brush.emitter||new h(t,e)}function h(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function f(){if((!e||ce.touches)&&r.apply(this,arguments)){var n,i,o,s,c,h,f,d,p,y,g,v=this,m=ce.target.__data__.type,b="selection"===(a&&ce.metaKey?m="overlay":m)?ei:a&&ce.altKey?ii:ri,x=t===ui?null:pi[m],_=t===ci?null:yi[m],k=xi(v),w=k.extent,E=k.selection,T=w[0][0],C=w[0][1],S=w[1][0],A=w[1][1],M=0,O=0,B=x&&_&&a&&ce.shiftKey,N=ce.touches?si(ce.changedTouches[0].identifier):Nn,D=N(v),L=D,I=l(v,arguments,!0).beforestart();"overlay"===m?(E&&(p=!0),k.selection=E=[[n=t===ui?T:D[0],o=t===ci?C:D[1]],[c=t===ui?S:n,f=t===ci?A:o]]):(n=E[0][0],o=E[0][1],c=E[1][0],f=E[1][1]),i=n,s=o,h=c,d=f;var R=ke(v).attr("pointer-events","none"),F=R.selectAll(".overlay").attr("cursor",hi[m]);if(ce.touches)I.moved=j,I.ended=z;else{var P=ke(ce.view).on("mousemove.brush",j,!0).on("mouseup.brush",z,!0);a&&P.on("keydown.brush",U,!0).on("keyup.brush",$,!0),Te(ce.view)}Jr(),or(v),u.call(v),I.start()}function j(){var t=N(v);!B||y||g||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?g=!0:y=!0),L=t,p=!0,ti(),Y()}function Y(){var t;switch(M=L[0]-D[0],O=L[1]-D[1],b){case ni:case ei:x&&(M=Math.max(T-n,Math.min(S-c,M)),i=n+M,h=c+M),_&&(O=Math.max(C-o,Math.min(A-f,O)),s=o+O,d=f+O);break;case ri:x<0?(M=Math.max(T-n,Math.min(S-n,M)),i=n+M,h=c):x>0&&(M=Math.max(T-c,Math.min(S-c,M)),i=n,h=c+M),_<0?(O=Math.max(C-o,Math.min(A-o,O)),s=o+O,d=f):_>0&&(O=Math.max(C-f,Math.min(A-f,O)),s=o,d=f+O);break;case ii:x&&(i=Math.max(T,Math.min(S,n-M*x)),h=Math.max(T,Math.min(S,c+M*x))),_&&(s=Math.max(C,Math.min(A,o-O*_)),d=Math.max(C,Math.min(A,f+O*_)))}h0&&(n=i-M),_<0?f=d-O:_>0&&(o=s-O),b=ni,F.attr("cursor",hi.selection),Y());break;default:return}ti()}function $(){switch(ce.keyCode){case 16:B&&(y=g=B=!1,Y());break;case 18:b===ii&&(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ri,Y());break;case 32:b===ni&&(ce.altKey?(x&&(c=h-M*x,n=i+M*x),_&&(f=d-O*_,o=s+O*_),b=ii):(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ri),F.attr("cursor",hi[m]),Y());break;default:return}ti()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function y(){var e=this.__brush||{selection:null};return e.extent=oi(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,r=e.__brush,i=l(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=An(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),u.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,r=arguments,i=e.__brush,a=t.input("function"==typeof n?n.apply(e,r):n,i.extent),o=l(e,r).beforestart();or(e),i.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){pe(new Kr(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:Qr(oi(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:Qr(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:Qr(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Si=Math.cos,Ai=Math.sin,Mi=Math.PI,Oi=Mi/2,Bi=2*Mi,Ni=Math.max;function Di(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}var Li=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,c,u,l,h=i.length,f=[],d=k(h),p=[],y=[],g=y.groups=new Array(h),v=new Array(h*h);for(a=0,u=-1;++u1e-6)if(Math.abs(l*s-c*u)>1e-6&&i){var f=n-a,d=r-o,p=s*s+c*c,y=f*f+d*d,g=Math.sqrt(p),v=Math.sqrt(h),m=i*Math.tan((Fi-Math.acos((p+h-y)/(2*g*v)))/2),b=m/v,x=m/g;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+x*s)+","+(this._y1=e+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%Pi+Pi),h>ji?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Fi)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var Ui=zi;function $i(t){return t.source}function qi(t){return t.target}function Wi(t){return t.radius}function Vi(t){return t.startAngle}function Hi(t){return t.endAngle}var Gi=function(){var t=$i,e=qi,n=Wi,r=Vi,i=Hi,a=null;function o(){var o,s=Ii.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),h=r.apply(this,s)-Oi,f=i.apply(this,s)-Oi,d=l*Si(h),p=l*Ai(h),y=+n.apply(this,(s[0]=u,s)),g=r.apply(this,s)-Oi,v=i.apply(this,s)-Oi;if(a||(a=o=Ui()),a.moveTo(d,p),a.arc(0,0,l,h,f),h===g&&f===v||(a.quadraticCurveTo(0,0,y*Si(g),y*Ai(g)),a.arc(0,0,y,g,v)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Ri(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Ri(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ri(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function Xi(){}function Zi(t,e){var n=new Xi;if(t instanceof Xi)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,h=-1,f=n.length,d=r[i++],p=Qi(),y=o();++hr.length)return n;var o,s=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each((function(e,n){o.push({key:n,values:t(e,a)})}))),null!=s?o.sort((function(t,e){return s(t.key,e.key)})):o}(a(t,0,ea,na),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function Ji(){return{}}function ta(t,e,n){t[e]=n}function ea(){return Qi()}function na(t,e,n){t.set(e,n)}function ra(){}var ia=Qi.prototype;function aa(t,e){var n=new ra;if(t instanceof ra)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r6/29*(6/29)*(6/29)?Math.pow(t,1/3):t/(6/29*3*(6/29))+4/29}function va(t){return t>6/29?t*t*t:6/29*3*(6/29)*(t-4/29)}function ma(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ba(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function xa(t){if(t instanceof wa)return new wa(t.h,t.c,t.l,t.opacity);if(t instanceof ya||(t=fa(t)),0===t.a&&0===t.b)return new wa(NaN,0r!=d>r&&n<(f-u)*(r-l)/(d-l)+u&&(i=-i)}return i}function Fa(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var Pa=function(){},ja=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],Ya=function(){var t=1,e=1,n=M,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(Da);else{var r=g(t),i=r[0],o=r[1];e=A(i,o,e),e=k(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,u,l,h,f=new Array,d=new Array;a=s=-1,u=n[0]>=r,ja[u<<1].forEach(p);for(;++a=r,ja[c|u<<1].forEach(p);ja[u<<0].forEach(p);for(;++s=r,l=n[s*t]>=r,ja[u<<1|l<<2].forEach(p);++a=r,h=l,l=n[s*t+a+1]>=r,ja[c|u<<1|l<<2|h<<3].forEach(p);ja[u|l<<3].forEach(p)}a=-1,l=n[s*t]>=r,ja[l<<2].forEach(p);for(;++a=r,ja[l<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(r),l=o(c);(e=d[u])?(n=f[l])?(delete d[e.end],delete f[n.start],e===n?(e.ring.push(c),i(e.ring)):f[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=f[l])?(n=d[u])?(delete f[e.start],delete d[n.end],e===n?(e.ring.push(c),i(e.ring)):f[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete f[e.start],e.ring.unshift(r),f[e.start=u]=e):f[u]=d[l]={start:u,end:l,ring:[r,c]}}ja[l<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n0&&o0&&s0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?La(Na.call(t)):La(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:Pa,i):r===s},i};function za(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function Ua(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function $a(t){return t[0]}function qa(t){return t[1]}function Wa(){return 1}var Va=function(){var t=$a,e=qa,n=Wa,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,u=i+2*s>>o,l=La(20);function h(r){var i=new Float32Array(c*u),h=new Float32Array(c*u);r.forEach((function(r,a,l){var h=+t(r,a,l)+s>>o,f=+e(r,a,l)+s>>o,d=+n(r,a,l);h>=0&&h=0&&f>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),za({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),za({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ua({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=L(i);d=A(0,p,d),(d=k(0,Math.floor(p/d)*d,d)).shift()}return Ya().thresholds(d).size([c,u])(i).map(f)}function f(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(y)}function y(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function g(){return c=r+2*(s=3*a)>>o,u=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:La(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:La(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:La(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,g()},h.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),g()},h.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?La(Na.call(t)):La(t),h):l},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),g()},h},Ha=function(t){return function(){return t}};function Ga(t,e,n,r,i,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function Xa(){return!ce.ctrlKey&&!ce.button}function Za(){return this.parentNode}function Qa(t){return null==t?{x:ce.x,y:ce.y}:t}function Ka(){return navigator.maxTouchPoints||"ontouchstart"in this}Ga.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var Ja=function(){var t,e,n,r,i=Xa,a=Za,o=Qa,s=Ka,c={},u=lt("start","drag","end"),l=0,h=0;function f(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",g).on("touchmove.drag",v).on("touchend.drag touchcancel.drag",m).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var o=b("mouse",a.apply(this,arguments),Nn,this,arguments);o&&(ke(ce.view).on("mousemove.drag",p,!0).on("mouseup.drag",y,!0),Te(ce.view),we(),n=!1,t=ce.clientX,e=ce.clientY,o("start"))}}function p(){if(Ee(),!n){var r=ce.clientX-t,i=ce.clientY-e;n=r*r+i*i>h}c.mouse("drag")}function y(){ke(ce.view).on("mousemove.drag mouseup.drag",null),Ce(ce.view,n),Ee(),c.mouse("end")}function g(){if(i.apply(this,arguments)){var t,e,n=ce.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t9999?"+"+io(e,6):io(e,4))+"-"+io(t.getUTCMonth()+1,2)+"-"+io(t.getUTCDate(),2)+(a?"T"+io(n,2)+":"+io(r,2)+":"+io(i,2)+"."+io(a,3)+"Z":i?"T"+io(n,2)+":"+io(r,2)+":"+io(i,2)+"Z":r||n?"T"+io(n,2)+":"+io(r,2)+"Z":"")}var oo=function(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],a=t.length,o=0,s=0,c=a<=0,u=!1;function l(){if(c)return eo;if(u)return u=!1,to;var e,r,i=o;if(34===t.charCodeAt(i)){for(;o++=a?c=!0:10===(r=t.charCodeAt(o++))?u=!0:13===r&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o=(a=(y+v)/2))?y=a:v=a,(l=n>=(o=(g+m)/2))?g=o:m=o,i=d,!(d=d[h=l<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(y+v)/2))?y=a:v=a,(l=n>=(o=(g+m)/2))?g=o:m=o}while((h=l<<1|u)==(f=(c>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}var _s=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function ks(t){return t[0]}function ws(t){return t[1]}function Es(t,e,n){var r=new Ts(null==e?ks:e,null==n?ws:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Ts(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function Cs(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var Ss=Es.prototype=Ts.prototype;function As(t){return t.x+t.vx}function Ms(t){return t.y+t.vy}Ss.copy=function(){var t,e,n=new Ts(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=Cs(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=Cs(e));return n},Ss.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return xs(this.cover(e,n),e,n,t)},Ss.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,u=1/0,l=-1/0,h=-1/0;for(n=0;nl&&(l=r),ih&&(h=i));if(c>l||u>h)return this;for(this.cover(c,u).cover(l,h),n=0;nt||t>=i||r>e||e>=a;)switch(s=(ef||(a=c.y0)>d||(o=c.x1)=v)<<1|t>=g)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var m=t-+this._x.call(null,y.data),b=e-+this._y.call(null,y.data),x=m*m+b*b;if(x=(s=(p+g)/2))?p=s:g=s,(l=o>=(c=(y+v)/2))?y=c:v=c,e=d,!(d=d[h=l<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},Ss.removeAll=function(t){for(var e=0,n=t.length;ec+d||iu+d||as.index){var p=c-o.x-o.vx,y=u-o.y-o.vy,g=p*p+y*y;gt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,u=0,l=t.length;for(null==r?r=1/0:r*=r,u=0;u1?(u.on(t,n),e):u.on(t)}}},Ps=function(){var t,e,n,r,i=ms(-30),a=1,o=1/0,s=.81;function c(r){var i,a=t.length,o=Es(t,Ls,Is).visitAfter(l);for(n=r,i=0;i=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=bs())*l),0===h&&(d+=(h=bs())*h),d1?r[0]+r.slice(2):r,+t.slice(n+1)]},$s=function(t){return(t=Us(Math.abs(t)))?t[1]:NaN},qs=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ws(t){if(!(e=qs.exec(t)))throw new Error("invalid format: "+t);var e;return new Vs({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Vs(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}Ws.prototype=Vs.prototype,Vs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Hs,Gs,Xs,Zs,Qs=function(t,e){var n=Us(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Ks={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return Qs(100*t,e)},r:Qs,s:function(t,e){var n=Us(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Hs=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Us(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Js=function(t){return t},tc=Array.prototype.map,ec=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],nc=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Js:(e=tc.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Js:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(tc.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Ws(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,y=t.comma,g=t.precision,v=t.trim,m=t.type;"n"===m?(y=!0,m="g"):Ks[m]||(void 0===g&&(g=12),v=!0,m="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",x="$"===f?a:/[%p]/.test(m)?c:"",_=Ks[m],k=/[defgprs%]/.test(m);function w(t){var i,a,c,f=b,w=x;if("c"===m)w=_(t)+w,t="";else{var E=(t=+t)<0;if(t=isNaN(t)?l:_(Math.abs(t),g),v&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0==+t&&(E=!1),f=(E?"("===h?h:u:"-"===h||"("===h?"":h)+f,w=("s"===m?ec[8+Hs/3]:"")+w+(E&&"("===h?")":""),k)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}y&&!d&&(t=r(t,1/0));var T=f.length+t.length+w.length,C=T>1)+f+t+w+C.slice(T);break;default:t=C+f+t+w}return s(t)}return g=void 0===g?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=Ws(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor($s(e)/3))),i=Math.pow(10,-r),a=ec[8+r/3];return function(t){return n(i*t)+a}}}};function rc(t){return Gs=nc(t),Xs=Gs.format,Zs=Gs.formatPrefix,Gs}rc({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var ic=function(t){return Math.max(0,-$s(Math.abs(t)))},ac=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor($s(e)/3)))-$s(Math.abs(t)))},oc=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,$s(e)-$s(t))+1},sc=function(){return new cc};function cc(){this.reset()}cc.prototype={constructor:cc,reset:function(){this.s=this.t=0},add:function(t){lc(uc,t,this.t),lc(this,uc.s,this.s),this.s?this.t+=uc.t:this.s=uc.t},valueOf:function(){return this.s}};var uc=new cc;function lc(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var hc=Math.PI,fc=hc/2,dc=hc/4,pc=2*hc,yc=180/hc,gc=hc/180,vc=Math.abs,mc=Math.atan,bc=Math.atan2,xc=Math.cos,_c=Math.ceil,kc=Math.exp,wc=(Math.floor,Math.log),Ec=Math.pow,Tc=Math.sin,Cc=Math.sign||function(t){return t>0?1:t<0?-1:0},Sc=Math.sqrt,Ac=Math.tan;function Mc(t){return t>1?0:t<-1?hc:Math.acos(t)}function Oc(t){return t>1?fc:t<-1?-fc:Math.asin(t)}function Bc(t){return(t=Tc(t/2))*t}function Nc(){}function Dc(t,e){t&&Ic.hasOwnProperty(t.type)&&Ic[t.type](t,e)}var Lc={Feature:function(t,e){Dc(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,a=xc(e=(e*=gc)/2+dc),o=Tc(e),s=Uc*o,c=zc*a+s*xc(i),u=s*r*Tc(i);qc.add(bc(u,c)),Yc=t,zc=a,Uc=o}var Qc=function(t){return Wc.reset(),$c(t,Vc),2*Wc};function Kc(t){return[bc(t[1],t[0]),Oc(t[2])]}function Jc(t){var e=t[0],n=t[1],r=xc(n);return[r*xc(e),r*Tc(e),Tc(n)]}function tu(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function eu(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function nu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function ru(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function iu(t){var e=Sc(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var au,ou,su,cu,uu,lu,hu,fu,du,pu,yu=sc(),gu={point:vu,lineStart:bu,lineEnd:xu,polygonStart:function(){gu.point=_u,gu.lineStart=ku,gu.lineEnd=wu,yu.reset(),Vc.polygonStart()},polygonEnd:function(){Vc.polygonEnd(),gu.point=vu,gu.lineStart=bu,gu.lineEnd=xu,qc<0?(au=-(su=180),ou=-(cu=90)):yu>1e-6?cu=90:yu<-1e-6&&(ou=-90),pu[0]=au,pu[1]=su},sphere:function(){au=-(su=180),ou=-(cu=90)}};function vu(t,e){du.push(pu=[au=t,su=t]),ecu&&(cu=e)}function mu(t,e){var n=Jc([t*gc,e*gc]);if(fu){var r=eu(fu,n),i=eu([r[1],-r[0],0],r);iu(i),i=Kc(i);var a,o=t-uu,s=o>0?1:-1,c=i[0]*yc*s,u=vc(o)>180;u^(s*uucu&&(cu=a):u^(s*uu<(c=(c+360)%360-180)&&ccu&&(cu=e)),u?tEu(au,su)&&(su=t):Eu(t,su)>Eu(au,su)&&(au=t):su>=au?(tsu&&(su=t)):t>uu?Eu(au,t)>Eu(au,su)&&(su=t):Eu(t,su)>Eu(au,su)&&(au=t)}else du.push(pu=[au=t,su=t]);ecu&&(cu=e),fu=n,uu=t}function bu(){gu.point=mu}function xu(){pu[0]=au,pu[1]=su,gu.point=vu,fu=null}function _u(t,e){if(fu){var n=t-uu;yu.add(vc(n)>180?n+(n>0?360:-360):n)}else lu=t,hu=e;Vc.point(t,e),mu(t,e)}function ku(){Vc.lineStart()}function wu(){_u(lu,hu),Vc.lineEnd(),vc(yu)>1e-6&&(au=-(su=180)),pu[0]=au,pu[1]=su,fu=null}function Eu(t,e){return(e-=t)<0?e+360:e}function Tu(t,e){return t[0]-e[0]}function Cu(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:eEu(r[0],r[1])&&(r[1]=i[1]),Eu(i[0],r[1])>Eu(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=Eu(r[1],i[0]))>o&&(o=s,au=i[0],su=r[1])}return du=pu=null,au===1/0||ou===1/0?[[NaN,NaN],[NaN,NaN]]:[[au,ou],[su,cu]]},qu={sphere:Nc,point:Wu,lineStart:Hu,lineEnd:Zu,polygonStart:function(){qu.lineStart=Qu,qu.lineEnd=Ku},polygonEnd:function(){qu.lineStart=Hu,qu.lineEnd=Zu}};function Wu(t,e){t*=gc;var n=xc(e*=gc);Vu(n*xc(t),n*Tc(t),Tc(e))}function Vu(t,e,n){++Su,Mu+=(t-Mu)/Su,Ou+=(e-Ou)/Su,Bu+=(n-Bu)/Su}function Hu(){qu.point=Gu}function Gu(t,e){t*=gc;var n=xc(e*=gc);Yu=n*xc(t),zu=n*Tc(t),Uu=Tc(e),qu.point=Xu,Vu(Yu,zu,Uu)}function Xu(t,e){t*=gc;var n=xc(e*=gc),r=n*xc(t),i=n*Tc(t),a=Tc(e),o=bc(Sc((o=zu*a-Uu*i)*o+(o=Uu*r-Yu*a)*o+(o=Yu*i-zu*r)*o),Yu*r+zu*i+Uu*a);Au+=o,Nu+=o*(Yu+(Yu=r)),Du+=o*(zu+(zu=i)),Lu+=o*(Uu+(Uu=a)),Vu(Yu,zu,Uu)}function Zu(){qu.point=Wu}function Qu(){qu.point=Ju}function Ku(){tl(Pu,ju),qu.point=Wu}function Ju(t,e){Pu=t,ju=e,t*=gc,e*=gc,qu.point=tl;var n=xc(e);Yu=n*xc(t),zu=n*Tc(t),Uu=Tc(e),Vu(Yu,zu,Uu)}function tl(t,e){t*=gc;var n=xc(e*=gc),r=n*xc(t),i=n*Tc(t),a=Tc(e),o=zu*a-Uu*i,s=Uu*r-Yu*a,c=Yu*i-zu*r,u=Sc(o*o+s*s+c*c),l=Oc(u),h=u&&-l/u;Iu+=h*o,Ru+=h*s,Fu+=h*c,Au+=l,Nu+=l*(Yu+(Yu=r)),Du+=l*(zu+(zu=i)),Lu+=l*(Uu+(Uu=a)),Vu(Yu,zu,Uu)}var el=function(t){Su=Au=Mu=Ou=Bu=Nu=Du=Lu=Iu=Ru=Fu=0,$c(t,qu);var e=Iu,n=Ru,r=Fu,i=e*e+n*n+r*r;return i<1e-12&&(e=Nu,n=Du,r=Lu,Au<1e-6&&(e=Mu,n=Ou,r=Bu),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[bc(n,e)*yc,Oc(r/Sc(i))*yc]},nl=function(t){return function(){return t}},rl=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function il(t,e){return[vc(t)>hc?t+Math.round(-t/pc)*pc:t,e]}function al(t,e,n){return(t%=pc)?e||n?rl(sl(t),cl(e,n)):sl(t):e||n?cl(e,n):il}function ol(t){return function(e,n){return[(e+=t)>hc?e-pc:e<-hc?e+pc:e,n]}}function sl(t){var e=ol(t);return e.invert=ol(-t),e}function cl(t,e){var n=xc(t),r=Tc(t),i=xc(e),a=Tc(e);function o(t,e){var o=xc(e),s=xc(t)*o,c=Tc(t)*o,u=Tc(e),l=u*n+s*r;return[bc(c*i-l*a,s*n-u*r),Oc(l*i+c*a)]}return o.invert=function(t,e){var o=xc(e),s=xc(t)*o,c=Tc(t)*o,u=Tc(e),l=u*i-c*a;return[bc(c*i+u*a,s*n+l*r),Oc(l*n-s*r)]},o}il.invert=il;var ul=function(t){function e(e){return(e=t(e[0]*gc,e[1]*gc))[0]*=yc,e[1]*=yc,e}return t=al(t[0]*gc,t[1]*gc,t.length>2?t[2]*gc:0),e.invert=function(e){return(e=t.invert(e[0]*gc,e[1]*gc))[0]*=yc,e[1]*=yc,e},e};function ll(t,e,n,r,i,a){if(n){var o=xc(e),s=Tc(e),c=r*n;null==i?(i=e+r*pc,a=e-c/2):(i=hl(o,i),a=hl(o,a),(r>0?ia)&&(i+=r*pc));for(var u,l=i;r>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},pl=function(t,e){return vc(t[0]-e[0])<1e-6&&vc(t[1]-e[1])<1e-6};function yl(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var gl=function(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(pl(r,o)){for(i.lineStart(),a=0;a=0;--a)i.point((l=u[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function vl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,T=E*w,C=T>hc,S=y*_;if(ml.add(bc(S*E*Tc(T),g*k+S*xc(T))),o+=C?w+E*pc:w,C^d>=n^b>=n){var A=eu(Jc(f),Jc(m));iu(A);var M=eu(a,A);iu(M);var O=(C^w>=0?-1:1)*Oc(M[2]);(r>O||r===O&&(A[0]||A[1]))&&(s+=C^w>=0?1:-1)}}return(o<-1e-6||o<1e-6&&ml<-1e-6)^1&s},_l=function(t,e,n,r){return function(i){var a,o,s,c=e(i),u=dl(),l=e(u),h=!1,f={point:d,lineStart:y,lineEnd:g,polygonStart:function(){f.point=v,f.lineStart=m,f.lineEnd=b,o=[],a=[]},polygonEnd:function(){f.point=d,f.lineStart=y,f.lineEnd=g,o=F(o);var t=xl(a,r);o.length?(h||(i.polygonStart(),h=!0),gl(o,wl,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function y(){f.point=p,c.lineStart()}function g(){f.point=d,c.lineEnd()}function v(t,e){s.push([t,e]),l.point(t,e)}function m(){l.lineStart(),s=[]}function b(){v(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,c=l.clean(),f=u.result(),d=f.length;if(s.pop(),a.push(s),s=null,d)if(1&c){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t1&&2&c&&f.push(f.pop().concat(f.shift())),o.push(f.filter(kl))}return f}};function kl(t){return t.length>1}function wl(t,e){return((t=t.x)[0]<0?t[1]-fc-1e-6:fc-t[1])-((e=e.x)[0]<0?e[1]-fc-1e-6:fc-e[1])}var El=_l((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?hc:-hc,c=vc(a-n);vc(c-hc)<1e-6?(t.point(n,r=(r+o)/2>0?fc:-fc),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=hc&&(vc(n-i)<1e-6&&(n-=1e-6*i),vc(a-s)<1e-6&&(a-=1e-6*s),r=function(t,e,n,r){var i,a,o=Tc(t-n);return vc(o)>1e-6?mc((Tc(e)*(a=xc(r))*Tc(n)-Tc(r)*(i=xc(e))*Tc(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*fc,r.point(-hc,i),r.point(0,i),r.point(hc,i),r.point(hc,0),r.point(hc,-i),r.point(0,-i),r.point(-hc,-i),r.point(-hc,0),r.point(-hc,i);else if(vc(t[0]-e[0])>1e-6){var a=t[0]0,i=vc(e)>1e-6;function a(t,n){return xc(t)*xc(n)>e}function o(t,n,r){var i=[1,0,0],a=eu(Jc(t),Jc(n)),o=tu(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var u=e*o/c,l=-e*s/c,h=eu(i,a),f=ru(i,u);nu(f,ru(a,l));var d=h,p=tu(f,d),y=tu(d,d),g=p*p-y*(tu(f,f)-1);if(!(g<0)){var v=Sc(g),m=ru(d,(-p-v)/y);if(nu(m,f),m=Kc(m),!r)return m;var b,x=t[0],_=n[0],k=t[1],w=n[1];_0^m[1]<(vc(m[0]-x)<1e-6?k:w):k<=m[1]&&m[1]<=w:E>hc^(x<=m[0]&&m[0]<=_)){var C=ru(d,(-p+v)/y);return nu(C,f),[m,Kc(C)]}}}function s(e,n){var i=r?t:hc-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return _l(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(h,f){var d,p=[h,f],y=a(h,f),g=r?y?0:s(h,f):y?s(h+(h<0?hc:-hc),f):0;if(!e&&(u=c=y)&&t.lineStart(),y!==c&&(!(d=o(e,p))||pl(e,d)||pl(p,d))&&(p[0]+=1e-6,p[1]+=1e-6,y=a(p[0],p[1])),y!==c)l=0,y?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1]),t.lineEnd()),e=d;else if(i&&e&&r^y){var v;g&n||!(v=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!y||e&&pl(e,p)||t.point(p[0],p[1]),e=p,c=y,n=g},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,r,i,a){ll(a,t,n,i,e,r)}),r?[0,-t]:[-hc,t-hc])};function Cl(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,u){var l=0,h=0;if(null==i||(l=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==h);else u.point(a[0],a[1])}function o(r,i){return vc(r[0]-t)<1e-6?i>0?0:3:vc(r[0]-n)<1e-6?i>0?2:1:vc(r[1]-e)<1e-6?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,h,f,d,p,y,g,v,m,b=o,x=dl(),_={point:k,lineStart:function(){_.point=w,u&&u.push(l=[]);v=!0,g=!1,p=y=NaN},lineEnd:function(){c&&(w(h,f),d&&g&&x.rejoin(),c.push(x.result()));_.point=k,g&&b.lineEnd()},polygonStart:function(){b=x,c=[],u=[],m=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=u.length;nr&&(f-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(f-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=m&&e,i=(c=F(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&gl(c,s,e,a,o),o.polygonEnd());b=o,c=u=l=null}};function k(t,e){i(t,e)&&b.point(t,e)}function w(a,o){var s=i(a,o);if(u&&l.push([a,o]),v)h=a,f=o,d=s,v=!1,s&&(b.lineStart(),b.point(a,o));else if(s&&g)b.point(a,o);else{var c=[p=Math.max(-1e9,Math.min(1e9,p)),y=Math.max(-1e9,Math.min(1e9,y))],x=[a=Math.max(-1e9,Math.min(1e9,a)),o=Math.max(-1e9,Math.min(1e9,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],u=0,l=1,h=e[0]-s,f=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o0)){if(o/=f,f<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=a-c,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o0&&(t[0]=s+u*h,t[1]=c+u*f),l<1&&(e[0]=s+l*h,e[1]=c+l*f),!0}}}}}(c,x,t,e,n,r)?s&&(b.lineStart(),b.point(a,o),m=!1):(g||(b.lineStart(),b.point(c[0],c[1])),b.point(x[0],x[1]),s||b.lineEnd(),m=!1)}p=a,y=o,g=s}return _}}var Sl,Al,Ml,Ol=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=Cl(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}},Bl=sc(),Nl={sphere:Nc,point:Nc,lineStart:function(){Nl.point=Ll,Nl.lineEnd=Dl},lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc};function Dl(){Nl.point=Nl.lineEnd=Nc}function Ll(t,e){Sl=t*=gc,Al=Tc(e*=gc),Ml=xc(e),Nl.point=Il}function Il(t,e){t*=gc;var n=Tc(e*=gc),r=xc(e),i=vc(t-Sl),a=xc(i),o=r*Tc(i),s=Ml*n-Al*r*a,c=Al*n+Ml*r*a;Bl.add(bc(Sc(o*o+s*s),c)),Sl=t,Al=n,Ml=r}var Rl=function(t){return Bl.reset(),$c(t,Nl),+Bl},Fl=[null,null],Pl={type:"LineString",coordinates:Fl},jl=function(t,e){return Fl[0]=t,Fl[1]=e,Rl(Pl)},Yl={Feature:function(t,e){return Ul(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r0&&(i=jl(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<1e-12*i)return!0;n=r}return!1}function Wl(t,e){return!!xl(t.map(Vl),Hl(e))}function Vl(t){return(t=t.map(Hl)).pop(),t}function Hl(t){return[t[0]*gc,t[1]*gc]}var Gl=function(t,e){return(t&&Yl.hasOwnProperty(t.type)?Yl[t.type]:Ul)(t,e)};function Xl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Zl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function Ql(){var t,e,n,r,i,a,o,s,c,u,l,h,f=10,d=f,p=90,y=360,g=2.5;function v(){return{type:"MultiLineString",coordinates:m()}}function m(){return k(_c(r/p)*p,n,p).map(l).concat(k(_c(s/y)*y,o,y).map(h)).concat(k(_c(e/f)*f,t,f).filter((function(t){return vc(t%p)>1e-6})).map(c)).concat(k(_c(a/d)*d,i,d).filter((function(t){return vc(t%y)>1e-6})).map(u))}return v.lines=function(){return m().map((function(t){return{type:"LineString",coordinates:t}}))},v.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(h(o).slice(1),l(n).reverse().slice(1),h(s).reverse().slice(1))]}},v.extent=function(t){return arguments.length?v.extentMajor(t).extentMinor(t):v.extentMinor()},v.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),v.precision(g)):[[r,s],[n,o]]},v.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),v.precision(g)):[[e,a],[t,i]]},v.step=function(t){return arguments.length?v.stepMajor(t).stepMinor(t):v.stepMinor()},v.stepMajor=function(t){return arguments.length?(p=+t[0],y=+t[1],v):[p,y]},v.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],v):[f,d]},v.precision=function(f){return arguments.length?(g=+f,c=Xl(a,i,90),u=Zl(e,t,g),l=Xl(s,o,90),h=Zl(r,n,g),v):g},v.extentMajor([[-180,1e-6-90],[180,90-1e-6]]).extentMinor([[-180,-80-1e-6],[180,80+1e-6]])}function Kl(){return Ql()()}var Jl,th,eh,nh,rh=function(t,e){var n=t[0]*gc,r=t[1]*gc,i=e[0]*gc,a=e[1]*gc,o=xc(r),s=Tc(r),c=xc(a),u=Tc(a),l=o*xc(n),h=o*Tc(n),f=c*xc(i),d=c*Tc(i),p=2*Oc(Sc(Bc(a-r)+o*c*Bc(i-n))),y=Tc(p),g=p?function(t){var e=Tc(t*=p)/y,n=Tc(p-t)/y,r=n*l+e*f,i=n*h+e*d,a=n*s+e*u;return[bc(i,r)*yc,bc(a,Sc(r*r+i*i))*yc]}:function(){return[n*yc,r*yc]};return g.distance=p,g},ih=function(t){return t},ah=sc(),oh=sc(),sh={point:Nc,lineStart:Nc,lineEnd:Nc,polygonStart:function(){sh.lineStart=ch,sh.lineEnd=hh},polygonEnd:function(){sh.lineStart=sh.lineEnd=sh.point=Nc,ah.add(vc(oh)),oh.reset()},result:function(){var t=ah/2;return ah.reset(),t}};function ch(){sh.point=uh}function uh(t,e){sh.point=lh,Jl=eh=t,th=nh=e}function lh(t,e){oh.add(nh*t-eh*e),eh=t,nh=e}function hh(){lh(Jl,th)}var fh=sh,dh=1/0,ph=dh,yh=-dh,gh=yh;var vh,mh,bh,xh,_h={point:function(t,e){tyh&&(yh=t);egh&&(gh=e)},lineStart:Nc,lineEnd:Nc,polygonStart:Nc,polygonEnd:Nc,result:function(){var t=[[dh,ph],[yh,gh]];return yh=gh=-(ph=dh=1/0),t}},kh=0,wh=0,Eh=0,Th=0,Ch=0,Sh=0,Ah=0,Mh=0,Oh=0,Bh={point:Nh,lineStart:Dh,lineEnd:Rh,polygonStart:function(){Bh.lineStart=Fh,Bh.lineEnd=Ph},polygonEnd:function(){Bh.point=Nh,Bh.lineStart=Dh,Bh.lineEnd=Rh},result:function(){var t=Oh?[Ah/Oh,Mh/Oh]:Sh?[Th/Sh,Ch/Sh]:Eh?[kh/Eh,wh/Eh]:[NaN,NaN];return kh=wh=Eh=Th=Ch=Sh=Ah=Mh=Oh=0,t}};function Nh(t,e){kh+=t,wh+=e,++Eh}function Dh(){Bh.point=Lh}function Lh(t,e){Bh.point=Ih,Nh(bh=t,xh=e)}function Ih(t,e){var n=t-bh,r=e-xh,i=Sc(n*n+r*r);Th+=i*(bh+t)/2,Ch+=i*(xh+e)/2,Sh+=i,Nh(bh=t,xh=e)}function Rh(){Bh.point=Nh}function Fh(){Bh.point=jh}function Ph(){Yh(vh,mh)}function jh(t,e){Bh.point=Yh,Nh(vh=bh=t,mh=xh=e)}function Yh(t,e){var n=t-bh,r=e-xh,i=Sc(n*n+r*r);Th+=i*(bh+t)/2,Ch+=i*(xh+e)/2,Sh+=i,Ah+=(i=xh*t-bh*e)*(bh+t),Mh+=i*(xh+e),Oh+=3*i,Nh(bh=t,xh=e)}var zh=Bh;function Uh(t){this._context=t}Uh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,pc)}},result:Nc};var $h,qh,Wh,Vh,Hh,Gh=sc(),Xh={point:Nc,lineStart:function(){Xh.point=Zh},lineEnd:function(){$h&&Qh(qh,Wh),Xh.point=Nc},polygonStart:function(){$h=!0},polygonEnd:function(){$h=null},result:function(){var t=+Gh;return Gh.reset(),t}};function Zh(t,e){Xh.point=Qh,qh=Vh=t,Wh=Hh=e}function Qh(t,e){Vh-=t,Hh-=e,Gh.add(Sc(Vh*Vh+Hh*Hh)),Vh=t,Hh=e}var Kh=Xh;function Jh(){this._string=[]}function tf(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}Jh.prototype={_radius:4.5,_circle:tf(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=tf(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var ef=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),$c(t,n(r))),r.result()}return a.area=function(t){return $c(t,n(fh)),fh.result()},a.measure=function(t){return $c(t,n(Kh)),Kh.result()},a.bounds=function(t){return $c(t,n(_h)),_h.result()},a.centroid=function(t){return $c(t,n(zh)),zh.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,ih):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new Jh):new Uh(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},nf=function(t){return{stream:rf(t)}};function rf(t){return function(e){var n=new af;for(var r in t)n[r]=t[r];return n.stream=e,n}}function af(){}function of(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),$c(n,t.stream(_h)),e(_h.result()),null!=r&&t.clipExtent(r),t}function sf(t,e,n){return of(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function cf(t,e,n){return sf(t,[[0,0],e],n)}function uf(t,e,n){return of(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function lf(t,e,n){return of(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}af.prototype={constructor:af,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var hf=xc(30*gc),ff=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,u,l,h,f,d,p,y,g){var v=u-r,m=l-i,b=v*v+m*m;if(b>4*e&&y--){var x=o+f,_=s+d,k=c+p,w=Sc(x*x+_*_+k*k),E=Oc(k/=w),T=vc(vc(k)-1)<1e-6||vc(a-h)<1e-6?(a+h)/2:bc(_,x),C=t(T,E),S=C[0],A=C[1],M=S-r,O=A-i,B=m*M-v*O;(B*B/b>e||vc((v*M+m*O)/b-.5)>.3||o*f+s*d+c*p2?t[2]%360*gc:0,S()):[g*yc,v*yc,m*yc]},T.angle=function(t){return arguments.length?(b=t%360*gc,S()):b*yc},T.precision=function(t){return arguments.length?(o=ff(s,E=t*t),A()):Sc(E)},T.fitExtent=function(t,e){return sf(T,t,e)},T.fitSize=function(t,e){return cf(T,t,e)},T.fitWidth=function(t,e){return uf(T,t,e)},T.fitHeight=function(t,e){return lf(T,t,e)},function(){return e=t.apply(this,arguments),T.invert=e.invert&&C,S()}}function mf(t){var e=0,n=hc/3,r=vf(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*gc,n=t[1]*gc):[e*yc,n*yc]},i}function bf(t,e){var n=Tc(t),r=(n+Tc(e))/2;if(vc(r)<1e-6)return function(t){var e=xc(t);function n(t,n){return[t*e,Tc(n)/e]}return n.invert=function(t,n){return[t/e,Oc(n*e)]},n}(t);var i=1+n*(2*r-n),a=Sc(i)/r;function o(t,e){var n=Sc(i-2*r*Tc(e))/r;return[n*Tc(t*=r),a-n*xc(t)]}return o.invert=function(t,e){var n=a-e;return[bc(t,vc(n))/r*Cc(n),Oc((i-(t*t+n*n)*r*r)/(2*r))]},o}var xf=function(){return mf(bf).scale(155.424).center([0,33.6442])},_f=function(){return xf().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])};var kf=function(){var t,e,n,r,i,a,o=_f(),s=xf().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=xf().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function l(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,l}return l.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n0?e<1e-6-fc&&(e=1e-6-fc):e>fc-1e-6&&(e=fc-1e-6);var n=i/Ec(Nf(e),r);return[n*Tc(r*t),i-n*xc(r*t)]}return a.invert=function(t,e){var n=i-e,a=Cc(r)*Sc(t*t+n*n);return[bc(t,vc(n))/r*Cc(n),2*mc(Ec(i/a,1/r))-fc]},a}var Lf=function(){return mf(Df).scale(109.5).parallels([30,30])};function If(t,e){return[t,e]}If.invert=If;var Rf=function(){return gf(If).scale(152.63)};function Ff(t,e){var n=xc(t),r=t===e?Tc(t):(n-xc(e))/(e-t),i=n/r+t;if(vc(r)<1e-6)return If;function a(t,e){var n=i-e,a=r*t;return[n*Tc(a),i-n*xc(a)]}return a.invert=function(t,e){var n=i-e;return[bc(t,vc(n))/r*Cc(n),i-Cc(r)*Sc(t*t+n*n)]},a}var Pf=function(){return mf(Ff).scale(131.154).center([0,13.9389])},jf=1.340264,Yf=-.081106,zf=893e-6,Uf=.003796,$f=Sc(3)/2;function qf(t,e){var n=Oc($f*Tc(e)),r=n*n,i=r*r*r;return[t*xc(n)/($f*(jf+3*Yf*r+i*(7*zf+9*Uf*r))),n*(jf+Yf*r+i*(zf+Uf*r))]}qf.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(jf+Yf*i+a*(zf+Uf*i))-e)/(jf+3*Yf*i+a*(7*zf+9*Uf*i)))*r)*i*i,!(vc(n)<1e-12));++o);return[$f*t*(jf+3*Yf*i+a*(7*zf+9*Uf*i))/xc(r),Oc(Tc(r)/$f)]};var Wf=function(){return gf(qf).scale(177.158)};function Vf(t,e){var n=xc(e),r=xc(t)*n;return[n*Tc(t)/r,Tc(e)/r]}Vf.invert=Ef(mc);var Hf=function(){return gf(Vf).scale(144.049).clipAngle(60)};function Gf(t,e,n,r){return 1===t&&1===e&&0===n&&0===r?ih:rf({point:function(i,a){this.stream.point(i*t+n,a*e+r)}})}var Xf=function(){var t,e,n,r,i,a,o=1,s=0,c=0,u=1,l=1,h=ih,f=null,d=ih;function p(){return r=i=null,a}return a={stream:function(t){return r&&i===t?r:r=h(d(i=t))},postclip:function(r){return arguments.length?(d=r,f=t=e=n=null,p()):d},clipExtent:function(r){return arguments.length?(d=null==r?(f=t=e=n=null,ih):Cl(f=+r[0][0],t=+r[0][1],e=+r[1][0],n=+r[1][1]),p()):null==f?null:[[f,t],[e,n]]},scale:function(t){return arguments.length?(h=Gf((o=+t)*u,o*l,s,c),p()):o},translate:function(t){return arguments.length?(h=Gf(o*u,o*l,s=+t[0],c=+t[1]),p()):[s,c]},reflectX:function(t){return arguments.length?(h=Gf(o*(u=t?-1:1),o*l,s,c),p()):u<0},reflectY:function(t){return arguments.length?(h=Gf(o*u,o*(l=t?-1:1),s,c),p()):l<0},fitExtent:function(t,e){return sf(a,t,e)},fitSize:function(t,e){return cf(a,t,e)},fitWidth:function(t,e){return uf(a,t,e)},fitHeight:function(t,e){return lf(a,t,e)}}};function Zf(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Zf.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(vc(n)>1e-6&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Qf=function(){return gf(Zf).scale(175.295)};function Kf(t,e){return[xc(e)*Tc(t),Tc(e)]}Kf.invert=Ef(Oc);var Jf=function(){return gf(Kf).scale(249.5).clipAngle(90+1e-6)};function td(t,e){var n=xc(e),r=1+xc(t)*n;return[n*Tc(t)/r,Tc(e)/r]}td.invert=Ef((function(t){return 2*mc(t)}));var ed=function(){return gf(td).scale(250).clipAngle(142)};function nd(t,e){return[wc(Ac((fc+e)/2)),-t]}nd.invert=function(t,e){return[-e,2*mc(kc(t))-fc]};var rd=function(){var t=Bf(nd),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function id(t,e){return t.parent===e.parent?1:2}function ad(t,e){return t+e.x}function od(t,e){return Math.max(t,e.y)}var sd=function(){var t=id,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(ad,0)/t.length}(n),e.y=function(t){return 1+t.reduce(od,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function cd(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function ud(t,e){var n,r,i,a,o,s=new dd(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=ld);n=u.pop();)if(c&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(r=n.children[a]=new dd(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(fd)}function ld(t){return t.children}function hd(t){t.data=t.data.data}function fd(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function dd(t){this.data=t,this.depth=this.height=0,this.parent=null}dd.prototype=ud.prototype={constructor:dd,count:function(){return this.eachAfter(cd)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return ud(this).eachBefore(hd)}};var pd=Array.prototype.slice;var yd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(pd.call(t))).length,a=[];r0&&n*n>r*r+i*i}function bd(t,e){for(var n=0;n(o*=o)?(r=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function Ed(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function Td(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function Cd(t){this._=t,this.next=null,this.previous=null}function Sd(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,c,u,l,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;wd(n,e,r=t[2]),e=new Cd(e),n=new Cd(n),r=new Cd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Od(e),n):t},n.parentId=function(t){return arguments.length?(e=Od(t),n):e},n};function Vd(t,e){return t.parent===e.parent?1:2}function Hd(t){var e=t.children;return e?e[0]:t.t}function Gd(t){var e=t.children;return e?e[e.length-1]:t.t}function Xd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Zd(t,e,n){return t.a.parent===e.parent?t.a:n}function Qd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Qd.prototype=Object.create(dd.prototype);var Kd=function(){var t=Vd,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new Qd(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new Qd(r[i],i)),n.parent=e;return(o.parent=new Qd(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var u=i,l=i,h=i;i.eachBefore((function(t){t.xl.x&&(l=t),t.depth>h.depth&&(h=t)}));var f=u===l?1:t(u,l)/2,d=f-u.x,p=e/(l.x+f+d),y=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*y}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,h=s.m,f=c.m;s=Gd(s),a=Hd(a),s&&a;)c=Hd(c),(o=Gd(o)).a=e,(i=s.z+h-a.z-u+t(s._,a._))>0&&(Xd(Zd(s,e,r),e,i),u+=i,l+=i),h+=s.m,u+=a.m,f+=c.m,l+=o.m;s&&!Gd(o)&&(o.t=s,o.m+=h-l),a&&!Hd(c)&&(c.t=a,c.m+=u-f,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},Jd=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(i-n)/t.value;++sf&&(f=s),g=l*l*y,(d=Math.max(f/g,g/h))>p){l-=s;break}p=d}v.push(o={value:l,dice:c1?e:1)},n}(tp),rp=function(){var t=np,e=!1,n=1,r=1,i=[0],a=Bd,o=Bd,s=Bd,c=Bd,u=Bd;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(Pd),t}function h(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,h=e.x1-n,f=e.y1-n;h=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=c)}var h=u[e],f=r/2+h,d=e+1,p=n-1;for(;d>>1;u[y]c-a){var m=(i*v+o*g)/r;t(e,d,g,i,a,m,c),t(d,n,v,m,a,o,c)}else{var b=(a*v+c*g)/r;t(e,d,g,i,a,o,b),t(d,n,v,i,b,o,c)}}(0,c,t.value,e,n,r,i)},ap=function(t,e,n,r,i){(1&t.depth?Jd:jd)(t,e,n,r,i)},op=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,h=-1,f=o.length,d=t.value;++h1?e:1)},n}(tp),sp=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},cp=function(t,e){var n=un(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},up=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},lp=Math.SQRT2;function hp(t){return((t=Math.exp(t))+1/t)/2}var fp=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-i,h=c-a,f=l*l+h*h;if(f<1e-12)r=Math.log(u/o)/lp,n=function(t){return[i+t*l,a+t*h,o*Math.exp(lp*t*r)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),y=(u*u-o*o-4*f)/(2*u*2*d),g=Math.log(Math.sqrt(p*p+1)-p),v=Math.log(Math.sqrt(y*y+1)-y);r=(v-g)/lp,n=function(t){var e,n=t*r,s=hp(g),c=o/(2*d)*(s*(e=lp*n+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+c*l,a+c*h,o*s/hp(lp*n+g)]}}return n.duration=1e3*r,n};function dp(t){return function(e,n){var r=t((e=tn(e)).h,(n=tn(n)).h),i=hn(e.s,n.s),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var pp=dp(un),yp=dp(hn);function gp(t,e){var n=hn((t=pa(t)).l,(e=pa(e)).l),r=hn(t.a,e.a),i=hn(t.b,e.b),a=hn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function vp(t){return function(e,n){var r=t((e=ka(e)).h,(n=ka(n)).h),i=hn(e.c,n.c),a=hn(e.l,n.l),o=hn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var mp=vp(un),bp=vp(hn);function xp(t){return function e(n){function r(e,r){var i=t((e=Oa(e)).h,(r=Oa(r)).h),a=hn(e.s,r.s),o=hn(e.l,r.l),s=hn(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}var _p=xp(un),kp=xp(hn);function wp(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n1&&(e=t[a[o-2]],n=t[a[o-1]],r=t[s],(n[0]-e[0])*(r[1]-e[1])-(n[1]-e[1])*(r[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}var Mp=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e=0;--e)u.push(t[r[a[e]][2]]);for(e=+s;es!=u>s&&o<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},Bp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(Np),Ip=function t(e){function n(){var t=Lp.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Np),Rp=function t(e){function n(t){return function(){for(var n=0,r=0;rr&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function ty(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i2?ey:ty,i=a=null,h}function h(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),_n)))(n)))},h.domain=function(t){return arguments.length?(o=Up.call(t,Xp),u===Qp||(u=Jp(o)),l()):o.slice()},h.range=function(t){return arguments.length?(s=$p.call(t),l()):s.slice()},h.rangeRound=function(t){return s=$p.call(t),c=up,l()},h.clamp=function(t){return arguments.length?(u=t?Jp(o):Qp,h):u!==Qp},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}function iy(t,e){return ry()(t,e)}var ay=function(t,e,n,r){var i,a=A(t,e,n);switch((r=Ws(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=ac(a,o))||(r.precision=i),Zs(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=oc(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=ic(a))||(r.precision=i-2*("%"===r.type))}return Xs(r)};function oy(t){var e=t.domain;return t.ticks=function(t){var n=e();return C(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ay(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],c=i[o];return c0?r=S(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=S(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(c/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(c*r)/r,e(i)),t},t}function sy(){var t=iy(Qp,Qp);return t.copy=function(){return ny(t,sy())},jp.apply(t,arguments),oy(t)}function cy(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Up.call(e,Xp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return cy(t).unknown(e)},t=arguments.length?Up.call(t,Xp):[0,1],oy(n)}var uy=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o0){for(;fc)break;y.push(h)}}else for(;f=1;--l)if(!((h=u*l)c)break;y.push(h)}}else y=C(f,d,Math.min(d-f,p)).map(n);return r?y.reverse():y},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Xs(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a0?i[r-1]:e[0],r=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return My().domain([e,n]).range(a).unknown(t)},jp.apply(oy(o),arguments)}function Oy(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[c(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=$p.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=$p.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Oy().domain(e).range(n).unknown(t)},jp.apply(i,arguments)}var By=new Date,Ny=new Date;function Dy(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return By.setTime(+e),Ny.setTime(+r),t(By),t(Ny),Math.floor(n(By,Ny))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Ly=Dy((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Ly.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Dy((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Iy=Ly,Ry=Ly.range,Fy=Dy((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),Py=Fy,jy=Fy.range;function Yy(t){return Dy((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var zy=Yy(0),Uy=Yy(1),$y=Yy(2),qy=Yy(3),Wy=Yy(4),Vy=Yy(5),Hy=Yy(6),Gy=zy.range,Xy=Uy.range,Zy=$y.range,Qy=qy.range,Ky=Wy.range,Jy=Vy.range,tg=Hy.range,eg=Dy((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),ng=eg,rg=eg.range,ig=Dy((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),ag=ig,og=ig.range,sg=Dy((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),cg=sg,ug=sg.range,lg=Dy((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),hg=lg,fg=lg.range,dg=Dy((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));dg.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Dy((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):dg:null};var pg=dg,yg=dg.range;function gg(t){return Dy((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var vg=gg(0),mg=gg(1),bg=gg(2),xg=gg(3),_g=gg(4),kg=gg(5),wg=gg(6),Eg=vg.range,Tg=mg.range,Cg=bg.range,Sg=xg.range,Ag=_g.range,Mg=kg.range,Og=wg.range,Bg=Dy((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),Ng=Bg,Dg=Bg.range,Lg=Dy((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Lg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Dy((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var Ig=Lg,Rg=Lg.range;function Fg(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Pg(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function jg(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function Yg(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Kg(i),l=Jg(i),h=Kg(a),f=Jg(a),d=Kg(o),p=Jg(o),y=Kg(s),g=Jg(s),v=Kg(c),m=Jg(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:xv,e:xv,f:Tv,H:_v,I:kv,j:wv,L:Ev,m:Cv,M:Sv,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:em,s:nm,S:Av,u:Mv,U:Ov,V:Bv,w:Nv,W:Dv,x:null,X:null,y:Lv,Y:Iv,Z:Rv,"%":tm},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Fv,e:Fv,f:Uv,H:Pv,I:jv,j:Yv,L:zv,m:$v,M:qv,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:em,s:nm,S:Wv,u:Vv,U:Hv,V:Gv,w:Xv,W:Zv,x:null,X:null,y:Qv,Y:Kv,Z:Jv,"%":tm},_={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=v.exec(e.slice(n));return r?(t.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:lv,e:lv,f:gv,H:fv,I:fv,j:hv,L:yv,m:uv,M:dv,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},q:cv,Q:mv,s:bv,S:pv,u:ev,U:nv,V:rv,w:tv,W:iv,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:ov,Y:av,Z:sv,"%":vv};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Pg(jg(a.y,0,1))).getUTCDay(),r=i>4||0===i?mg.ceil(r):mg(r),r=Ng.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Fg(jg(a.y,0,1))).getDay(),r=i>4||0===i?Uy.ceil(r):Uy(r),r=ng.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Pg(jg(a.y,0,1)).getUTCDay():Fg(jg(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Pg(a)):Fg(a)}}function E(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=_[i in Vg?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return(b.x=k(n,b),b.X=k(r,b),b.c=k(e,b),x.x=k(n,x),x.X=k(r,x),x.c=k(e,x),{format:function(t){var e=k(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}})}var zg,Ug,$g,qg,Wg,Vg={"-":"",_:" ",0:"0"},Hg=/^\s*\d+/,Gg=/^%/,Xg=/[\\^$*+?|[\]().{}]/g;function Zg(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function sv(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function cv(t,e,n){var r=Hg.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function uv(t,e,n){var r=Hg.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function lv(t,e,n){var r=Hg.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function hv(t,e,n){var r=Hg.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function fv(t,e,n){var r=Hg.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function dv(t,e,n){var r=Hg.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function pv(t,e,n){var r=Hg.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function yv(t,e,n){var r=Hg.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function gv(t,e,n){var r=Hg.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function vv(t,e,n){var r=Gg.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function mv(t,e,n){var r=Hg.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function bv(t,e,n){var r=Hg.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function xv(t,e){return Zg(t.getDate(),e,2)}function _v(t,e){return Zg(t.getHours(),e,2)}function kv(t,e){return Zg(t.getHours()%12||12,e,2)}function wv(t,e){return Zg(1+ng.count(Iy(t),t),e,3)}function Ev(t,e){return Zg(t.getMilliseconds(),e,3)}function Tv(t,e){return Ev(t,e)+"000"}function Cv(t,e){return Zg(t.getMonth()+1,e,2)}function Sv(t,e){return Zg(t.getMinutes(),e,2)}function Av(t,e){return Zg(t.getSeconds(),e,2)}function Mv(t){var e=t.getDay();return 0===e?7:e}function Ov(t,e){return Zg(zy.count(Iy(t)-1,t),e,2)}function Bv(t,e){var n=t.getDay();return t=n>=4||0===n?Wy(t):Wy.ceil(t),Zg(Wy.count(Iy(t),t)+(4===Iy(t).getDay()),e,2)}function Nv(t){return t.getDay()}function Dv(t,e){return Zg(Uy.count(Iy(t)-1,t),e,2)}function Lv(t,e){return Zg(t.getFullYear()%100,e,2)}function Iv(t,e){return Zg(t.getFullYear()%1e4,e,4)}function Rv(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Zg(e/60|0,"0",2)+Zg(e%60,"0",2)}function Fv(t,e){return Zg(t.getUTCDate(),e,2)}function Pv(t,e){return Zg(t.getUTCHours(),e,2)}function jv(t,e){return Zg(t.getUTCHours()%12||12,e,2)}function Yv(t,e){return Zg(1+Ng.count(Ig(t),t),e,3)}function zv(t,e){return Zg(t.getUTCMilliseconds(),e,3)}function Uv(t,e){return zv(t,e)+"000"}function $v(t,e){return Zg(t.getUTCMonth()+1,e,2)}function qv(t,e){return Zg(t.getUTCMinutes(),e,2)}function Wv(t,e){return Zg(t.getUTCSeconds(),e,2)}function Vv(t){var e=t.getUTCDay();return 0===e?7:e}function Hv(t,e){return Zg(vg.count(Ig(t)-1,t),e,2)}function Gv(t,e){var n=t.getUTCDay();return t=n>=4||0===n?_g(t):_g.ceil(t),Zg(_g.count(Ig(t),t)+(4===Ig(t).getUTCDay()),e,2)}function Xv(t){return t.getUTCDay()}function Zv(t,e){return Zg(mg.count(Ig(t)-1,t),e,2)}function Qv(t,e){return Zg(t.getUTCFullYear()%100,e,2)}function Kv(t,e){return Zg(t.getUTCFullYear()%1e4,e,4)}function Jv(){return"+0000"}function tm(){return"%"}function em(t){return+t}function nm(t){return Math.floor(+t/1e3)}function rm(t){return zg=Yg(t),Ug=zg.format,$g=zg.parse,qg=zg.utcFormat,Wg=zg.utcParse,zg}rm({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function im(t){return new Date(t)}function am(t){return t instanceof Date?+t:+new Date(+t)}function om(t,e,n,r,a,o,s,c,u){var l=iy(Qp,Qp),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),y=u("%I:%M"),g=u("%I %p"),v=u("%a %d"),m=u("%b %d"),b=u("%B"),x=u("%Y"),_=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[a,1,36e5],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function k(i){return(s(i)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return Gb.h=360*t-100,Gb.s=1.5-1.5*e,Gb.l=.8-.9*e,Gb+""},Zb=He(),Qb=Math.PI/3,Kb=2*Math.PI/3,Jb=function(t){var e;return t=(.5-t)*Math.PI,Zb.r=255*(e=Math.sin(t))*e,Zb.g=255*(e=Math.sin(t+Qb))*e,Zb.b=255*(e=Math.sin(t+Kb))*e,Zb+""},tx=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"};function ex(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var nx=ex(Nm("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),rx=ex(Nm("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),ix=ex(Nm("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),ax=ex(Nm("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),ox=function(t){return ke(ne(t).call(document.documentElement))},sx=0;function cx(){return new ux}function ux(){this._="@"+(++sx).toString(36)}ux.prototype=cx.prototype={constructor:ux,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var lx=function(t){return"string"==typeof t?new be([document.querySelectorAll(t)],[document.documentElement]):new be([null==t?[]:t],me)},hx=function(t,e){null==e&&(e=Mn().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n1?0:t<-1?xx:Math.acos(t)}function Ex(t){return t>=1?_x:t<=-1?-_x:Math.asin(t)}function Tx(t){return t.innerRadius}function Cx(t){return t.outerRadius}function Sx(t){return t.startAngle}function Ax(t){return t.endAngle}function Mx(t){return t&&t.padAngle}function Ox(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*f<1e-12))return[t+(f=(l*(e-a)-h*(t-i))/f)*c,e+f*u]}function Bx(t,e,n,r,i,a,o){var s=t-n,c=e-r,u=(o?a:-a)/bx(s*s+c*c),l=u*c,h=-u*s,f=t+l,d=e+h,p=n+l,y=r+h,g=(f+p)/2,v=(d+y)/2,m=p-f,b=y-d,x=m*m+b*b,_=i-a,k=f*y-p*d,w=(b<0?-1:1)*bx(gx(0,_*_*x-k*k)),E=(k*b-m*w)/x,T=(-k*m-b*w)/x,C=(k*b+m*w)/x,S=(-k*m+b*w)/x,A=E-g,M=T-v,O=C-g,B=S-v;return A*A+M*M>O*O+B*B&&(E=C,T=S),{cx:E,cy:T,x01:-l,y01:-h,x11:E*(i/_-1),y11:T*(i/_-1)}}var Nx=function(){var t=Tx,e=Cx,n=fx(0),r=null,i=Sx,a=Ax,o=Mx,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-_x,d=a.apply(this,arguments)-_x,p=dx(d-f),y=d>f;if(s||(s=c=Ui()),h1e-12)if(p>kx-1e-12)s.moveTo(h*yx(f),h*mx(f)),s.arc(0,0,h,f,d,!y),l>1e-12&&(s.moveTo(l*yx(d),l*mx(d)),s.arc(0,0,l,d,f,y));else{var g,v,m=f,b=d,x=f,_=d,k=p,w=p,E=o.apply(this,arguments)/2,T=E>1e-12&&(r?+r.apply(this,arguments):bx(l*l+h*h)),C=vx(dx(h-l)/2,+n.apply(this,arguments)),S=C,A=C;if(T>1e-12){var M=Ex(T/l*mx(E)),O=Ex(T/h*mx(E));(k-=2*M)>1e-12?(x+=M*=y?1:-1,_-=M):(k=0,x=_=(f+d)/2),(w-=2*O)>1e-12?(m+=O*=y?1:-1,b-=O):(w=0,m=b=(f+d)/2)}var B=h*yx(m),N=h*mx(m),D=l*yx(_),L=l*mx(_);if(C>1e-12){var I,R=h*yx(b),F=h*mx(b),P=l*yx(x),j=l*mx(x);if(p1e-12?A>1e-12?(g=Bx(P,j,B,N,h,A,y),v=Bx(R,F,D,L,h,A,y),s.moveTo(g.cx+g.x01,g.cy+g.y01),A1e-12&&k>1e-12?S>1e-12?(g=Bx(D,L,R,F,l,-S,y),v=Bx(B,N,P,j,l,-S,y),s.lineTo(g.cx+g.x01,g.cy+g.y01),S=l;--h)s.point(g[h],v[h]);s.lineEnd(),s.areaEnd()}y&&(g[u]=+t(f,u,c),v[u]=+n(f,u,c),s.point(e?+e(f,u,c):g[u],r?+r(f,u,c):v[u]))}if(d)return s=null,d+""||null}function u(){return Fx().defined(i).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:fx(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:fx(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:fx(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:fx(+t),r=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:fx(+t),c):n},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:fx(+t),c):r},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(r)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:fx(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c},jx=function(t,e){return et?1:e>=t?0:NaN},Yx=function(t){return t},zx=function(){var t=Yx,e=jx,n=null,r=fx(0),i=fx(kx),a=fx(0);function o(o){var s,c,u,l,h,f=o.length,d=0,p=new Array(f),y=new Array(f),g=+r.apply(this,arguments),v=Math.min(kx,Math.max(-kx,i.apply(this,arguments)-g)),m=Math.min(Math.abs(v)/f,a.apply(this,arguments)),b=m*(v<0?-1:1);for(s=0;s0&&(d+=h);for(null!=e?p.sort((function(t,n){return e(y[t],y[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(v-f*b)/d:0;s0?h*u:0)+b,y[c]={data:o[c],index:s,value:h,startAngle:g,endAngle:l,padAngle:m};return y}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:fx(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:fx(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:fx(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:fx(+t),o):a},o},Ux=qx(Lx);function $x(t){this._curve=t}function qx(t){function e(e){return new $x(t(e))}return e._curve=t,e}function Wx(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(qx(t)):e()._curve},t}$x.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var Vx=function(){return Wx(Fx().curve(Ux))},Hx=function(){var t=Px().curve(Ux),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Wx(n())},delete t.lineX0,t.lineEndAngle=function(){return Wx(r())},delete t.lineX1,t.lineInnerRadius=function(){return Wx(i())},delete t.lineY0,t.lineOuterRadius=function(){return Wx(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(qx(t)):e()._curve},t},Gx=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},Xx=Array.prototype.slice;function Zx(t){return t.source}function Qx(t){return t.target}function Kx(t){var e=Zx,n=Qx,r=Ix,i=Rx,a=null;function o(){var o,s=Xx.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=Ui()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=u,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:fx(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:fx(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function Jx(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function t_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function e_(t,e,n,r,i){var a=Gx(e,n),o=Gx(e,n=(n+i)/2),s=Gx(r,n),c=Gx(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function n_(){return Kx(Jx)}function r_(){return Kx(t_)}function i_(){var t=Kx(e_);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var a_={draw:function(t,e){var n=Math.sqrt(e/xx);t.moveTo(n,0),t.arc(0,0,n,0,kx)}},o_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},s_=Math.sqrt(1/3),c_=2*s_,u_={draw:function(t,e){var n=Math.sqrt(e/c_),r=n*s_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},l_=Math.sin(xx/10)/Math.sin(7*xx/10),h_=Math.sin(kx/10)*l_,f_=-Math.cos(kx/10)*l_,d_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=h_*n,i=f_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=kx*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},p_={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},y_=Math.sqrt(3),g_={draw:function(t,e){var n=-Math.sqrt(e/(3*y_));t.moveTo(0,2*n),t.lineTo(-y_*n,-n),t.lineTo(y_*n,-n),t.closePath()}},v_=Math.sqrt(3)/2,m_=1/Math.sqrt(12),b_=3*(m_/2+1),x_={draw:function(t,e){var n=Math.sqrt(e/b_),r=n/2,i=n*m_,a=r,o=n*m_+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(-.5*r-v_*i,v_*r+-.5*i),t.lineTo(-.5*a-v_*o,v_*a+-.5*o),t.lineTo(-.5*s-v_*c,v_*s+-.5*c),t.lineTo(-.5*r+v_*i,-.5*i-v_*r),t.lineTo(-.5*a+v_*o,-.5*o-v_*a),t.lineTo(-.5*s+v_*c,-.5*c-v_*s),t.closePath()}},__=[a_,o_,u_,p_,d_,g_,x_],k_=function(){var t=fx(a_),e=fx(64),n=null;function r(){var r;if(n||(n=r=Ui()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:fx(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:fx(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},w_=function(){};function E_(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function T_(t){this._context=t}T_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:E_(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:E_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var C_=function(t){return new T_(t)};function S_(t){this._context=t}S_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:E_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var A_=function(t){return new S_(t)};function M_(t){this._context=t}M_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:E_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var O_=function(t){return new M_(t)};function B_(t,e){this._basis=new T_(t),this._beta=e}B_.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var N_=function t(e){function n(t){return 1===e?new T_(t):new B_(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function D_(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function L_(t,e){this._context=t,this._k=(1-e)/6}L_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:D_(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:D_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var I_=function t(e){function n(t){return new L_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function R_(t,e){this._context=t,this._k=(1-e)/6}R_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:D_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var F_=function t(e){function n(t){return new R_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function P_(t,e){this._context=t,this._k=(1-e)/6}P_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:D_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var j_=function t(e){function n(t){return new P_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Y_(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>1e-12){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>1e-12){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function z_(t,e){this._context=t,this._alpha=e}z_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Y_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var U_=function t(e){function n(t){return e?new z_(t,e):new L_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function $_(t,e){this._context=t,this._alpha=e}$_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Y_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var q_=function t(e){function n(t){return e?new $_(t,e):new R_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function W_(t,e){this._context=t,this._alpha=e}W_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Y_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var V_=function t(e){function n(t){return e?new W_(t,e):new P_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function H_(t){this._context=t}H_.prototype={areaStart:w_,areaEnd:w_,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var G_=function(t){return new H_(t)};function X_(t){return t<0?-1:1}function Z_(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(X_(a)+X_(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function Q_(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function K_(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function J_(t){this._context=t}function tk(t){this._context=new ek(t)}function ek(t){this._context=t}function nk(t){return new J_(t)}function rk(t){return new tk(t)}function ik(t){this._context=t}function ak(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var ck=function(t){return new sk(t,.5)};function uk(t){return new sk(t,0)}function lk(t){return new sk(t,1)}var hk=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a=0;)n[e]=e;return n};function dk(t,e){return t[e]}var pk=function(){var t=fx([]),e=fk,n=hk,r=dk;function i(i){var a,o,s=t.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(a=0;a0){for(var n,r,i,a=0,o=t[0].length;a0)for(var n,r,i,a,o,s,c=0,u=t[e[0]].length;c0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},vk=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;oa&&(a=e,r=n);return r}var _k=function(t){var e=t.map(kk);return fk(t).sort((function(t,n){return e[t]-e[n]}))};function kk(t){for(var e,n=0,r=-1,i=t.length;++r0)){if(a/=f,f<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>l&&(l=a)}else if(d>0){if(a0||h<1)||(l>0&&(t[0]=[c+l*f,u+l*d]),h<1&&(t[1]=[c+h*f,u+h*d]),!0)}}}}}function Uk(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,h=u[0],f=u[1],d=l[0],p=l[1],y=(h+d)/2,g=(f+p)/2;if(p===f){if(y=r)return;if(h>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(h>d){if(c){if(c[1]>=i)return}else c=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(c){if(c[1]=r)return}else c=[e,o*e+s];a=[r,o*r+s]}else{if(c){if(c[0]=-lw)){var d=c*c+u*u,p=l*l+h*h,y=(h*d-u*p)/f,g=(c*p-l*d)/f,v=Hk.pop()||new Gk;v.arc=t,v.site=i,v.x=y+o,v.y=(v.cy=g+s)+Math.sqrt(y*y+g*g),t.circle=v;for(var m=null,b=sw._;b;)if(v.yuw)s=s.L;else{if(!((i=a-iw(s,o))>uw)){r>-uw?(e=s.P,n=s):i>-uw?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){ow[t.index]={site:t,halfedges:[]}}(t);var c=Jk(t);if(aw.insert(e,c),e||n){if(e===n)return Zk(e),n=Jk(e.site),aw.insert(c,n),c.edge=n.edge=Pk(e.site,c.site),Xk(e),void Xk(n);if(n){Zk(e),Zk(n);var u=e.site,l=u[0],h=u[1],f=t[0]-l,d=t[1]-h,p=n.site,y=p[0]-l,g=p[1]-h,v=2*(f*g-d*y),m=f*f+d*d,b=y*y+g*g,x=[(g*m-d*b)/v+l,(f*b-y*m)/v+h];Yk(n.edge,u,p,x),c.edge=Pk(u,t,null,x),n.edge=Pk(t,p,null,x),Xk(e),Xk(n)}else c.edge=Pk(e.site,c.site)}}function rw(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-r,h=1/a-1/u,f=l/u;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*u)-c+u/2+i-a/2)))/h+r:(r+s)/2}function iw(t,e){var n=t.N;if(n)return rw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var aw,ow,sw,cw,uw=1e-6,lw=1e-12;function hw(t,e){return e[1]-t[1]||e[0]-t[0]}function fw(t,e){var n,r,i,a=t.sort(hw).pop();for(cw=[],ow=new Array(t.length),aw=new Fk,sw=new Fk;;)if(i=Vk,a&&(!i||a[1]uw||Math.abs(i[0][1]-i[1][1])>uw)||delete cw[a]}(o,s,c,u),function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g=ow.length,v=!0;for(i=0;iuw||Math.abs(y-f)>uw)&&(c.splice(s,0,cw.push(jk(o,d,Math.abs(p-t)uw?[t,Math.abs(h-t)uw?[Math.abs(f-r)uw?[n,Math.abs(h-n)uw?[Math.abs(f-e)=s)return null;var c=t-i.site[0],u=e-i.site[1],l=c*c+u*u;do{i=a.cells[r=o],o=null,i.halfedges.forEach((function(n){var r=a.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=t-s[0],u=e-s[1],h=c*c+u*u;hr?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var Sw=function(){var t,e,n=_w,r=kw,i=Cw,a=Ew,o=Tw,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=fp,h=lt("start","zoom","end"),f=0;function d(t){t.property("__zoom",ww).on("wheel.zoom",x).on("mousedown.zoom",_).on("dblclick.zoom",k).filter(o).on("touchstart.zoom",w).on("touchmove.zoom",E).on("touchend.zoom touchcancel.zoom",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new gw(e,t.x,t.y)}function y(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new gw(t.k,r,i)}function g(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function v(t,e,n){t.on("start.zoom",(function(){m(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){m(this,arguments).end()})).tween("zoom",(function(){var t=this,i=arguments,a=m(t,i),o=r.apply(t,i),s=null==n?g(o):"function"==typeof n?n.apply(t,i):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,h="function"==typeof e?e.apply(t,i):e,f=l(u.invert(s).concat(c/u.k),h.invert(s).concat(c/h.k));return function(t){if(1===t)t=h;else{var e=f(t),n=c/e[2];t=new gw(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function m(t,e,n){return!n&&t.__zooming||new b(t,e)}function b(t,e){this.that=t,this.args=e,this.active=0,this.extent=r.apply(t,e),this.taps=0}function x(){if(n.apply(this,arguments)){var t=m(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Nn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[o,e.invert(o)],or(this),t.start()}xw(),t.wheel=setTimeout(u,150),t.zoom("mouse",i(y(p(e,r),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function _(){if(!e&&n.apply(this,arguments)){var t=m(this,arguments,!0),r=ke(ce.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Nn(this),o=ce.clientX,s=ce.clientY;Te(ce.view),bw(),t.mouse=[a,this.__zoom.invert(a)],or(this),t.start()}function u(){if(xw(),!t.moved){var e=ce.clientX-o,n=ce.clientY-s;t.moved=e*e+n*n>f}t.zoom("mouse",i(y(t.that.__zoom,t.mouse[0]=Nn(t.that),t.mouse[1]),t.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),Ce(ce.view,t.moved),xw(),t.end()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=Nn(this),a=t.invert(e),o=t.k*(ce.shiftKey?.5:2),s=i(y(p(t,o),e,a),r.apply(this,arguments),c);xw(),u>0?ke(this).transition().duration(u).call(v,s,e):ke(this).call(d.transform,s)}}function w(){if(n.apply(this,arguments)){var e,r,i,a,o=ce.touches,s=o.length,c=m(this,arguments,ce.changedTouches.length===s);for(bw(),r=0;rh&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),58;case 1:return this.begin("type_directive"),59;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),61;case 4:return 60;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return e.yytext=e.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 56;case 44:return 57;case 45:return 46;case 46:return 47;case 47:return 5;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){var r=n(199);t.exports={Graph:r.Graph,json:n(302),alg:n(303),version:r.version}},function(t,e,n){var r;try{r={cloneDeep:n(314),constant:n(87),defaults:n(155),each:n(88),filter:n(129),find:n(315),flatten:n(157),forEach:n(127),forIn:n(320),has:n(94),isUndefined:n(140),last:n(321),map:n(141),mapValues:n(322),max:n(323),merge:n(325),min:n(330),minBy:n(331),now:n(332),pick:n(162),range:n(163),reduce:n(143),sortBy:n(339),uniqueId:n(164),values:n(148),zipObject:n(344)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.mermaid=e():t.mermaid=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=390)}([function(t,e,n){"use strict";n.r(e),n.d(e,"version",(function(){return r})),n.d(e,"bisect",(function(){return u})),n.d(e,"bisectRight",(function(){return s})),n.d(e,"bisectLeft",(function(){return c})),n.d(e,"ascending",(function(){return i})),n.d(e,"bisector",(function(){return a})),n.d(e,"cross",(function(){return f})),n.d(e,"descending",(function(){return d})),n.d(e,"deviation",(function(){return g})),n.d(e,"extent",(function(){return m})),n.d(e,"histogram",(function(){return N})),n.d(e,"thresholdFreedmanDiaconis",(function(){return D})),n.d(e,"thresholdScott",(function(){return L})),n.d(e,"thresholdSturges",(function(){return O})),n.d(e,"max",(function(){return I})),n.d(e,"mean",(function(){return R})),n.d(e,"median",(function(){return F})),n.d(e,"merge",(function(){return P})),n.d(e,"min",(function(){return j})),n.d(e,"pairs",(function(){return l})),n.d(e,"permute",(function(){return Y})),n.d(e,"quantile",(function(){return B})),n.d(e,"range",(function(){return w})),n.d(e,"scan",(function(){return z})),n.d(e,"shuffle",(function(){return U})),n.d(e,"sum",(function(){return $})),n.d(e,"ticks",(function(){return S})),n.d(e,"tickIncrement",(function(){return A})),n.d(e,"tickStep",(function(){return M})),n.d(e,"transpose",(function(){return q})),n.d(e,"variance",(function(){return y})),n.d(e,"zip",(function(){return H})),n.d(e,"axisTop",(function(){return et})),n.d(e,"axisRight",(function(){return nt})),n.d(e,"axisBottom",(function(){return rt})),n.d(e,"axisLeft",(function(){return it})),n.d(e,"brush",(function(){return Ci})),n.d(e,"brushX",(function(){return Ti})),n.d(e,"brushY",(function(){return Ei})),n.d(e,"brushSelection",(function(){return wi})),n.d(e,"chord",(function(){return Ii})),n.d(e,"ribbon",(function(){return Xi})),n.d(e,"nest",(function(){return Ji})),n.d(e,"set",(function(){return sa})),n.d(e,"map",(function(){return Qi})),n.d(e,"keys",(function(){return ca})),n.d(e,"values",(function(){return ua})),n.d(e,"entries",(function(){return la})),n.d(e,"color",(function(){return qe})),n.d(e,"rgb",(function(){return Ge})),n.d(e,"hsl",(function(){return en})),n.d(e,"lab",(function(){return ya})),n.d(e,"hcl",(function(){return wa})),n.d(e,"lch",(function(){return ka})),n.d(e,"gray",(function(){return pa})),n.d(e,"cubehelix",(function(){return Na})),n.d(e,"contours",(function(){return za})),n.d(e,"contourDensity",(function(){return Va})),n.d(e,"dispatch",(function(){return ht})),n.d(e,"drag",(function(){return to})),n.d(e,"dragDisable",(function(){return Ce})),n.d(e,"dragEnable",(function(){return Se})),n.d(e,"dsvFormat",(function(){return so})),n.d(e,"csvParse",(function(){return uo})),n.d(e,"csvParseRows",(function(){return lo})),n.d(e,"csvFormat",(function(){return ho})),n.d(e,"csvFormatBody",(function(){return fo})),n.d(e,"csvFormatRows",(function(){return po})),n.d(e,"csvFormatRow",(function(){return yo})),n.d(e,"csvFormatValue",(function(){return go})),n.d(e,"tsvParse",(function(){return vo})),n.d(e,"tsvParseRows",(function(){return bo})),n.d(e,"tsvFormat",(function(){return xo})),n.d(e,"tsvFormatBody",(function(){return _o})),n.d(e,"tsvFormatRows",(function(){return ko})),n.d(e,"tsvFormatRow",(function(){return wo})),n.d(e,"tsvFormatValue",(function(){return To})),n.d(e,"autoType",(function(){return Eo})),n.d(e,"easeLinear",(function(){return So})),n.d(e,"easeQuad",(function(){return Oo})),n.d(e,"easeQuadIn",(function(){return Ao})),n.d(e,"easeQuadOut",(function(){return Mo})),n.d(e,"easeQuadInOut",(function(){return Oo})),n.d(e,"easeCubic",(function(){return Vr})),n.d(e,"easeCubicIn",(function(){return Wr})),n.d(e,"easeCubicOut",(function(){return Hr})),n.d(e,"easeCubicInOut",(function(){return Vr})),n.d(e,"easePoly",(function(){return Do})),n.d(e,"easePolyIn",(function(){return No})),n.d(e,"easePolyOut",(function(){return Bo})),n.d(e,"easePolyInOut",(function(){return Do})),n.d(e,"easeSin",(function(){return Po})),n.d(e,"easeSinIn",(function(){return Ro})),n.d(e,"easeSinOut",(function(){return Fo})),n.d(e,"easeSinInOut",(function(){return Po})),n.d(e,"easeExp",(function(){return Uo})),n.d(e,"easeExpIn",(function(){return Yo})),n.d(e,"easeExpOut",(function(){return zo})),n.d(e,"easeExpInOut",(function(){return Uo})),n.d(e,"easeCircle",(function(){return Wo})),n.d(e,"easeCircleIn",(function(){return $o})),n.d(e,"easeCircleOut",(function(){return qo})),n.d(e,"easeCircleInOut",(function(){return Wo})),n.d(e,"easeBounce",(function(){return Vo})),n.d(e,"easeBounceIn",(function(){return Ho})),n.d(e,"easeBounceOut",(function(){return Vo})),n.d(e,"easeBounceInOut",(function(){return Go})),n.d(e,"easeBack",(function(){return Ko})),n.d(e,"easeBackIn",(function(){return Xo})),n.d(e,"easeBackOut",(function(){return Zo})),n.d(e,"easeBackInOut",(function(){return Ko})),n.d(e,"easeElastic",(function(){return ts})),n.d(e,"easeElasticIn",(function(){return Jo})),n.d(e,"easeElasticOut",(function(){return ts})),n.d(e,"easeElasticInOut",(function(){return es})),n.d(e,"blob",(function(){return rs})),n.d(e,"buffer",(function(){return as})),n.d(e,"dsv",(function(){return us})),n.d(e,"csv",(function(){return ls})),n.d(e,"tsv",(function(){return hs})),n.d(e,"image",(function(){return fs})),n.d(e,"json",(function(){return ps})),n.d(e,"text",(function(){return ss})),n.d(e,"xml",(function(){return gs})),n.d(e,"html",(function(){return ms})),n.d(e,"svg",(function(){return vs})),n.d(e,"forceCenter",(function(){return bs})),n.d(e,"forceCollide",(function(){return Bs})),n.d(e,"forceLink",(function(){return Is})),n.d(e,"forceManyBody",(function(){return Ys})),n.d(e,"forceRadial",(function(){return zs})),n.d(e,"forceSimulation",(function(){return js})),n.d(e,"forceX",(function(){return Us})),n.d(e,"forceY",(function(){return $s})),n.d(e,"formatDefaultLocale",(function(){return ac})),n.d(e,"format",(function(){return Ks})),n.d(e,"formatPrefix",(function(){return Qs})),n.d(e,"formatLocale",(function(){return ic})),n.d(e,"formatSpecifier",(function(){return Vs})),n.d(e,"FormatSpecifier",(function(){return Gs})),n.d(e,"precisionFixed",(function(){return oc})),n.d(e,"precisionPrefix",(function(){return sc})),n.d(e,"precisionRound",(function(){return cc})),n.d(e,"geoArea",(function(){return Jc})),n.d(e,"geoBounds",(function(){return Wu})),n.d(e,"geoCentroid",(function(){return rl})),n.d(e,"geoCircle",(function(){return pl})),n.d(e,"geoClipAntimeridian",(function(){return Cl})),n.d(e,"geoClipCircle",(function(){return Sl})),n.d(e,"geoClipExtent",(function(){return Bl})),n.d(e,"geoClipRectangle",(function(){return Al})),n.d(e,"geoContains",(function(){return Zl})),n.d(e,"geoDistance",(function(){return zl})),n.d(e,"geoGraticule",(function(){return Jl})),n.d(e,"geoGraticule10",(function(){return th})),n.d(e,"geoInterpolate",(function(){return ah})),n.d(e,"geoLength",(function(){return Pl})),n.d(e,"geoPath",(function(){return rf})),n.d(e,"geoAlbers",(function(){return wf})),n.d(e,"geoAlbersUsa",(function(){return Tf})),n.d(e,"geoAzimuthalEqualArea",(function(){return Af})),n.d(e,"geoAzimuthalEqualAreaRaw",(function(){return Sf})),n.d(e,"geoAzimuthalEquidistant",(function(){return Of})),n.d(e,"geoAzimuthalEquidistantRaw",(function(){return Mf})),n.d(e,"geoConicConformal",(function(){return Rf})),n.d(e,"geoConicConformalRaw",(function(){return If})),n.d(e,"geoConicEqualArea",(function(){return kf})),n.d(e,"geoConicEqualAreaRaw",(function(){return _f})),n.d(e,"geoConicEquidistant",(function(){return Yf})),n.d(e,"geoConicEquidistantRaw",(function(){return jf})),n.d(e,"geoEqualEarth",(function(){return Vf})),n.d(e,"geoEqualEarthRaw",(function(){return Hf})),n.d(e,"geoEquirectangular",(function(){return Pf})),n.d(e,"geoEquirectangularRaw",(function(){return Ff})),n.d(e,"geoGnomonic",(function(){return Xf})),n.d(e,"geoGnomonicRaw",(function(){return Gf})),n.d(e,"geoIdentity",(function(){return Zf})),n.d(e,"geoProjection",(function(){return vf})),n.d(e,"geoProjectionMutator",(function(){return bf})),n.d(e,"geoMercator",(function(){return Bf})),n.d(e,"geoMercatorRaw",(function(){return Nf})),n.d(e,"geoNaturalEarth1",(function(){return Qf})),n.d(e,"geoNaturalEarth1Raw",(function(){return Kf})),n.d(e,"geoOrthographic",(function(){return td})),n.d(e,"geoOrthographicRaw",(function(){return Jf})),n.d(e,"geoStereographic",(function(){return nd})),n.d(e,"geoStereographicRaw",(function(){return ed})),n.d(e,"geoTransverseMercator",(function(){return id})),n.d(e,"geoTransverseMercatorRaw",(function(){return rd})),n.d(e,"geoRotation",(function(){return hl})),n.d(e,"geoStream",(function(){return Wc})),n.d(e,"geoTransform",(function(){return af})),n.d(e,"cluster",(function(){return cd})),n.d(e,"hierarchy",(function(){return ld})),n.d(e,"pack",(function(){return Id})),n.d(e,"packSiblings",(function(){return Md})),n.d(e,"packEnclose",(function(){return gd})),n.d(e,"partition",(function(){return zd})),n.d(e,"stratify",(function(){return Hd})),n.d(e,"tree",(function(){return Jd})),n.d(e,"treemap",(function(){return ip})),n.d(e,"treemapBinary",(function(){return ap})),n.d(e,"treemapDice",(function(){return Yd})),n.d(e,"treemapSlice",(function(){return tp})),n.d(e,"treemapSliceDice",(function(){return op})),n.d(e,"treemapSquarify",(function(){return rp})),n.d(e,"treemapResquarify",(function(){return sp})),n.d(e,"interpolate",(function(){return Mn})),n.d(e,"interpolateArray",(function(){return bn})),n.d(e,"interpolateBasis",(function(){return on})),n.d(e,"interpolateBasisClosed",(function(){return sn})),n.d(e,"interpolateDate",(function(){return _n})),n.d(e,"interpolateDiscrete",(function(){return cp})),n.d(e,"interpolateHue",(function(){return up})),n.d(e,"interpolateNumber",(function(){return kn})),n.d(e,"interpolateNumberArray",(function(){return mn})),n.d(e,"interpolateObject",(function(){return wn})),n.d(e,"interpolateRound",(function(){return lp})),n.d(e,"interpolateString",(function(){return An})),n.d(e,"interpolateTransformCss",(function(){return fr})),n.d(e,"interpolateTransformSvg",(function(){return dr})),n.d(e,"interpolateZoom",(function(){return dp})),n.d(e,"interpolateRgb",(function(){return dn})),n.d(e,"interpolateRgbBasis",(function(){return yn})),n.d(e,"interpolateRgbBasisClosed",(function(){return gn})),n.d(e,"interpolateHsl",(function(){return yp})),n.d(e,"interpolateHslLong",(function(){return gp})),n.d(e,"interpolateLab",(function(){return mp})),n.d(e,"interpolateHcl",(function(){return bp})),n.d(e,"interpolateHclLong",(function(){return xp})),n.d(e,"interpolateCubehelix",(function(){return kp})),n.d(e,"interpolateCubehelixLong",(function(){return wp})),n.d(e,"piecewise",(function(){return Tp})),n.d(e,"quantize",(function(){return Ep})),n.d(e,"path",(function(){return $i})),n.d(e,"polygonArea",(function(){return Cp})),n.d(e,"polygonCentroid",(function(){return Sp})),n.d(e,"polygonHull",(function(){return Op})),n.d(e,"polygonContains",(function(){return Np})),n.d(e,"polygonLength",(function(){return Bp})),n.d(e,"quadtree",(function(){return Cs})),n.d(e,"randomUniform",(function(){return Lp})),n.d(e,"randomNormal",(function(){return Ip})),n.d(e,"randomLogNormal",(function(){return Rp})),n.d(e,"randomBates",(function(){return Pp})),n.d(e,"randomIrwinHall",(function(){return Fp})),n.d(e,"randomExponential",(function(){return jp})),n.d(e,"scaleBand",(function(){return Vp})),n.d(e,"scalePoint",(function(){return Xp})),n.d(e,"scaleIdentity",(function(){return uy})),n.d(e,"scaleLinear",(function(){return cy})),n.d(e,"scaleLog",(function(){return vy})),n.d(e,"scaleSymlog",(function(){return ky})),n.d(e,"scaleOrdinal",(function(){return Hp})),n.d(e,"scaleImplicit",(function(){return Wp})),n.d(e,"scalePow",(function(){return Sy})),n.d(e,"scaleSqrt",(function(){return Ay})),n.d(e,"scaleQuantile",(function(){return My})),n.d(e,"scaleQuantize",(function(){return Oy})),n.d(e,"scaleThreshold",(function(){return Ny})),n.d(e,"scaleTime",(function(){return pv})),n.d(e,"scaleUtc",(function(){return Tv})),n.d(e,"scaleSequential",(function(){return Sv})),n.d(e,"scaleSequentialLog",(function(){return Av})),n.d(e,"scaleSequentialPow",(function(){return Ov})),n.d(e,"scaleSequentialSqrt",(function(){return Nv})),n.d(e,"scaleSequentialSymlog",(function(){return Mv})),n.d(e,"scaleSequentialQuantile",(function(){return Bv})),n.d(e,"scaleDiverging",(function(){return Lv})),n.d(e,"scaleDivergingLog",(function(){return Iv})),n.d(e,"scaleDivergingPow",(function(){return Fv})),n.d(e,"scaleDivergingSqrt",(function(){return Pv})),n.d(e,"scaleDivergingSymlog",(function(){return Rv})),n.d(e,"tickFormat",(function(){return oy})),n.d(e,"schemeCategory10",(function(){return Yv})),n.d(e,"schemeAccent",(function(){return zv})),n.d(e,"schemeDark2",(function(){return Uv})),n.d(e,"schemePaired",(function(){return $v})),n.d(e,"schemePastel1",(function(){return qv})),n.d(e,"schemePastel2",(function(){return Wv})),n.d(e,"schemeSet1",(function(){return Hv})),n.d(e,"schemeSet2",(function(){return Vv})),n.d(e,"schemeSet3",(function(){return Gv})),n.d(e,"schemeTableau10",(function(){return Xv})),n.d(e,"interpolateBrBG",(function(){return Qv})),n.d(e,"schemeBrBG",(function(){return Kv})),n.d(e,"interpolatePRGn",(function(){return tb})),n.d(e,"schemePRGn",(function(){return Jv})),n.d(e,"interpolatePiYG",(function(){return nb})),n.d(e,"schemePiYG",(function(){return eb})),n.d(e,"interpolatePuOr",(function(){return ib})),n.d(e,"schemePuOr",(function(){return rb})),n.d(e,"interpolateRdBu",(function(){return ob})),n.d(e,"schemeRdBu",(function(){return ab})),n.d(e,"interpolateRdGy",(function(){return cb})),n.d(e,"schemeRdGy",(function(){return sb})),n.d(e,"interpolateRdYlBu",(function(){return lb})),n.d(e,"schemeRdYlBu",(function(){return ub})),n.d(e,"interpolateRdYlGn",(function(){return fb})),n.d(e,"schemeRdYlGn",(function(){return hb})),n.d(e,"interpolateSpectral",(function(){return pb})),n.d(e,"schemeSpectral",(function(){return db})),n.d(e,"interpolateBuGn",(function(){return gb})),n.d(e,"schemeBuGn",(function(){return yb})),n.d(e,"interpolateBuPu",(function(){return vb})),n.d(e,"schemeBuPu",(function(){return mb})),n.d(e,"interpolateGnBu",(function(){return xb})),n.d(e,"schemeGnBu",(function(){return bb})),n.d(e,"interpolateOrRd",(function(){return kb})),n.d(e,"schemeOrRd",(function(){return _b})),n.d(e,"interpolatePuBuGn",(function(){return Tb})),n.d(e,"schemePuBuGn",(function(){return wb})),n.d(e,"interpolatePuBu",(function(){return Cb})),n.d(e,"schemePuBu",(function(){return Eb})),n.d(e,"interpolatePuRd",(function(){return Ab})),n.d(e,"schemePuRd",(function(){return Sb})),n.d(e,"interpolateRdPu",(function(){return Ob})),n.d(e,"schemeRdPu",(function(){return Mb})),n.d(e,"interpolateYlGnBu",(function(){return Bb})),n.d(e,"schemeYlGnBu",(function(){return Nb})),n.d(e,"interpolateYlGn",(function(){return Lb})),n.d(e,"schemeYlGn",(function(){return Db})),n.d(e,"interpolateYlOrBr",(function(){return Rb})),n.d(e,"schemeYlOrBr",(function(){return Ib})),n.d(e,"interpolateYlOrRd",(function(){return Pb})),n.d(e,"schemeYlOrRd",(function(){return Fb})),n.d(e,"interpolateBlues",(function(){return Yb})),n.d(e,"schemeBlues",(function(){return jb})),n.d(e,"interpolateGreens",(function(){return Ub})),n.d(e,"schemeGreens",(function(){return zb})),n.d(e,"interpolateGreys",(function(){return qb})),n.d(e,"schemeGreys",(function(){return $b})),n.d(e,"interpolatePurples",(function(){return Hb})),n.d(e,"schemePurples",(function(){return Wb})),n.d(e,"interpolateReds",(function(){return Gb})),n.d(e,"schemeReds",(function(){return Vb})),n.d(e,"interpolateOranges",(function(){return Zb})),n.d(e,"schemeOranges",(function(){return Xb})),n.d(e,"interpolateCividis",(function(){return Kb})),n.d(e,"interpolateCubehelixDefault",(function(){return Qb})),n.d(e,"interpolateRainbow",(function(){return nx})),n.d(e,"interpolateWarm",(function(){return Jb})),n.d(e,"interpolateCool",(function(){return tx})),n.d(e,"interpolateSinebow",(function(){return ox})),n.d(e,"interpolateTurbo",(function(){return sx})),n.d(e,"interpolateViridis",(function(){return ux})),n.d(e,"interpolateMagma",(function(){return lx})),n.d(e,"interpolateInferno",(function(){return hx})),n.d(e,"interpolatePlasma",(function(){return fx})),n.d(e,"create",(function(){return dx})),n.d(e,"creator",(function(){return re})),n.d(e,"local",(function(){return yx})),n.d(e,"matcher",(function(){return gt})),n.d(e,"mouse",(function(){return Dn})),n.d(e,"namespace",(function(){return Tt})),n.d(e,"namespaces",(function(){return wt})),n.d(e,"clientPoint",(function(){return Nn})),n.d(e,"select",(function(){return we})),n.d(e,"selectAll",(function(){return mx})),n.d(e,"selection",(function(){return ke})),n.d(e,"selector",(function(){return dt})),n.d(e,"selectorAll",(function(){return yt})),n.d(e,"style",(function(){return It})),n.d(e,"touch",(function(){return Bn})),n.d(e,"touches",(function(){return vx})),n.d(e,"window",(function(){return Nt})),n.d(e,"event",(function(){return ue})),n.d(e,"customEvent",(function(){return ye})),n.d(e,"arc",(function(){return jx})),n.d(e,"area",(function(){return Wx})),n.d(e,"line",(function(){return qx})),n.d(e,"pie",(function(){return Gx})),n.d(e,"areaRadial",(function(){return t_})),n.d(e,"radialArea",(function(){return t_})),n.d(e,"lineRadial",(function(){return Jx})),n.d(e,"radialLine",(function(){return Jx})),n.d(e,"pointRadial",(function(){return e_})),n.d(e,"linkHorizontal",(function(){return u_})),n.d(e,"linkVertical",(function(){return l_})),n.d(e,"linkRadial",(function(){return h_})),n.d(e,"symbol",(function(){return M_})),n.d(e,"symbols",(function(){return A_})),n.d(e,"symbolCircle",(function(){return f_})),n.d(e,"symbolCross",(function(){return d_})),n.d(e,"symbolDiamond",(function(){return g_})),n.d(e,"symbolSquare",(function(){return __})),n.d(e,"symbolStar",(function(){return x_})),n.d(e,"symbolTriangle",(function(){return w_})),n.d(e,"symbolWye",(function(){return S_})),n.d(e,"curveBasisClosed",(function(){return I_})),n.d(e,"curveBasisOpen",(function(){return F_})),n.d(e,"curveBasis",(function(){return D_})),n.d(e,"curveBundle",(function(){return j_})),n.d(e,"curveCardinalClosed",(function(){return q_})),n.d(e,"curveCardinalOpen",(function(){return H_})),n.d(e,"curveCardinal",(function(){return U_})),n.d(e,"curveCatmullRomClosed",(function(){return K_})),n.d(e,"curveCatmullRomOpen",(function(){return J_})),n.d(e,"curveCatmullRom",(function(){return X_})),n.d(e,"curveLinearClosed",(function(){return ek})),n.d(e,"curveLinear",(function(){return zx})),n.d(e,"curveMonotoneX",(function(){return uk})),n.d(e,"curveMonotoneY",(function(){return lk})),n.d(e,"curveNatural",(function(){return dk})),n.d(e,"curveStep",(function(){return yk})),n.d(e,"curveStepAfter",(function(){return mk})),n.d(e,"curveStepBefore",(function(){return gk})),n.d(e,"stack",(function(){return _k})),n.d(e,"stackOffsetExpand",(function(){return kk})),n.d(e,"stackOffsetDiverging",(function(){return wk})),n.d(e,"stackOffsetNone",(function(){return vk})),n.d(e,"stackOffsetSilhouette",(function(){return Tk})),n.d(e,"stackOffsetWiggle",(function(){return Ek})),n.d(e,"stackOrderAppearance",(function(){return Ck})),n.d(e,"stackOrderAscending",(function(){return Ak})),n.d(e,"stackOrderDescending",(function(){return Ok})),n.d(e,"stackOrderInsideOut",(function(){return Nk})),n.d(e,"stackOrderNone",(function(){return bk})),n.d(e,"stackOrderReverse",(function(){return Bk})),n.d(e,"timeInterval",(function(){return Ly})),n.d(e,"timeMillisecond",(function(){return yg})),n.d(e,"timeMilliseconds",(function(){return gg})),n.d(e,"utcMillisecond",(function(){return yg})),n.d(e,"utcMilliseconds",(function(){return gg})),n.d(e,"timeSecond",(function(){return fg})),n.d(e,"timeSeconds",(function(){return dg})),n.d(e,"utcSecond",(function(){return fg})),n.d(e,"utcSeconds",(function(){return dg})),n.d(e,"timeMinute",(function(){return ug})),n.d(e,"timeMinutes",(function(){return lg})),n.d(e,"timeHour",(function(){return og})),n.d(e,"timeHours",(function(){return sg})),n.d(e,"timeDay",(function(){return rg})),n.d(e,"timeDays",(function(){return ig})),n.d(e,"timeWeek",(function(){return Uy})),n.d(e,"timeWeeks",(function(){return Xy})),n.d(e,"timeSunday",(function(){return Uy})),n.d(e,"timeSundays",(function(){return Xy})),n.d(e,"timeMonday",(function(){return $y})),n.d(e,"timeMondays",(function(){return Zy})),n.d(e,"timeTuesday",(function(){return qy})),n.d(e,"timeTuesdays",(function(){return Ky})),n.d(e,"timeWednesday",(function(){return Wy})),n.d(e,"timeWednesdays",(function(){return Qy})),n.d(e,"timeThursday",(function(){return Hy})),n.d(e,"timeThursdays",(function(){return Jy})),n.d(e,"timeFriday",(function(){return Vy})),n.d(e,"timeFridays",(function(){return tg})),n.d(e,"timeSaturday",(function(){return Gy})),n.d(e,"timeSaturdays",(function(){return eg})),n.d(e,"timeMonth",(function(){return jy})),n.d(e,"timeMonths",(function(){return Yy})),n.d(e,"timeYear",(function(){return Ry})),n.d(e,"timeYears",(function(){return Fy})),n.d(e,"utcMinute",(function(){return kv})),n.d(e,"utcMinutes",(function(){return wv})),n.d(e,"utcHour",(function(){return bv})),n.d(e,"utcHours",(function(){return xv})),n.d(e,"utcDay",(function(){return Dg})),n.d(e,"utcDays",(function(){return Lg})),n.d(e,"utcWeek",(function(){return vg})),n.d(e,"utcWeeks",(function(){return Eg})),n.d(e,"utcSunday",(function(){return vg})),n.d(e,"utcSundays",(function(){return Eg})),n.d(e,"utcMonday",(function(){return bg})),n.d(e,"utcMondays",(function(){return Cg})),n.d(e,"utcTuesday",(function(){return xg})),n.d(e,"utcTuesdays",(function(){return Sg})),n.d(e,"utcWednesday",(function(){return _g})),n.d(e,"utcWednesdays",(function(){return Ag})),n.d(e,"utcThursday",(function(){return kg})),n.d(e,"utcThursdays",(function(){return Mg})),n.d(e,"utcFriday",(function(){return wg})),n.d(e,"utcFridays",(function(){return Og})),n.d(e,"utcSaturday",(function(){return Tg})),n.d(e,"utcSaturdays",(function(){return Ng})),n.d(e,"utcMonth",(function(){return gv})),n.d(e,"utcMonths",(function(){return mv})),n.d(e,"utcYear",(function(){return Rg})),n.d(e,"utcYears",(function(){return Fg})),n.d(e,"timeFormatDefaultLocale",(function(){return lv})),n.d(e,"timeFormat",(function(){return $g})),n.d(e,"timeParse",(function(){return qg})),n.d(e,"utcFormat",(function(){return Wg})),n.d(e,"utcParse",(function(){return Hg})),n.d(e,"timeFormatLocale",(function(){return zg})),n.d(e,"isoFormat",(function(){return Dk})),n.d(e,"isoParse",(function(){return Lk})),n.d(e,"now",(function(){return Un})),n.d(e,"timer",(function(){return Wn})),n.d(e,"timerFlush",(function(){return Hn})),n.d(e,"timeout",(function(){return Zn})),n.d(e,"interval",(function(){return Ik})),n.d(e,"transition",(function(){return Ur})),n.d(e,"active",(function(){return Kr})),n.d(e,"interrupt",(function(){return sr})),n.d(e,"voronoi",(function(){return xw})),n.d(e,"zoom",(function(){return Lw})),n.d(e,"zoomTransform",(function(){return Ew})),n.d(e,"zoomIdentity",(function(){return Tw}));var r="5.16.0",i=function(t,e){return te?1:t>=e?0:NaN},a=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return i(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)>0?i=a:r=a+1}return r}}};var o=a(i),s=o.right,c=o.left,u=s,l=function(t,e){null==e&&(e=h);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);nt?1:e>=t?0:NaN},p=function(t){return null===t?NaN:+t},y=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o1)return c/(a-1)},g=function(t,e){var n=y(t,e);return n?Math.sqrt(n):n},m=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o=n)for(r=i=n;++on&&(r=n),i=n)for(r=i=n;++on&&(r=n),i0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=0?(a>=T?10:a>=E?5:a>=C?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=T?10:a>=E?5:a>=C?2:1)}function M(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=T?i*=10:a>=E?i*=5:a>=C&&(i*=2),eh;)f.pop(),--d;var p,y=new Array(d+1);for(i=0;i<=d;++i)(p=y[i]=[]).x0=i>0?f[i-1]:l,p.x1=i=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},D=function(t,e,n){return t=x.call(t,p).sort(i),Math.ceil((n-e)/(2*(B(t,.75)-B(t,.25))*Math.pow(t.length,-1/3)))},L=function(t,e,n){return Math.ceil((n-e)/(3.5*g(t)*Math.pow(t.length,-1/3)))},I=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++ar&&(r=n)}else for(;++a=n)for(r=n;++ar&&(r=n);return r},R=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},j=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++an&&(r=n)}else for(;++a=n)for(r=n;++an&&(r=n);return r},Y=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},z=function(t,e){if(n=t.length){var n,r,a=0,o=0,s=t[o];for(null==e&&(e=i);++a=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ut(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;ae?1:t>=e?0:NaN}var kt="http://www.w3.org/1999/xhtml",wt={svg:"http://www.w3.org/2000/svg",xhtml:kt,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},Tt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),wt.hasOwnProperty(e)?{space:wt[e],local:t}:t};function Et(t){return function(){this.removeAttribute(t)}}function Ct(t){return function(){this.removeAttributeNS(t.space,t.local)}}function St(t,e){return function(){this.setAttribute(t,e)}}function At(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Ot(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}var Nt=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Bt(t){return function(){this.style.removeProperty(t)}}function Dt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Lt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function It(t,e){return t.style.getPropertyValue(e)||Nt(t).getComputedStyle(t,null).getPropertyValue(e)}function Rt(t){return function(){delete this[t]}}function Ft(t,e){return function(){this[t]=e}}function Pt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function jt(t){return t.trim().split(/^|\s+/)}function Yt(t){return t.classList||new zt(t)}function zt(t){this._node=t,this._names=jt(t.getAttribute("class")||"")}function Ut(t,e){for(var n=Yt(t),r=-1,i=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Vt(){this.textContent=""}function Gt(t){return function(){this.textContent=t}}function Xt(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Zt(){this.innerHTML=""}function Kt(t){return function(){this.innerHTML=t}}function Qt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Jt(){this.nextSibling&&this.parentNode.appendChild(this)}function te(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function ee(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===kt&&e.documentElement.namespaceURI===kt?e.createElement(t):e.createElementNS(n,t)}}function ne(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}var re=function(t){var e=Tt(t);return(e.local?ne:ee)(e)};function ie(){return null}function ae(){var t=this.parentNode;t&&t.removeChild(this)}function oe(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function se(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}var ce={},ue=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(ce={mouseenter:"mouseover",mouseleave:"mouseout"}));function le(t,e,n){return t=he(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function he(t,e,n){return function(r){var i=ue;ue=r;try{t.call(this,this.__data__,e,n)}finally{ue=i}}}function fe(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function de(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=_&&(_=x+1);!(b=m[_])&&++_=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=_t);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?Bt:"function"==typeof e?Lt:Dt)(t,e,null==n?"":n)):It(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Rt:"function"==typeof e?Pt:Ft)(t,e)):this.node()[t]},classed:function(t,e){var n=jt(t+"");if(arguments.length<2){for(var r=Yt(this.node()),i=-1,a=n.length;++i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?He(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?He(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ie.exec(t))?new Xe(e[1],e[2],e[3],1):(e=Re.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Fe.exec(t))?He(e[1],e[2],e[3],e[4]):(e=Pe.exec(t))?He(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=je.exec(t))?Je(e[1],e[2]/100,e[3]/100,1):(e=Ye.exec(t))?Je(e[1],e[2]/100,e[3]/100,e[4]):ze.hasOwnProperty(t)?We(ze[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function We(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function He(t,e,n,r){return r<=0&&(t=e=n=NaN),new Xe(t,e,n,r)}function Ve(t){return t instanceof Oe||(t=qe(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,n,r){return 1===arguments.length?Ve(t):new Xe(t,e,n,null==r?1:r)}function Xe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Ze(){return"#"+Qe(this.r)+Qe(this.g)+Qe(this.b)}function Ke(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Qe(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Je(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new nn(t,e,n,r)}function tn(t){if(t instanceof nn)return new nn(t.h,t.s,t.l,t.opacity);if(t instanceof Oe||(t=qe(t)),!t)return new nn;if(t instanceof nn)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new nn(o,s,c,t.opacity)}function en(t,e,n,r){return 1===arguments.length?tn(t):new nn(t,e,n,null==r?1:r)}function nn(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function rn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function an(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Ae(Oe,qe,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Ue,formatHex:Ue,formatHsl:function(){return tn(this).formatHsl()},formatRgb:$e,toString:$e}),Ae(Xe,Ge,Me(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Ze,formatHex:Ze,formatRgb:Ke,toString:Ke})),Ae(nn,en,Me(Oe,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new nn(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new nn(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Xe(rn(t>=240?t-240:t+120,i,r),rn(t,i,r),rn(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var on=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r180||n<-180?n-360*Math.round(n/360):n):cn(isNaN(t)?e:t)}function hn(t){return 1==(t=+t)?fn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):cn(isNaN(e)?n:e)}}function fn(t,e){var n=e-t;return n?un(t,n):cn(isNaN(t)?e:t)}var dn=function t(e){var n=hn(e);function r(t,e){var r=n((t=Ge(t)).r,(e=Ge(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=fn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function pn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:kn(n,r)})),a=En.lastIndex;return a=0&&e._call.call(null,t),e=e._next;--Ln}function Vn(){Pn=(Fn=Yn.now())+jn,Ln=In=0;try{Hn()}finally{Ln=0,function(){var t,e,n=Cn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Cn=e);Sn=t,Xn(r)}(),Pn=0}}function Gn(){var t=Yn.now(),e=t-Fn;e>1e3&&(jn-=e,Fn=t)}function Xn(t){Ln||(In&&(In=clearTimeout(In)),t-Pn>24?(t<1/0&&(In=setTimeout(Vn,t-Yn.now()-jn)),Rn&&(Rn=clearInterval(Rn))):(Rn||(Fn=Yn.now(),Rn=setInterval(Gn,1e3)),Ln=1,zn(Vn)))}qn.prototype=Wn.prototype={constructor:qn,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Un():+n)+(null==e?0:+e),this._next||Sn===this||(Sn?Sn._next=this:Cn=this,Sn=this),this._call=t,this._time=n,Xn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Xn())}};var Zn=function(t,e,n){var r=new qn;return e=null==e?0:+e,r.restart((function(n){r.stop(),t(n+e)}),e,n),r},Kn=ht("start","end","cancel","interrupt"),Qn=[],Jn=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return Zn(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function er(t,e){var n=nr(t,e);if(n.state>3)throw new Error("too late; already running");return n}function nr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var rr,ir,ar,or,sr=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}},cr=180/Math.PI,ur={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},lr=function(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:kn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:kn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:kn(t,n)},{i:s-2,x:kn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?tr:er;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Lr=ke.prototype.constructor;function Ir(t){return function(){this.style.removeProperty(t)}}function Rr(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Fr(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Rr(t,a,n)),r}return a._value=e,a}function Pr(t){return function(e){this.textContent=t.call(this,e)}}function jr(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Pr(r)),e}return r._value=t,r}var Yr=0;function zr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Ur(t){return ke().transition(t)}function $r(){return++Yr}var qr=ke.prototype;function Wr(t){return t*t*t}function Hr(t){return--t*t*t+1}function Vr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}zr.prototype=Ur.prototype={constructor:zr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=dt(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o1&&n.name===e)return new zr([[t]],Zr,e,+r);return null},Qr=function(t){return function(){return t}},Jr=function(t,e,n){this.target=t,this.type=e,this.selection=n};function ti(){ue.stopImmediatePropagation()}var ei=function(){ue.preventDefault(),ue.stopImmediatePropagation()},ni={name:"drag"},ri={name:"space"},ii={name:"handle"},ai={name:"center"};function oi(t){return[+t[0],+t[1]]}function si(t){return[oi(t[0]),oi(t[1])]}function ci(t){return function(e){return Bn(e,ue.touches,t)}}var ui={name:"x",handles:["w","e"].map(mi),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},li={name:"y",handles:["n","s"].map(mi),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},hi={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(mi),input:function(t){return null==t?null:si(t)},output:function(t){return t}},fi={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},di={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},pi={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},yi={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},gi={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function mi(t){return{type:t}}function vi(){return!ue.ctrlKey&&!ue.button}function bi(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function xi(){return navigator.maxTouchPoints||"ontouchstart"in this}function _i(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function ki(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function wi(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function Ti(){return Si(ui)}function Ei(){return Si(li)}var Ci=function(){return Si(hi)};function Si(t){var e,n=bi,r=vi,i=xi,a=!0,o=ht("start","brush","end"),s=6;function c(e){var n=e.property("__brush",y).selectAll(".overlay").data([mi("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",fi.overlay).merge(n).each((function(){var t=_i(this).extent;we(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([mi("selection")]).enter().append("rect").attr("class","selection").attr("cursor",fi.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return fi[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(i).on("touchstart.brush",f).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=we(this),e=_i(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){var r=t.__brush.emitter;return!r||n&&r.clean?new h(t,e,n):r}function h(t,e,n){this.that=t,this.args=e,this.state=t.__brush,this.active=0,this.clean=n}function f(){if((!e||ue.touches)&&r.apply(this,arguments)){var n,i,o,s,c,h,f,d,p,y,g,m=this,v=ue.target.__data__.type,b="selection"===(a&&ue.metaKey?v="overlay":v)?ni:a&&ue.altKey?ai:ii,x=t===li?null:yi[v],_=t===ui?null:gi[v],k=_i(m),w=k.extent,T=k.selection,E=w[0][0],C=w[0][1],S=w[1][0],A=w[1][1],M=0,O=0,N=x&&_&&a&&ue.shiftKey,B=ue.touches?ci(ue.changedTouches[0].identifier):Dn,D=B(m),L=D,I=l(m,arguments,!0).beforestart();"overlay"===v?(T&&(p=!0),k.selection=T=[[n=t===li?E:D[0],o=t===ui?C:D[1]],[c=t===li?S:n,f=t===ui?A:o]]):(n=T[0][0],o=T[0][1],c=T[1][0],f=T[1][1]),i=n,s=o,h=c,d=f;var R=we(m).attr("pointer-events","none"),F=R.selectAll(".overlay").attr("cursor",fi[v]);if(ue.touches)I.moved=j,I.ended=z;else{var P=we(ue.view).on("mousemove.brush",j,!0).on("mouseup.brush",z,!0);a&&P.on("keydown.brush",U,!0).on("keyup.brush",$,!0),Ce(ue.view)}ti(),sr(m),u.call(m),I.start()}function j(){var t=B(m);!N||y||g||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?g=!0:y=!0),L=t,p=!0,ei(),Y()}function Y(){var t;switch(M=L[0]-D[0],O=L[1]-D[1],b){case ri:case ni:x&&(M=Math.max(E-n,Math.min(S-c,M)),i=n+M,h=c+M),_&&(O=Math.max(C-o,Math.min(A-f,O)),s=o+O,d=f+O);break;case ii:x<0?(M=Math.max(E-n,Math.min(S-n,M)),i=n+M,h=c):x>0&&(M=Math.max(E-c,Math.min(S-c,M)),i=n,h=c+M),_<0?(O=Math.max(C-o,Math.min(A-o,O)),s=o+O,d=f):_>0&&(O=Math.max(C-f,Math.min(A-f,O)),s=o,d=f+O);break;case ai:x&&(i=Math.max(E,Math.min(S,n-M*x)),h=Math.max(E,Math.min(S,c+M*x))),_&&(s=Math.max(C,Math.min(A,o-O*_)),d=Math.max(C,Math.min(A,f+O*_)))}h0&&(n=i-M),_<0?f=d-O:_>0&&(o=s-O),b=ri,F.attr("cursor",fi.selection),Y());break;default:return}ei()}function $(){switch(ue.keyCode){case 16:N&&(y=g=N=!1,Y());break;case 18:b===ai&&(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ii,Y());break;case 32:b===ri&&(ue.altKey?(x&&(c=h-M*x,n=i+M*x),_&&(f=d-O*_,o=s+O*_),b=ai):(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ii),F.attr("cursor",fi[v]),Y());break;default:return}ei()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function y(){var e=this.__brush||{selection:null};return e.extent=si(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,r=e.__brush,i=l(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=Mn(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),u.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,r=arguments,i=e.__brush,a=t.input("function"==typeof n?n.apply(e,r):n,i.extent),o=l(e,r).beforestart();sr(e),i.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){ye(new Jr(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:Qr(si(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:Qr(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:Qr(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Ai=Math.cos,Mi=Math.sin,Oi=Math.PI,Ni=Oi/2,Bi=2*Oi,Di=Math.max;function Li(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}var Ii=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,c,u,l,h=i.length,f=[],d=w(h),p=[],y=[],g=y.groups=new Array(h),m=new Array(h*h);for(a=0,u=-1;++u1e-6)if(Math.abs(l*s-c*u)>1e-6&&i){var f=n-a,d=r-o,p=s*s+c*c,y=f*f+d*d,g=Math.sqrt(p),m=Math.sqrt(h),v=i*Math.tan((Pi-Math.acos((p+h-y)/(2*g*m)))/2),b=v/m,x=v/g;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+x*s)+","+(this._y1=e+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%ji+ji),h>Yi?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Pi)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var $i=Ui;function qi(t){return t.source}function Wi(t){return t.target}function Hi(t){return t.radius}function Vi(t){return t.startAngle}function Gi(t){return t.endAngle}var Xi=function(){var t=qi,e=Wi,n=Hi,r=Vi,i=Gi,a=null;function o(){var o,s=Ri.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),h=r.apply(this,s)-Ni,f=i.apply(this,s)-Ni,d=l*Ai(h),p=l*Mi(h),y=+n.apply(this,(s[0]=u,s)),g=r.apply(this,s)-Ni,m=i.apply(this,s)-Ni;if(a||(a=o=$i()),a.moveTo(d,p),a.arc(0,0,l,h,f),h===g&&f===m||(a.quadraticCurveTo(0,0,y*Ai(g),y*Mi(g)),a.arc(0,0,y,g,m)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Fi(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Fi(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Fi(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function Zi(){}function Ki(t,e){var n=new Zi;if(t instanceof Zi)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,h=-1,f=n.length,d=r[i++],p=Qi(),y=o();++hr.length)return n;var o,s=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each((function(e,n){o.push({key:n,values:t(e,a)})}))),null!=s?o.sort((function(t,e){return s(t.key,e.key)})):o}(a(t,0,na,ra),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function ta(){return{}}function ea(t,e,n){t[e]=n}function na(){return Qi()}function ra(t,e,n){t.set(e,n)}function ia(){}var aa=Qi.prototype;function oa(t,e){var n=new ia;if(t instanceof ia)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r6/29*(6/29)*(6/29)?Math.pow(t,1/3):t/(6/29*3*(6/29))+4/29}function va(t){return t>6/29?t*t*t:6/29*3*(6/29)*(t-4/29)}function ba(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function xa(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function _a(t){if(t instanceof Ta)return new Ta(t.h,t.c,t.l,t.opacity);if(t instanceof ga||(t=da(t)),0===t.a&&0===t.b)return new Ta(NaN,0r!=d>r&&n<(f-u)*(r-l)/(d-l)+u&&(i=-i)}return i}function Pa(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var ja=function(){},Ya=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],za=function(){var t=1,e=1,n=O,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(La);else{var r=m(t),i=r[0],o=r[1];e=M(i,o,e),e=w(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,u,l,h,f=new Array,d=new Array;a=s=-1,u=n[0]>=r,Ya[u<<1].forEach(p);for(;++a=r,Ya[c|u<<1].forEach(p);Ya[u<<0].forEach(p);for(;++s=r,l=n[s*t]>=r,Ya[u<<1|l<<2].forEach(p);++a=r,h=l,l=n[s*t+a+1]>=r,Ya[c|u<<1|l<<2|h<<3].forEach(p);Ya[u|l<<3].forEach(p)}a=-1,l=n[s*t]>=r,Ya[l<<2].forEach(p);for(;++a=r,Ya[l<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(r),l=o(c);(e=d[u])?(n=f[l])?(delete d[e.end],delete f[n.start],e===n?(e.ring.push(c),i(e.ring)):f[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=f[l])?(n=d[u])?(delete f[e.start],delete d[n.end],e===n?(e.ring.push(c),i(e.ring)):f[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete f[e.start],e.ring.unshift(r),f[e.start=u]=e):f[u]=d[l]={start:u,end:l,ring:[r,c]}}Ya[l<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n0&&o0&&s0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?Ia(Da.call(t)):Ia(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:ja,i):r===s},i};function Ua(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function $a(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function qa(t){return t[0]}function Wa(t){return t[1]}function Ha(){return 1}var Va=function(){var t=qa,e=Wa,n=Ha,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,u=i+2*s>>o,l=Ia(20);function h(r){var i=new Float32Array(c*u),h=new Float32Array(c*u);r.forEach((function(r,a,l){var h=+t(r,a,l)+s>>o,f=+e(r,a,l)+s>>o,d=+n(r,a,l);h>=0&&h=0&&f>o),$a({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ua({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),$a({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ua({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),$a({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=I(i);d=M(0,p,d),(d=w(0,Math.floor(p/d)*d,d)).shift()}return za().thresholds(d).size([c,u])(i).map(f)}function f(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(y)}function y(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function g(){return c=r+2*(s=3*a)>>o,u=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:Ia(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:Ia(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:Ia(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,g()},h.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),g()},h.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?Ia(Da.call(t)):Ia(t),h):l},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),g()},h},Ga=function(t){return function(){return t}};function Xa(t,e,n,r,i,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function Za(){return!ue.ctrlKey&&!ue.button}function Ka(){return this.parentNode}function Qa(t){return null==t?{x:ue.x,y:ue.y}:t}function Ja(){return navigator.maxTouchPoints||"ontouchstart"in this}Xa.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var to=function(){var t,e,n,r,i=Za,a=Ka,o=Qa,s=Ja,c={},u=ht("start","drag","end"),l=0,h=0;function f(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",g).on("touchmove.drag",m).on("touchend.drag touchcancel.drag",v).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var o=b("mouse",a.apply(this,arguments),Dn,this,arguments);o&&(we(ue.view).on("mousemove.drag",p,!0).on("mouseup.drag",y,!0),Ce(ue.view),Te(),n=!1,t=ue.clientX,e=ue.clientY,o("start"))}}function p(){if(Ee(),!n){var r=ue.clientX-t,i=ue.clientY-e;n=r*r+i*i>h}c.mouse("drag")}function y(){we(ue.view).on("mousemove.drag mouseup.drag",null),Se(ue.view,n),Ee(),c.mouse("end")}function g(){if(i.apply(this,arguments)){var t,e,n=ue.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t9999?"+"+ao(e,6):ao(e,4))+"-"+ao(t.getUTCMonth()+1,2)+"-"+ao(t.getUTCDate(),2)+(a?"T"+ao(n,2)+":"+ao(r,2)+":"+ao(i,2)+"."+ao(a,3)+"Z":i?"T"+ao(n,2)+":"+ao(r,2)+":"+ao(i,2)+"Z":r||n?"T"+ao(n,2)+":"+ao(r,2)+"Z":"")}var so=function(t){var e=new RegExp('["'+t+"\n\r]"),n=t.charCodeAt(0);function r(t,e){var r,i=[],a=t.length,o=0,s=0,c=a<=0,u=!1;function l(){if(c)return no;if(u)return u=!1,eo;var e,r,i=o;if(34===t.charCodeAt(i)){for(;o++=a?c=!0:10===(r=t.charCodeAt(o++))?u=!0:13===r&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o=(a=(y+m)/2))?y=a:m=a,(l=n>=(o=(g+v)/2))?g=o:v=o,i=d,!(d=d[h=l<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(y+m)/2))?y=a:m=a,(l=n>=(o=(g+v)/2))?g=o:v=o}while((h=l<<1|u)==(f=(c>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}var ws=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function Ts(t){return t[0]}function Es(t){return t[1]}function Cs(t,e,n){var r=new Ss(null==e?Ts:e,null==n?Es:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Ss(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function As(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var Ms=Cs.prototype=Ss.prototype;function Os(t){return t.x+t.vx}function Ns(t){return t.y+t.vy}Ms.copy=function(){var t,e,n=new Ss(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=As(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=As(e));return n},Ms.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return ks(this.cover(e,n),e,n,t)},Ms.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,u=1/0,l=-1/0,h=-1/0;for(n=0;nl&&(l=r),ih&&(h=i));if(c>l||u>h)return this;for(this.cover(c,u).cover(l,h),n=0;nt||t>=i||r>e||e>=a;)switch(s=(ef||(a=c.y0)>d||(o=c.x1)=m)<<1|t>=g)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var v=t-+this._x.call(null,y.data),b=e-+this._y.call(null,y.data),x=v*v+b*b;if(x=(s=(p+g)/2))?p=s:g=s,(l=o>=(c=(y+m)/2))?y=c:m=c,e=d,!(d=d[h=l<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},Ms.removeAll=function(t){for(var e=0,n=t.length;ec+d||iu+d||as.index){var p=c-o.x-o.vx,y=u-o.y-o.vy,g=p*p+y*y;gt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,u=0,l=t.length;for(null==r?r=1/0:r*=r,u=0;u1?(u.on(t,n),e):u.on(t)}}},Ys=function(){var t,e,n,r,i=xs(-30),a=1,o=1/0,s=.81;function c(r){var i,a=t.length,o=Cs(t,Rs,Fs).visitAfter(l);for(n=r,i=0;i=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=_s())*l),0===h&&(d+=(h=_s())*h),d1?r[0]+r.slice(2):r,+t.slice(n+1)]}var Ws=function(t){return(t=qs(Math.abs(t)))?t[1]:NaN},Hs=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Vs(t){if(!(e=Hs.exec(t)))throw new Error("invalid format: "+t);var e;return new Gs({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function Gs(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}Vs.prototype=Gs.prototype,Gs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Xs,Zs,Ks,Qs,Js=function(t,e){var n=qs(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},tc={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return Js(100*t,e)},r:Js,s:function(t,e){var n=qs(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Xs=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+qs(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},ec=function(t){return t},nc=Array.prototype.map,rc=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],ic=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?ec:(e=nc.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?ec:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(nc.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Vs(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,y=t.comma,g=t.precision,m=t.trim,v=t.type;"n"===v?(y=!0,v="g"):tc[v]||(void 0===g&&(g=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===f?a:/[%p]/.test(v)?c:"",_=tc[v],k=/[defgprs%]/.test(v);function w(t){var i,a,c,f=b,w=x;if("c"===v)w=_(t)+w,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?l:_(Math.abs(t),g),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==h&&(T=!1),f=(T?"("===h?h:u:"-"===h||"("===h?"":h)+f,w=("s"===v?rc[8+Xs/3]:"")+w+(T&&"("===h?")":""),k)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}y&&!d&&(t=r(t,1/0));var E=f.length+t.length+w.length,C=E>1)+f+t+w+C.slice(E);break;default:t=C+f+t+w}return s(t)}return g=void 0===g?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,g)):Math.max(0,Math.min(20,g)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=Vs(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ws(e)/3))),i=Math.pow(10,-r),a=rc[8+r/3];return function(t){return n(i*t)+a}}}};function ac(t){return Zs=ic(t),Ks=Zs.format,Qs=Zs.formatPrefix,Zs}ac({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var oc=function(t){return Math.max(0,-Ws(Math.abs(t)))},sc=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ws(e)/3)))-Ws(Math.abs(t)))},cc=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ws(e)-Ws(t))+1},uc=function(){return new lc};function lc(){this.reset()}lc.prototype={constructor:lc,reset:function(){this.s=this.t=0},add:function(t){fc(hc,t,this.t),fc(this,hc.s,this.s),this.s?this.t+=hc.t:this.s=hc.t},valueOf:function(){return this.s}};var hc=new lc;function fc(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var dc=Math.PI,pc=dc/2,yc=dc/4,gc=2*dc,mc=180/dc,vc=dc/180,bc=Math.abs,xc=Math.atan,_c=Math.atan2,kc=Math.cos,wc=Math.ceil,Tc=Math.exp,Ec=(Math.floor,Math.log),Cc=Math.pow,Sc=Math.sin,Ac=Math.sign||function(t){return t>0?1:t<0?-1:0},Mc=Math.sqrt,Oc=Math.tan;function Nc(t){return t>1?0:t<-1?dc:Math.acos(t)}function Bc(t){return t>1?pc:t<-1?-pc:Math.asin(t)}function Dc(t){return(t=Sc(t/2))*t}function Lc(){}function Ic(t,e){t&&Fc.hasOwnProperty(t.type)&&Fc[t.type](t,e)}var Rc={Feature:function(t,e){Ic(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,a=kc(e=(e*=vc)/2+yc),o=Sc(e),s=qc*o,c=$c*a+s*kc(i),u=s*r*Sc(i);Hc.add(_c(u,c)),Uc=t,$c=a,qc=o}var Jc=function(t){return Vc.reset(),Wc(t,Gc),2*Vc};function tu(t){return[_c(t[1],t[0]),Bc(t[2])]}function eu(t){var e=t[0],n=t[1],r=kc(n);return[r*kc(e),r*Sc(e),Sc(n)]}function nu(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ru(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function iu(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function au(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function ou(t){var e=Mc(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var su,cu,uu,lu,hu,fu,du,pu,yu,gu,mu=uc(),vu={point:bu,lineStart:_u,lineEnd:ku,polygonStart:function(){vu.point=wu,vu.lineStart=Tu,vu.lineEnd=Eu,mu.reset(),Gc.polygonStart()},polygonEnd:function(){Gc.polygonEnd(),vu.point=bu,vu.lineStart=_u,vu.lineEnd=ku,Hc<0?(su=-(uu=180),cu=-(lu=90)):mu>1e-6?lu=90:mu<-1e-6&&(cu=-90),gu[0]=su,gu[1]=uu},sphere:function(){su=-(uu=180),cu=-(lu=90)}};function bu(t,e){yu.push(gu=[su=t,uu=t]),elu&&(lu=e)}function xu(t,e){var n=eu([t*vc,e*vc]);if(pu){var r=ru(pu,n),i=ru([r[1],-r[0],0],r);ou(i),i=tu(i);var a,o=t-hu,s=o>0?1:-1,c=i[0]*mc*s,u=bc(o)>180;u^(s*hulu&&(lu=a):u^(s*hu<(c=(c+360)%360-180)&&clu&&(lu=e)),u?tCu(su,uu)&&(uu=t):Cu(t,uu)>Cu(su,uu)&&(su=t):uu>=su?(tuu&&(uu=t)):t>hu?Cu(su,t)>Cu(su,uu)&&(uu=t):Cu(t,uu)>Cu(su,uu)&&(su=t)}else yu.push(gu=[su=t,uu=t]);elu&&(lu=e),pu=n,hu=t}function _u(){vu.point=xu}function ku(){gu[0]=su,gu[1]=uu,vu.point=bu,pu=null}function wu(t,e){if(pu){var n=t-hu;mu.add(bc(n)>180?n+(n>0?360:-360):n)}else fu=t,du=e;Gc.point(t,e),xu(t,e)}function Tu(){Gc.lineStart()}function Eu(){wu(fu,du),Gc.lineEnd(),bc(mu)>1e-6&&(su=-(uu=180)),gu[0]=su,gu[1]=uu,pu=null}function Cu(t,e){return(e-=t)<0?e+360:e}function Su(t,e){return t[0]-e[0]}function Au(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:eCu(r[0],r[1])&&(r[1]=i[1]),Cu(i[0],r[1])>Cu(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=Cu(r[1],i[0]))>o&&(o=s,su=i[0],uu=r[1])}return yu=gu=null,su===1/0||cu===1/0?[[NaN,NaN],[NaN,NaN]]:[[su,cu],[uu,lu]]},Hu={sphere:Lc,point:Vu,lineStart:Xu,lineEnd:Qu,polygonStart:function(){Hu.lineStart=Ju,Hu.lineEnd=tl},polygonEnd:function(){Hu.lineStart=Xu,Hu.lineEnd=Qu}};function Vu(t,e){t*=vc;var n=kc(e*=vc);Gu(n*kc(t),n*Sc(t),Sc(e))}function Gu(t,e,n){++Mu,Nu+=(t-Nu)/Mu,Bu+=(e-Bu)/Mu,Du+=(n-Du)/Mu}function Xu(){Hu.point=Zu}function Zu(t,e){t*=vc;var n=kc(e*=vc);Uu=n*kc(t),$u=n*Sc(t),qu=Sc(e),Hu.point=Ku,Gu(Uu,$u,qu)}function Ku(t,e){t*=vc;var n=kc(e*=vc),r=n*kc(t),i=n*Sc(t),a=Sc(e),o=_c(Mc((o=$u*a-qu*i)*o+(o=qu*r-Uu*a)*o+(o=Uu*i-$u*r)*o),Uu*r+$u*i+qu*a);Ou+=o,Lu+=o*(Uu+(Uu=r)),Iu+=o*($u+($u=i)),Ru+=o*(qu+(qu=a)),Gu(Uu,$u,qu)}function Qu(){Hu.point=Vu}function Ju(){Hu.point=el}function tl(){nl(Yu,zu),Hu.point=Vu}function el(t,e){Yu=t,zu=e,t*=vc,e*=vc,Hu.point=nl;var n=kc(e);Uu=n*kc(t),$u=n*Sc(t),qu=Sc(e),Gu(Uu,$u,qu)}function nl(t,e){t*=vc;var n=kc(e*=vc),r=n*kc(t),i=n*Sc(t),a=Sc(e),o=$u*a-qu*i,s=qu*r-Uu*a,c=Uu*i-$u*r,u=Mc(o*o+s*s+c*c),l=Bc(u),h=u&&-l/u;Fu+=h*o,Pu+=h*s,ju+=h*c,Ou+=l,Lu+=l*(Uu+(Uu=r)),Iu+=l*($u+($u=i)),Ru+=l*(qu+(qu=a)),Gu(Uu,$u,qu)}var rl=function(t){Mu=Ou=Nu=Bu=Du=Lu=Iu=Ru=Fu=Pu=ju=0,Wc(t,Hu);var e=Fu,n=Pu,r=ju,i=e*e+n*n+r*r;return i<1e-12&&(e=Lu,n=Iu,r=Ru,Ou<1e-6&&(e=Nu,n=Bu,r=Du),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[_c(n,e)*mc,Bc(r/Mc(i))*mc]},il=function(t){return function(){return t}},al=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function ol(t,e){return[bc(t)>dc?t+Math.round(-t/gc)*gc:t,e]}function sl(t,e,n){return(t%=gc)?e||n?al(ul(t),ll(e,n)):ul(t):e||n?ll(e,n):ol}function cl(t){return function(e,n){return[(e+=t)>dc?e-gc:e<-dc?e+gc:e,n]}}function ul(t){var e=cl(t);return e.invert=cl(-t),e}function ll(t,e){var n=kc(t),r=Sc(t),i=kc(e),a=Sc(e);function o(t,e){var o=kc(e),s=kc(t)*o,c=Sc(t)*o,u=Sc(e),l=u*n+s*r;return[_c(c*i-l*a,s*n-u*r),Bc(l*i+c*a)]}return o.invert=function(t,e){var o=kc(e),s=kc(t)*o,c=Sc(t)*o,u=Sc(e),l=u*i-c*a;return[_c(c*i+u*a,s*n+l*r),Bc(l*n-s*r)]},o}ol.invert=ol;var hl=function(t){function e(e){return(e=t(e[0]*vc,e[1]*vc))[0]*=mc,e[1]*=mc,e}return t=sl(t[0]*vc,t[1]*vc,t.length>2?t[2]*vc:0),e.invert=function(e){return(e=t.invert(e[0]*vc,e[1]*vc))[0]*=mc,e[1]*=mc,e},e};function fl(t,e,n,r,i,a){if(n){var o=kc(e),s=Sc(e),c=r*n;null==i?(i=e+r*gc,a=e-c/2):(i=dl(o,i),a=dl(o,a),(r>0?ia)&&(i+=r*gc));for(var u,l=i;r>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},gl=function(t,e){return bc(t[0]-e[0])<1e-6&&bc(t[1]-e[1])<1e-6};function ml(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var vl=function(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(gl(r,o)){if(!r[2]&&!o[2]){for(i.lineStart(),a=0;a=0;--a)i.point((l=u[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function bl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,E=T*w,C=E>dc,S=y*_;if(xl.add(_c(S*T*Sc(E),g*k+S*kc(E))),o+=C?w+T*gc:w,C^d>=n^b>=n){var A=ru(eu(f),eu(v));ou(A);var M=ru(a,A);ou(M);var O=(C^w>=0?-1:1)*Bc(M[2]);(r>O||r===O&&(A[0]||A[1]))&&(s+=C^w>=0?1:-1)}}return(o<-1e-6||o<1e-6&&xl<-1e-6)^1&s},wl=function(t,e,n,r){return function(i){var a,o,s,c=e(i),u=yl(),l=e(u),h=!1,f={point:d,lineStart:y,lineEnd:g,polygonStart:function(){f.point=m,f.lineStart=v,f.lineEnd=b,o=[],a=[]},polygonEnd:function(){f.point=d,f.lineStart=y,f.lineEnd=g,o=P(o);var t=kl(a,r);o.length?(h||(i.polygonStart(),h=!0),vl(o,El,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function y(){f.point=p,c.lineStart()}function g(){f.point=d,c.lineEnd()}function m(t,e){s.push([t,e]),l.point(t,e)}function v(){l.lineStart(),s=[]}function b(){m(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,c=l.clean(),f=u.result(),d=f.length;if(s.pop(),a.push(s),s=null,d)if(1&c){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t1&&2&c&&f.push(f.pop().concat(f.shift())),o.push(f.filter(Tl))}return f}};function Tl(t){return t.length>1}function El(t,e){return((t=t.x)[0]<0?t[1]-pc-1e-6:pc-t[1])-((e=e.x)[0]<0?e[1]-pc-1e-6:pc-e[1])}var Cl=wl((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?dc:-dc,c=bc(a-n);bc(c-dc)<1e-6?(t.point(n,r=(r+o)/2>0?pc:-pc),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=dc&&(bc(n-i)<1e-6&&(n-=1e-6*i),bc(a-s)<1e-6&&(a-=1e-6*s),r=function(t,e,n,r){var i,a,o=Sc(t-n);return bc(o)>1e-6?xc((Sc(e)*(a=kc(r))*Sc(n)-Sc(r)*(i=kc(e))*Sc(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*pc,r.point(-dc,i),r.point(0,i),r.point(dc,i),r.point(dc,0),r.point(dc,-i),r.point(0,-i),r.point(-dc,-i),r.point(-dc,0),r.point(-dc,i);else if(bc(t[0]-e[0])>1e-6){var a=t[0]0,i=bc(e)>1e-6;function a(t,n){return kc(t)*kc(n)>e}function o(t,n,r){var i=[1,0,0],a=ru(eu(t),eu(n)),o=nu(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var u=e*o/c,l=-e*s/c,h=ru(i,a),f=au(i,u);iu(f,au(a,l));var d=h,p=nu(f,d),y=nu(d,d),g=p*p-y*(nu(f,f)-1);if(!(g<0)){var m=Mc(g),v=au(d,(-p-m)/y);if(iu(v,f),v=tu(v),!r)return v;var b,x=t[0],_=n[0],k=t[1],w=n[1];_0^v[1]<(bc(v[0]-x)<1e-6?k:w):k<=v[1]&&v[1]<=w:T>dc^(x<=v[0]&&v[0]<=_)){var C=au(d,(-p+m)/y);return iu(C,f),[v,tu(C)]}}}function s(e,n){var i=r?t:dc-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return wl(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(h,f){var d,p=[h,f],y=a(h,f),g=r?y?0:s(h,f):y?s(h+(h<0?dc:-dc),f):0;if(!e&&(u=c=y)&&t.lineStart(),y!==c&&(!(d=o(e,p))||gl(e,d)||gl(p,d))&&(p[2]=1),y!==c)l=0,y?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1],2),t.lineEnd()),e=d;else if(i&&e&&r^y){var m;g&n||!(m=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(m[0][0],m[0][1]),t.point(m[1][0],m[1][1]),t.lineEnd()):(t.point(m[1][0],m[1][1]),t.lineEnd(),t.lineStart(),t.point(m[0][0],m[0][1],3)))}!y||e&&gl(e,p)||t.point(p[0],p[1]),e=p,c=y,n=g},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,r,i,a){fl(a,t,n,i,e,r)}),r?[0,-t]:[-dc,t-dc])};function Al(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,u){var l=0,h=0;if(null==i||(l=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==h);else u.point(a[0],a[1])}function o(r,i){return bc(r[0]-t)<1e-6?i>0?0:3:bc(r[0]-n)<1e-6?i>0?2:1:bc(r[1]-e)<1e-6?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,h,f,d,p,y,g,m,v,b=o,x=yl(),_={point:k,lineStart:function(){_.point=w,u&&u.push(l=[]);m=!0,g=!1,p=y=NaN},lineEnd:function(){c&&(w(h,f),d&&g&&x.rejoin(),c.push(x.result()));_.point=k,g&&b.lineEnd()},polygonStart:function(){b=x,c=[],u=[],v=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=u.length;nr&&(f-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(f-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=v&&e,i=(c=P(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&vl(c,s,e,a,o),o.polygonEnd());b=o,c=u=l=null}};function k(t,e){i(t,e)&&b.point(t,e)}function w(a,o){var s=i(a,o);if(u&&l.push([a,o]),m)h=a,f=o,d=s,m=!1,s&&(b.lineStart(),b.point(a,o));else if(s&&g)b.point(a,o);else{var c=[p=Math.max(-1e9,Math.min(1e9,p)),y=Math.max(-1e9,Math.min(1e9,y))],x=[a=Math.max(-1e9,Math.min(1e9,a)),o=Math.max(-1e9,Math.min(1e9,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],u=0,l=1,h=e[0]-s,f=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o0)){if(o/=f,f<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=a-c,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o0&&(t[0]=s+u*h,t[1]=c+u*f),l<1&&(e[0]=s+l*h,e[1]=c+l*f),!0}}}}}(c,x,t,e,n,r)?s&&(b.lineStart(),b.point(a,o),v=!1):(g||(b.lineStart(),b.point(c[0],c[1])),b.point(x[0],x[1]),s||b.lineEnd(),v=!1)}p=a,y=o,g=s}return _}}var Ml,Ol,Nl,Bl=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=Al(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}},Dl=uc(),Ll={sphere:Lc,point:Lc,lineStart:function(){Ll.point=Rl,Ll.lineEnd=Il},lineEnd:Lc,polygonStart:Lc,polygonEnd:Lc};function Il(){Ll.point=Ll.lineEnd=Lc}function Rl(t,e){Ml=t*=vc,Ol=Sc(e*=vc),Nl=kc(e),Ll.point=Fl}function Fl(t,e){t*=vc;var n=Sc(e*=vc),r=kc(e),i=bc(t-Ml),a=kc(i),o=r*Sc(i),s=Nl*n-Ol*r*a,c=Ol*n+Nl*r*a;Dl.add(_c(Mc(o*o+s*s),c)),Ml=t,Ol=n,Nl=r}var Pl=function(t){return Dl.reset(),Wc(t,Ll),+Dl},jl=[null,null],Yl={type:"LineString",coordinates:jl},zl=function(t,e){return jl[0]=t,jl[1]=e,Pl(Yl)},Ul={Feature:function(t,e){return ql(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r0&&(i=zl(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<1e-12*i)return!0;n=r}return!1}function Vl(t,e){return!!kl(t.map(Gl),Xl(e))}function Gl(t){return(t=t.map(Xl)).pop(),t}function Xl(t){return[t[0]*vc,t[1]*vc]}var Zl=function(t,e){return(t&&Ul.hasOwnProperty(t.type)?Ul[t.type]:ql)(t,e)};function Kl(t,e,n){var r=w(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Ql(t,e,n){var r=w(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function Jl(){var t,e,n,r,i,a,o,s,c,u,l,h,f=10,d=f,p=90,y=360,g=2.5;function m(){return{type:"MultiLineString",coordinates:v()}}function v(){return w(wc(r/p)*p,n,p).map(l).concat(w(wc(s/y)*y,o,y).map(h)).concat(w(wc(e/f)*f,t,f).filter((function(t){return bc(t%p)>1e-6})).map(c)).concat(w(wc(a/d)*d,i,d).filter((function(t){return bc(t%y)>1e-6})).map(u))}return m.lines=function(){return v().map((function(t){return{type:"LineString",coordinates:t}}))},m.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(h(o).slice(1),l(n).reverse().slice(1),h(s).reverse().slice(1))]}},m.extent=function(t){return arguments.length?m.extentMajor(t).extentMinor(t):m.extentMinor()},m.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),m.precision(g)):[[r,s],[n,o]]},m.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),m.precision(g)):[[e,a],[t,i]]},m.step=function(t){return arguments.length?m.stepMajor(t).stepMinor(t):m.stepMinor()},m.stepMajor=function(t){return arguments.length?(p=+t[0],y=+t[1],m):[p,y]},m.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],m):[f,d]},m.precision=function(f){return arguments.length?(g=+f,c=Kl(a,i,90),u=Ql(e,t,g),l=Kl(s,o,90),h=Ql(r,n,g),m):g},m.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}function th(){return Jl()()}var eh,nh,rh,ih,ah=function(t,e){var n=t[0]*vc,r=t[1]*vc,i=e[0]*vc,a=e[1]*vc,o=kc(r),s=Sc(r),c=kc(a),u=Sc(a),l=o*kc(n),h=o*Sc(n),f=c*kc(i),d=c*Sc(i),p=2*Bc(Mc(Dc(a-r)+o*c*Dc(i-n))),y=Sc(p),g=p?function(t){var e=Sc(t*=p)/y,n=Sc(p-t)/y,r=n*l+e*f,i=n*h+e*d,a=n*s+e*u;return[_c(i,r)*mc,_c(a,Mc(r*r+i*i))*mc]}:function(){return[n*mc,r*mc]};return g.distance=p,g},oh=function(t){return t},sh=uc(),ch=uc(),uh={point:Lc,lineStart:Lc,lineEnd:Lc,polygonStart:function(){uh.lineStart=lh,uh.lineEnd=dh},polygonEnd:function(){uh.lineStart=uh.lineEnd=uh.point=Lc,sh.add(bc(ch)),ch.reset()},result:function(){var t=sh/2;return sh.reset(),t}};function lh(){uh.point=hh}function hh(t,e){uh.point=fh,eh=rh=t,nh=ih=e}function fh(t,e){ch.add(ih*t-rh*e),rh=t,ih=e}function dh(){fh(eh,nh)}var ph=uh,yh=1/0,gh=yh,mh=-yh,vh=mh;var bh,xh,_h,kh,wh={point:function(t,e){tmh&&(mh=t);evh&&(vh=e)},lineStart:Lc,lineEnd:Lc,polygonStart:Lc,polygonEnd:Lc,result:function(){var t=[[yh,gh],[mh,vh]];return mh=vh=-(gh=yh=1/0),t}},Th=0,Eh=0,Ch=0,Sh=0,Ah=0,Mh=0,Oh=0,Nh=0,Bh=0,Dh={point:Lh,lineStart:Ih,lineEnd:Ph,polygonStart:function(){Dh.lineStart=jh,Dh.lineEnd=Yh},polygonEnd:function(){Dh.point=Lh,Dh.lineStart=Ih,Dh.lineEnd=Ph},result:function(){var t=Bh?[Oh/Bh,Nh/Bh]:Mh?[Sh/Mh,Ah/Mh]:Ch?[Th/Ch,Eh/Ch]:[NaN,NaN];return Th=Eh=Ch=Sh=Ah=Mh=Oh=Nh=Bh=0,t}};function Lh(t,e){Th+=t,Eh+=e,++Ch}function Ih(){Dh.point=Rh}function Rh(t,e){Dh.point=Fh,Lh(_h=t,kh=e)}function Fh(t,e){var n=t-_h,r=e-kh,i=Mc(n*n+r*r);Sh+=i*(_h+t)/2,Ah+=i*(kh+e)/2,Mh+=i,Lh(_h=t,kh=e)}function Ph(){Dh.point=Lh}function jh(){Dh.point=zh}function Yh(){Uh(bh,xh)}function zh(t,e){Dh.point=Uh,Lh(bh=_h=t,xh=kh=e)}function Uh(t,e){var n=t-_h,r=e-kh,i=Mc(n*n+r*r);Sh+=i*(_h+t)/2,Ah+=i*(kh+e)/2,Mh+=i,Oh+=(i=kh*t-_h*e)*(_h+t),Nh+=i*(kh+e),Bh+=3*i,Lh(_h=t,kh=e)}var $h=Dh;function qh(t){this._context=t}qh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,gc)}},result:Lc};var Wh,Hh,Vh,Gh,Xh,Zh=uc(),Kh={point:Lc,lineStart:function(){Kh.point=Qh},lineEnd:function(){Wh&&Jh(Hh,Vh),Kh.point=Lc},polygonStart:function(){Wh=!0},polygonEnd:function(){Wh=null},result:function(){var t=+Zh;return Zh.reset(),t}};function Qh(t,e){Kh.point=Jh,Hh=Gh=t,Vh=Xh=e}function Jh(t,e){Gh-=t,Xh-=e,Zh.add(Mc(Gh*Gh+Xh*Xh)),Gh=t,Xh=e}var tf=Kh;function ef(){this._string=[]}function nf(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}ef.prototype={_radius:4.5,_circle:nf(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=nf(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var rf=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Wc(t,n(r))),r.result()}return a.area=function(t){return Wc(t,n(ph)),ph.result()},a.measure=function(t){return Wc(t,n(tf)),tf.result()},a.bounds=function(t){return Wc(t,n(wh)),wh.result()},a.centroid=function(t){return Wc(t,n($h)),$h.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,oh):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new ef):new qh(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},af=function(t){return{stream:of(t)}};function of(t){return function(e){var n=new sf;for(var r in t)n[r]=t[r];return n.stream=e,n}}function sf(){}function cf(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Wc(n,t.stream(wh)),e(wh.result()),null!=r&&t.clipExtent(r),t}function uf(t,e,n){return cf(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function lf(t,e,n){return uf(t,[[0,0],e],n)}function hf(t,e,n){return cf(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function ff(t,e,n){return cf(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}sf.prototype={constructor:sf,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var df=kc(30*vc),pf=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,u,l,h,f,d,p,y,g){var m=u-r,v=l-i,b=m*m+v*v;if(b>4*e&&y--){var x=o+f,_=s+d,k=c+p,w=Mc(x*x+_*_+k*k),T=Bc(k/=w),E=bc(bc(k)-1)<1e-6||bc(a-h)<1e-6?(a+h)/2:_c(_,x),C=t(E,T),S=C[0],A=C[1],M=S-r,O=A-i,N=v*M-m*O;(N*N/b>e||bc((m*M+v*O)/b-.5)>.3||o*f+s*d+c*p2?t[2]%360*vc:0,M()):[g*mc,m*mc,v*mc]},S.angle=function(t){return arguments.length?(b=t%360*vc,M()):b*mc},S.reflectX=function(t){return arguments.length?(x=t?-1:1,M()):x<0},S.reflectY=function(t){return arguments.length?(_=t?-1:1,M()):_<0},S.precision=function(t){return arguments.length?(o=pf(s,C=t*t),O()):Mc(C)},S.fitExtent=function(t,e){return uf(S,t,e)},S.fitSize=function(t,e){return lf(S,t,e)},S.fitWidth=function(t,e){return hf(S,t,e)},S.fitHeight=function(t,e){return ff(S,t,e)},function(){return e=t.apply(this,arguments),S.invert=e.invert&&A,M()}}function xf(t){var e=0,n=dc/3,r=bf(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*vc,n=t[1]*vc):[e*mc,n*mc]},i}function _f(t,e){var n=Sc(t),r=(n+Sc(e))/2;if(bc(r)<1e-6)return function(t){var e=kc(t);function n(t,n){return[t*e,Sc(n)/e]}return n.invert=function(t,n){return[t/e,Bc(n*e)]},n}(t);var i=1+n*(2*r-n),a=Mc(i)/r;function o(t,e){var n=Mc(i-2*r*Sc(e))/r;return[n*Sc(t*=r),a-n*kc(t)]}return o.invert=function(t,e){var n=a-e,o=_c(t,bc(n))*Ac(n);return n*r<0&&(o-=dc*Ac(t)*Ac(n)),[o/r,Bc((i-(t*t+n*n)*r*r)/(2*r))]},o}var kf=function(){return xf(_f).scale(155.424).center([0,33.6442])},wf=function(){return kf().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])};var Tf=function(){var t,e,n,r,i,a,o=wf(),s=kf().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=kf().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function l(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,l}return l.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n0?e<1e-6-pc&&(e=1e-6-pc):e>pc-1e-6&&(e=pc-1e-6);var n=i/Cc(Lf(e),r);return[n*Sc(r*t),i-n*kc(r*t)]}return a.invert=function(t,e){var n=i-e,a=Ac(r)*Mc(t*t+n*n),o=_c(t,bc(n))*Ac(n);return n*r<0&&(o-=dc*Ac(t)*Ac(n)),[o/r,2*xc(Cc(i/a,1/r))-pc]},a}var Rf=function(){return xf(If).scale(109.5).parallels([30,30])};function Ff(t,e){return[t,e]}Ff.invert=Ff;var Pf=function(){return vf(Ff).scale(152.63)};function jf(t,e){var n=kc(t),r=t===e?Sc(t):(n-kc(e))/(e-t),i=n/r+t;if(bc(r)<1e-6)return Ff;function a(t,e){var n=i-e,a=r*t;return[n*Sc(a),i-n*kc(a)]}return a.invert=function(t,e){var n=i-e,a=_c(t,bc(n))*Ac(n);return n*r<0&&(a-=dc*Ac(t)*Ac(n)),[a/r,i-Ac(r)*Mc(t*t+n*n)]},a}var Yf=function(){return xf(jf).scale(131.154).center([0,13.9389])},zf=1.340264,Uf=-.081106,$f=893e-6,qf=.003796,Wf=Mc(3)/2;function Hf(t,e){var n=Bc(Wf*Sc(e)),r=n*n,i=r*r*r;return[t*kc(n)/(Wf*(zf+3*Uf*r+i*(7*$f+9*qf*r))),n*(zf+Uf*r+i*($f+qf*r))]}Hf.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(zf+Uf*i+a*($f+qf*i))-e)/(zf+3*Uf*i+a*(7*$f+9*qf*i)))*r)*i*i,!(bc(n)<1e-12));++o);return[Wf*t*(zf+3*Uf*i+a*(7*$f+9*qf*i))/kc(r),Bc(Sc(r)/Wf)]};var Vf=function(){return vf(Hf).scale(177.158)};function Gf(t,e){var n=kc(e),r=kc(t)*n;return[n*Sc(t)/r,Sc(e)/r]}Gf.invert=Cf(xc);var Xf=function(){return vf(Gf).scale(144.049).clipAngle(60)},Zf=function(){var t,e,n,r,i,a,o,s=1,c=0,u=0,l=1,h=1,f=0,d=null,p=1,y=1,g=of({point:function(t,e){var n=b([t,e]);this.stream.point(n[0],n[1])}}),m=oh;function v(){return p=s*l,y=s*h,a=o=null,b}function b(n){var r=n[0]*p,i=n[1]*y;if(f){var a=i*t-r*e;r=r*t+i*e,i=a}return[r+c,i+u]}return b.invert=function(n){var r=n[0]-c,i=n[1]-u;if(f){var a=i*t+r*e;r=r*t-i*e,i=a}return[r/p,i/y]},b.stream=function(t){return a&&o===t?a:a=g(m(o=t))},b.postclip=function(t){return arguments.length?(m=t,d=n=r=i=null,v()):m},b.clipExtent=function(t){return arguments.length?(m=null==t?(d=n=r=i=null,oh):Al(d=+t[0][0],n=+t[0][1],r=+t[1][0],i=+t[1][1]),v()):null==d?null:[[d,n],[r,i]]},b.scale=function(t){return arguments.length?(s=+t,v()):s},b.translate=function(t){return arguments.length?(c=+t[0],u=+t[1],v()):[c,u]},b.angle=function(n){return arguments.length?(e=Sc(f=n%360*vc),t=kc(f),v()):f*mc},b.reflectX=function(t){return arguments.length?(l=t?-1:1,v()):l<0},b.reflectY=function(t){return arguments.length?(h=t?-1:1,v()):h<0},b.fitExtent=function(t,e){return uf(b,t,e)},b.fitSize=function(t,e){return lf(b,t,e)},b.fitWidth=function(t,e){return hf(b,t,e)},b.fitHeight=function(t,e){return ff(b,t,e)},b};function Kf(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Kf.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(bc(n)>1e-6&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Qf=function(){return vf(Kf).scale(175.295)};function Jf(t,e){return[kc(e)*Sc(t),Sc(e)]}Jf.invert=Cf(Bc);var td=function(){return vf(Jf).scale(249.5).clipAngle(90.000001)};function ed(t,e){var n=kc(e),r=1+kc(t)*n;return[n*Sc(t)/r,Sc(e)/r]}ed.invert=Cf((function(t){return 2*xc(t)}));var nd=function(){return vf(ed).scale(250).clipAngle(142)};function rd(t,e){return[Ec(Oc((pc+e)/2)),-t]}rd.invert=function(t,e){return[-e,2*xc(Tc(t))-pc]};var id=function(){var t=Df(rd),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function ad(t,e){return t.parent===e.parent?1:2}function od(t,e){return t+e.x}function sd(t,e){return Math.max(t,e.y)}var cd=function(){var t=ad,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(od,0)/t.length}(n),e.y=function(t){return 1+t.reduce(sd,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function ud(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function ld(t,e){var n,r,i,a,o,s=new pd(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=hd);n=u.pop();)if(c&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(r=n.children[a]=new pd(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(dd)}function hd(t){return t.children}function fd(t){t.data=t.data.data}function dd(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function pd(t){this.data=t,this.depth=this.height=0,this.parent=null}pd.prototype=ld.prototype={constructor:pd,count:function(){return this.eachAfter(ud)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;t=n.pop(),e=r.pop();for(;t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return ld(this).eachBefore(fd)}};var yd=Array.prototype.slice;var gd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(yd.call(t))).length,a=[];r0&&n*n>r*r+i*i}function xd(t,e){for(var n=0;n(o*=o)?(r=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function Ed(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function Cd(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function Sd(t){this._=t,this.next=null,this.previous=null}function Ad(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,c,u,l,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;Td(n,e,r=t[2]),e=new Sd(e),n=new Sd(n),r=new Sd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Nd(e),n):t},n.parentId=function(t){return arguments.length?(e=Nd(t),n):e},n};function Vd(t,e){return t.parent===e.parent?1:2}function Gd(t){var e=t.children;return e?e[0]:t.t}function Xd(t){var e=t.children;return e?e[e.length-1]:t.t}function Zd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Kd(t,e,n){return t.a.parent===e.parent?t.a:n}function Qd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}Qd.prototype=Object.create(pd.prototype);var Jd=function(){var t=Vd,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new Qd(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new Qd(r[i],i)),n.parent=e;return(o.parent=new Qd(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var u=i,l=i,h=i;i.eachBefore((function(t){t.xl.x&&(l=t),t.depth>h.depth&&(h=t)}));var f=u===l?1:t(u,l)/2,d=f-u.x,p=e/(l.x+f+d),y=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*y}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,h=s.m,f=c.m;s=Xd(s),a=Gd(a),s&&a;)c=Gd(c),(o=Xd(o)).a=e,(i=s.z+h-a.z-u+t(s._,a._))>0&&(Zd(Kd(s,e,r),e,i),u+=i,l+=i),h+=s.m,u+=a.m,f+=c.m,l+=o.m;s&&!Xd(o)&&(o.t=s,o.m+=h-l),a&&!Gd(c)&&(c.t=a,c.m+=u-f,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},tp=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(i-n)/t.value;++sf&&(f=s),g=l*l*y,(d=Math.max(f/g,g/h))>p){l-=s;break}p=d}m.push(o={value:l,dice:c1?e:1)},n}(ep),ip=function(){var t=rp,e=!1,n=1,r=1,i=[0],a=Bd,o=Bd,s=Bd,c=Bd,u=Bd;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(jd),t}function h(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,h=e.x1-n,f=e.y1-n;h=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=c)}var h=u[e],f=r/2+h,d=e+1,p=n-1;for(;d>>1;u[y]c-a){var v=(i*m+o*g)/r;t(e,d,g,i,a,v,c),t(d,n,m,v,a,o,c)}else{var b=(a*m+c*g)/r;t(e,d,g,i,a,o,b),t(d,n,m,i,b,o,c)}}(0,c,t.value,e,n,r,i)},op=function(t,e,n,r,i){(1&t.depth?tp:Yd)(t,e,n,r,i)},sp=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,h=-1,f=o.length,d=t.value;++h1?e:1)},n}(ep),cp=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},up=function(t,e){var n=ln(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},lp=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},hp=Math.SQRT2;function fp(t){return((t=Math.exp(t))+1/t)/2}var dp=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-i,h=c-a,f=l*l+h*h;if(f<1e-12)r=Math.log(u/o)/hp,n=function(t){return[i+t*l,a+t*h,o*Math.exp(hp*t*r)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),y=(u*u-o*o-4*f)/(2*u*2*d),g=Math.log(Math.sqrt(p*p+1)-p),m=Math.log(Math.sqrt(y*y+1)-y);r=(m-g)/hp,n=function(t){var e,n=t*r,s=fp(g),c=o/(2*d)*(s*(e=hp*n+g,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(g));return[i+c*l,a+c*h,o*s/fp(hp*n+g)]}}return n.duration=1e3*r,n};function pp(t){return function(e,n){var r=t((e=en(e)).h,(n=en(n)).h),i=fn(e.s,n.s),a=fn(e.l,n.l),o=fn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var yp=pp(ln),gp=pp(fn);function mp(t,e){var n=fn((t=ya(t)).l,(e=ya(e)).l),r=fn(t.a,e.a),i=fn(t.b,e.b),a=fn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function vp(t){return function(e,n){var r=t((e=wa(e)).h,(n=wa(n)).h),i=fn(e.c,n.c),a=fn(e.l,n.l),o=fn(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var bp=vp(ln),xp=vp(fn);function _p(t){return function e(n){function r(e,r){var i=t((e=Na(e)).h,(r=Na(r)).h),a=fn(e.s,r.s),o=fn(e.l,r.l),s=fn(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}var kp=_p(ln),wp=_p(fn);function Tp(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n1&&(e=t[a[o-2]],n=t[a[o-1]],r=t[s],(n[0]-e[0])*(r[1]-e[1])-(n[1]-e[1])*(r[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}var Op=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e=0;--e)u.push(t[r[a[e]][2]]);for(e=+s;es!=u>s&&o<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},Bp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(Dp),Rp=function t(e){function n(){var t=Ip.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Dp),Fp=function t(e){function n(t){return function(){for(var n=0,r=0;rr&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function ey(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i2?ny:ey,i=a=null,h}function h(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),kn)))(n)))},h.domain=function(t){return arguments.length?(o=$p.call(t,Zp),u===Qp||(u=ty(o)),l()):o.slice()},h.range=function(t){return arguments.length?(s=qp.call(t),l()):s.slice()},h.rangeRound=function(t){return s=qp.call(t),c=lp,l()},h.clamp=function(t){return arguments.length?(u=t?ty(o):Qp,h):u!==Qp},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}function ay(t,e){return iy()(t,e)}var oy=function(t,e,n,r){var i,a=M(t,e,n);switch((r=Vs(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=sc(a,o))||(r.precision=i),Qs(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=cc(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=oc(a))||(r.precision=i-2*("%"===r.type))}return Ks(r)};function sy(t){var e=t.domain;return t.ticks=function(t){var n=e();return S(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return oy(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],c=i[o];return c0?r=A(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=A(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(c/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(c*r)/r,e(i)),t},t}function cy(){var t=ay(Qp,Qp);return t.copy=function(){return ry(t,cy())},Yp.apply(t,arguments),sy(t)}function uy(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=$p.call(e,Zp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return uy(t).unknown(e)},t=arguments.length?$p.call(t,Zp):[0,1],sy(n)}var ly=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o0){for(;fc)break;y.push(h)}}else for(;f=1;--l)if(!((h=u*l)c)break;y.push(h)}}else y=S(f,d,Math.min(d-f,p)).map(n);return r?y.reverse():y},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Ks(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a0?r[i-1]:e[0],i=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return Oy().domain([e,n]).range(a).unknown(t)},Yp.apply(sy(o),arguments)}function Ny(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[u(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=qp.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=qp.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Ny().domain(e).range(n).unknown(t)},Yp.apply(i,arguments)}var By=new Date,Dy=new Date;function Ly(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return By.setTime(+e),Dy.setTime(+r),t(By),t(Dy),Math.floor(n(By,Dy))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Iy=Ly((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Iy.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ly((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Ry=Iy,Fy=Iy.range,Py=Ly((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),jy=Py,Yy=Py.range;function zy(t){return Ly((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var Uy=zy(0),$y=zy(1),qy=zy(2),Wy=zy(3),Hy=zy(4),Vy=zy(5),Gy=zy(6),Xy=Uy.range,Zy=$y.range,Ky=qy.range,Qy=Wy.range,Jy=Hy.range,tg=Vy.range,eg=Gy.range,ng=Ly((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),rg=ng,ig=ng.range,ag=Ly((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),og=ag,sg=ag.range,cg=Ly((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),ug=cg,lg=cg.range,hg=Ly((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),fg=hg,dg=hg.range,pg=Ly((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));pg.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Ly((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):pg:null};var yg=pg,gg=pg.range;function mg(t){return Ly((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var vg=mg(0),bg=mg(1),xg=mg(2),_g=mg(3),kg=mg(4),wg=mg(5),Tg=mg(6),Eg=vg.range,Cg=bg.range,Sg=xg.range,Ag=_g.range,Mg=kg.range,Og=wg.range,Ng=Tg.range,Bg=Ly((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),Dg=Bg,Lg=Bg.range,Ig=Ly((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Ig.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Ly((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var Rg=Ig,Fg=Ig.range;function Pg(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function jg(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Yg(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function zg(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Jg(i),l=tm(i),h=Jg(a),f=tm(a),d=Jg(o),p=tm(o),y=Jg(s),g=tm(s),m=Jg(c),v=tm(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:_m,e:_m,f:Cm,g:Fm,G:jm,H:km,I:wm,j:Tm,L:Em,m:Sm,M:Am,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:cv,s:uv,S:Mm,u:Om,U:Nm,V:Dm,w:Lm,W:Im,x:null,X:null,y:Rm,Y:Pm,Z:Ym,"%":sv},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:zm,e:zm,f:Hm,g:rv,G:av,H:Um,I:$m,j:qm,L:Wm,m:Vm,M:Gm,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:cv,s:uv,S:Xm,u:Zm,U:Km,V:Jm,w:tv,W:ev,x:null,X:null,y:nv,Y:iv,Z:ov,"%":sv},_={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=y.exec(e.slice(n));return r?(t.m=g[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return T(t,e,n,r)},d:hm,e:hm,f:mm,g:sm,G:om,H:dm,I:dm,j:fm,L:gm,m:lm,M:pm,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},q:um,Q:bm,s:xm,S:ym,u:nm,U:rm,V:im,w:em,W:am,x:function(t,e,r){return T(t,n,e,r)},X:function(t,e,n){return T(t,r,e,n)},y:sm,Y:om,Z:cm,"%":vm};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=jg(Yg(a.y,0,1))).getUTCDay(),r=i>4||0===i?bg.ceil(r):bg(r),r=Dg.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Pg(Yg(a.y,0,1))).getDay(),r=i>4||0===i?$y.ceil(r):$y(r),r=rg.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?jg(Yg(a.y,0,1)).getUTCDay():Pg(Yg(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,jg(a)):Pg(a)}}function T(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=_[i in Vg?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=k(n,b),b.X=k(r,b),b.c=k(e,b),x.x=k(n,x),x.X=k(r,x),x.c=k(e,x),{format:function(t){var e=k(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}var Ug,$g,qg,Wg,Hg,Vg={"-":"",_:" ",0:"0"},Gg=/^\s*\d+/,Xg=/^%/,Zg=/[\\^$*+?|[\]().{}]/g;function Kg(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function cm(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function um(t,e,n){var r=Gg.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function lm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function hm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function fm(t,e,n){var r=Gg.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function dm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function pm(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function ym(t,e,n){var r=Gg.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function gm(t,e,n){var r=Gg.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function mm(t,e,n){var r=Gg.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function vm(t,e,n){var r=Xg.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function bm(t,e,n){var r=Gg.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function xm(t,e,n){var r=Gg.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function _m(t,e){return Kg(t.getDate(),e,2)}function km(t,e){return Kg(t.getHours(),e,2)}function wm(t,e){return Kg(t.getHours()%12||12,e,2)}function Tm(t,e){return Kg(1+rg.count(Ry(t),t),e,3)}function Em(t,e){return Kg(t.getMilliseconds(),e,3)}function Cm(t,e){return Em(t,e)+"000"}function Sm(t,e){return Kg(t.getMonth()+1,e,2)}function Am(t,e){return Kg(t.getMinutes(),e,2)}function Mm(t,e){return Kg(t.getSeconds(),e,2)}function Om(t){var e=t.getDay();return 0===e?7:e}function Nm(t,e){return Kg(Uy.count(Ry(t)-1,t),e,2)}function Bm(t){var e=t.getDay();return e>=4||0===e?Hy(t):Hy.ceil(t)}function Dm(t,e){return t=Bm(t),Kg(Hy.count(Ry(t),t)+(4===Ry(t).getDay()),e,2)}function Lm(t){return t.getDay()}function Im(t,e){return Kg($y.count(Ry(t)-1,t),e,2)}function Rm(t,e){return Kg(t.getFullYear()%100,e,2)}function Fm(t,e){return Kg((t=Bm(t)).getFullYear()%100,e,2)}function Pm(t,e){return Kg(t.getFullYear()%1e4,e,4)}function jm(t,e){var n=t.getDay();return Kg((t=n>=4||0===n?Hy(t):Hy.ceil(t)).getFullYear()%1e4,e,4)}function Ym(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Kg(e/60|0,"0",2)+Kg(e%60,"0",2)}function zm(t,e){return Kg(t.getUTCDate(),e,2)}function Um(t,e){return Kg(t.getUTCHours(),e,2)}function $m(t,e){return Kg(t.getUTCHours()%12||12,e,2)}function qm(t,e){return Kg(1+Dg.count(Rg(t),t),e,3)}function Wm(t,e){return Kg(t.getUTCMilliseconds(),e,3)}function Hm(t,e){return Wm(t,e)+"000"}function Vm(t,e){return Kg(t.getUTCMonth()+1,e,2)}function Gm(t,e){return Kg(t.getUTCMinutes(),e,2)}function Xm(t,e){return Kg(t.getUTCSeconds(),e,2)}function Zm(t){var e=t.getUTCDay();return 0===e?7:e}function Km(t,e){return Kg(vg.count(Rg(t)-1,t),e,2)}function Qm(t){var e=t.getUTCDay();return e>=4||0===e?kg(t):kg.ceil(t)}function Jm(t,e){return t=Qm(t),Kg(kg.count(Rg(t),t)+(4===Rg(t).getUTCDay()),e,2)}function tv(t){return t.getUTCDay()}function ev(t,e){return Kg(bg.count(Rg(t)-1,t),e,2)}function nv(t,e){return Kg(t.getUTCFullYear()%100,e,2)}function rv(t,e){return Kg((t=Qm(t)).getUTCFullYear()%100,e,2)}function iv(t,e){return Kg(t.getUTCFullYear()%1e4,e,4)}function av(t,e){var n=t.getUTCDay();return Kg((t=n>=4||0===n?kg(t):kg.ceil(t)).getUTCFullYear()%1e4,e,4)}function ov(){return"+0000"}function sv(){return"%"}function cv(t){return+t}function uv(t){return Math.floor(+t/1e3)}function lv(t){return Ug=zg(t),$g=Ug.format,qg=Ug.parse,Wg=Ug.utcFormat,Hg=Ug.utcParse,Ug}lv({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function hv(t){return new Date(t)}function fv(t){return t instanceof Date?+t:+new Date(+t)}function dv(t,e,n,r,i,o,s,c,u){var l=ay(Qp,Qp),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),y=u("%I:%M"),g=u("%I %p"),m=u("%a %d"),v=u("%b %d"),b=u("%B"),x=u("%Y"),_=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[i,1,36e5],[i,3,108e5],[i,6,216e5],[i,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function k(a){return(s(a)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return ex.h=360*t-100,ex.s=1.5-1.5*e,ex.l=.8-.9*e,ex+""},rx=Ge(),ix=Math.PI/3,ax=2*Math.PI/3,ox=function(t){var e;return t=(.5-t)*Math.PI,rx.r=255*(e=Math.sin(t))*e,rx.g=255*(e=Math.sin(t+ix))*e,rx.b=255*(e=Math.sin(t+ax))*e,rx+""},sx=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"};function cx(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var ux=cx(jv("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),lx=cx(jv("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),hx=cx(jv("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),fx=cx(jv("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),dx=function(t){return we(re(t).call(document.documentElement))},px=0;function yx(){return new gx}function gx(){this._="@"+(++px).toString(36)}gx.prototype=yx.prototype={constructor:gx,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var mx=function(t){return"string"==typeof t?new xe([document.querySelectorAll(t)],[document.documentElement]):new xe([null==t?[]:t],be)},vx=function(t,e){null==e&&(e=On().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n1?0:t<-1?Sx:Math.acos(t)}function Nx(t){return t>=1?Ax:t<=-1?-Ax:Math.asin(t)}function Bx(t){return t.innerRadius}function Dx(t){return t.outerRadius}function Lx(t){return t.startAngle}function Ix(t){return t.endAngle}function Rx(t){return t&&t.padAngle}function Fx(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*f<1e-12))return[t+(f=(l*(e-a)-h*(t-i))/f)*c,e+f*u]}function Px(t,e,n,r,i,a,o){var s=t-n,c=e-r,u=(o?a:-a)/Cx(s*s+c*c),l=u*c,h=-u*s,f=t+l,d=e+h,p=n+l,y=r+h,g=(f+p)/2,m=(d+y)/2,v=p-f,b=y-d,x=v*v+b*b,_=i-a,k=f*y-p*d,w=(b<0?-1:1)*Cx(wx(0,_*_*x-k*k)),T=(k*b-v*w)/x,E=(-k*v-b*w)/x,C=(k*b+v*w)/x,S=(-k*v+b*w)/x,A=T-g,M=E-m,O=C-g,N=S-m;return A*A+M*M>O*O+N*N&&(T=C,E=S),{cx:T,cy:E,x01:-l,y01:-h,x11:T*(i/_-1),y11:E*(i/_-1)}}var jx=function(){var t=Bx,e=Dx,n=bx(0),r=null,i=Lx,a=Ix,o=Rx,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-Ax,d=a.apply(this,arguments)-Ax,p=xx(d-f),y=d>f;if(s||(s=c=$i()),h1e-12)if(p>Mx-1e-12)s.moveTo(h*kx(f),h*Ex(f)),s.arc(0,0,h,f,d,!y),l>1e-12&&(s.moveTo(l*kx(d),l*Ex(d)),s.arc(0,0,l,d,f,y));else{var g,m,v=f,b=d,x=f,_=d,k=p,w=p,T=o.apply(this,arguments)/2,E=T>1e-12&&(r?+r.apply(this,arguments):Cx(l*l+h*h)),C=Tx(xx(h-l)/2,+n.apply(this,arguments)),S=C,A=C;if(E>1e-12){var M=Nx(E/l*Ex(T)),O=Nx(E/h*Ex(T));(k-=2*M)>1e-12?(x+=M*=y?1:-1,_-=M):(k=0,x=_=(f+d)/2),(w-=2*O)>1e-12?(v+=O*=y?1:-1,b-=O):(w=0,v=b=(f+d)/2)}var N=h*kx(v),B=h*Ex(v),D=l*kx(_),L=l*Ex(_);if(C>1e-12){var I,R=h*kx(b),F=h*Ex(b),P=l*kx(x),j=l*Ex(x);if(p1e-12?A>1e-12?(g=Px(P,j,N,B,h,A,y),m=Px(R,F,D,L,h,A,y),s.moveTo(g.cx+g.x01,g.cy+g.y01),A1e-12&&k>1e-12?S>1e-12?(g=Px(D,L,R,F,l,-S,y),m=Px(N,B,P,j,l,-S,y),s.lineTo(g.cx+g.x01,g.cy+g.y01),S=l;--h)s.point(g[h],m[h]);s.lineEnd(),s.areaEnd()}y&&(g[u]=+t(f,u,c),m[u]=+n(f,u,c),s.point(e?+e(f,u,c):g[u],r?+r(f,u,c):m[u]))}if(d)return s=null,d+""||null}function u(){return qx().defined(i).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:bx(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:bx(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:bx(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:bx(+t),r=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:bx(+t),c):n},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:bx(+t),c):r},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(r)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:bx(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c},Hx=function(t,e){return et?1:e>=t?0:NaN},Vx=function(t){return t},Gx=function(){var t=Vx,e=Hx,n=null,r=bx(0),i=bx(Mx),a=bx(0);function o(o){var s,c,u,l,h,f=o.length,d=0,p=new Array(f),y=new Array(f),g=+r.apply(this,arguments),m=Math.min(Mx,Math.max(-Mx,i.apply(this,arguments)-g)),v=Math.min(Math.abs(m)/f,a.apply(this,arguments)),b=v*(m<0?-1:1);for(s=0;s0&&(d+=h);for(null!=e?p.sort((function(t,n){return e(y[t],y[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(m-f*b)/d:0;s0?h*u:0)+b,y[c]={data:o[c],index:s,value:h,startAngle:g,endAngle:l,padAngle:v};return y}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:bx(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:bx(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:bx(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:bx(+t),o):a},o},Xx=Kx(zx);function Zx(t){this._curve=t}function Kx(t){function e(e){return new Zx(t(e))}return e._curve=t,e}function Qx(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(Kx(t)):e()._curve},t}Zx.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var Jx=function(){return Qx(qx().curve(Xx))},t_=function(){var t=Wx().curve(Xx),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Qx(n())},delete t.lineX0,t.lineEndAngle=function(){return Qx(r())},delete t.lineX1,t.lineInnerRadius=function(){return Qx(i())},delete t.lineY0,t.lineOuterRadius=function(){return Qx(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(Kx(t)):e()._curve},t},e_=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},n_=Array.prototype.slice;function r_(t){return t.source}function i_(t){return t.target}function a_(t){var e=r_,n=i_,r=Ux,i=$x,a=null;function o(){var o,s=n_.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=$i()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=u,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:bx(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:bx(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function o_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function s_(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function c_(t,e,n,r,i){var a=e_(e,n),o=e_(e,n=(n+i)/2),s=e_(r,n),c=e_(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function u_(){return a_(o_)}function l_(){return a_(s_)}function h_(){var t=a_(c_);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var f_={draw:function(t,e){var n=Math.sqrt(e/Sx);t.moveTo(n,0),t.arc(0,0,n,0,Mx)}},d_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},p_=Math.sqrt(1/3),y_=2*p_,g_={draw:function(t,e){var n=Math.sqrt(e/y_),r=n*p_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},m_=Math.sin(Sx/10)/Math.sin(7*Sx/10),v_=Math.sin(Mx/10)*m_,b_=-Math.cos(Mx/10)*m_,x_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=v_*n,i=b_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=Mx*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},__={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},k_=Math.sqrt(3),w_={draw:function(t,e){var n=-Math.sqrt(e/(3*k_));t.moveTo(0,2*n),t.lineTo(-k_*n,-n),t.lineTo(k_*n,-n),t.closePath()}},T_=Math.sqrt(3)/2,E_=1/Math.sqrt(12),C_=3*(E_/2+1),S_={draw:function(t,e){var n=Math.sqrt(e/C_),r=n/2,i=n*E_,a=r,o=n*E_+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(-.5*r-T_*i,T_*r+-.5*i),t.lineTo(-.5*a-T_*o,T_*a+-.5*o),t.lineTo(-.5*s-T_*c,T_*s+-.5*c),t.lineTo(-.5*r+T_*i,-.5*i-T_*r),t.lineTo(-.5*a+T_*o,-.5*o-T_*a),t.lineTo(-.5*s+T_*c,-.5*c-T_*s),t.closePath()}},A_=[f_,d_,g_,__,x_,w_,S_],M_=function(){var t=bx(f_),e=bx(64),n=null;function r(){var r;if(n||(n=r=$i()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:bx(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:bx(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},O_=function(){};function N_(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function B_(t){this._context=t}B_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:N_(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:N_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var D_=function(t){return new B_(t)};function L_(t){this._context=t}L_.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:N_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var I_=function(t){return new L_(t)};function R_(t){this._context=t}R_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:N_(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var F_=function(t){return new R_(t)};function P_(t,e){this._basis=new B_(t),this._beta=e}P_.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var j_=function t(e){function n(t){return 1===e?new B_(t):new P_(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Y_(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function z_(t,e){this._context=t,this._k=(1-e)/6}z_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Y_(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Y_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var U_=function t(e){function n(t){return new z_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function $_(t,e){this._context=t,this._k=(1-e)/6}$_.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Y_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var q_=function t(e){function n(t){return new $_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function W_(t,e){this._context=t,this._k=(1-e)/6}W_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Y_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var H_=function t(e){function n(t){return new W_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function V_(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>1e-12){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>1e-12){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function G_(t,e){this._context=t,this._alpha=e}G_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:V_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var X_=function t(e){function n(t){return e?new G_(t,e):new z_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Z_(t,e){this._context=t,this._alpha=e}Z_.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:V_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var K_=function t(e){function n(t){return e?new Z_(t,e):new $_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Q_(t,e){this._context=t,this._alpha=e}Q_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:V_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var J_=function t(e){function n(t){return e?new Q_(t,e):new W_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function tk(t){this._context=t}tk.prototype={areaStart:O_,areaEnd:O_,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var ek=function(t){return new tk(t)};function nk(t){return t<0?-1:1}function rk(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(nk(a)+nk(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function ik(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function ak(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function ok(t){this._context=t}function sk(t){this._context=new ck(t)}function ck(t){this._context=t}function uk(t){return new ok(t)}function lk(t){return new sk(t)}function hk(t){this._context=t}function fk(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var yk=function(t){return new pk(t,.5)};function gk(t){return new pk(t,0)}function mk(t){return new pk(t,1)}var vk=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a=0;)n[e]=e;return n};function xk(t,e){return t[e]}var _k=function(){var t=bx([]),e=bk,n=vk,r=xk;function i(i){var a,o,s=t.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(a=0;a0){for(var n,r,i,a=0,o=t[0].length;a0)for(var n,r,i,a,o,s,c=0,u=t[e[0]].length;c0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},Tk=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;oa&&(a=e,r=n);return r}var Ak=function(t){var e=t.map(Mk);return bk(t).sort((function(t,n){return e[t]-e[n]}))};function Mk(t){for(var e,n=0,r=-1,i=t.length;++r0)){if(a/=f,f<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>l&&(l=a)}else if(d>0){if(a0||h<1)||(l>0&&(t[0]=[c+l*f,u+l*d]),h<1&&(t[1]=[c+h*f,u+h*d]),!0)}}}}}function Xk(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,h=u[0],f=u[1],d=l[0],p=l[1],y=(h+d)/2,g=(f+p)/2;if(p===f){if(y=r)return;if(h>d){if(c){if(c[1]>=i)return}else c=[y,n];a=[y,i]}else{if(c){if(c[1]1)if(h>d){if(c){if(c[1]>=i)return}else c=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(c){if(c[1]=r)return}else c=[e,o*e+s];a=[r,o*r+s]}else{if(c){if(c[0]=-mw)){var d=c*c+u*u,p=l*l+h*h,y=(h*d-u*p)/f,g=(c*p-l*d)/f,m=tw.pop()||new ew;m.arc=t,m.site=i,m.x=y+o,m.y=(m.cy=g+s)+Math.sqrt(y*y+g*g),t.circle=m;for(var v=null,b=pw._;b;)if(m.ygw)s=s.L;else{if(!((i=a-hw(s,o))>gw)){r>-gw?(e=s.P,n=s):i>-gw?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){dw[t.index]={site:t,halfedges:[]}}(t);var c=ow(t);if(fw.insert(e,c),e||n){if(e===n)return rw(e),n=ow(e.site),fw.insert(c,n),c.edge=n.edge=Wk(e.site,c.site),nw(e),void nw(n);if(n){rw(e),rw(n);var u=e.site,l=u[0],h=u[1],f=t[0]-l,d=t[1]-h,p=n.site,y=p[0]-l,g=p[1]-h,m=2*(f*g-d*y),v=f*f+d*d,b=y*y+g*g,x=[(g*v-d*b)/m+l,(f*b-y*v)/m+h];Vk(n.edge,u,p,x),c.edge=Wk(u,t,null,x),n.edge=Wk(t,p,null,x),nw(e),nw(n)}else c.edge=Wk(e.site,c.site)}}function lw(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-r,h=1/a-1/u,f=l/u;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*u)-c+u/2+i-a/2)))/h+r:(r+s)/2}function hw(t,e){var n=t.N;if(n)return lw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var fw,dw,pw,yw,gw=1e-6,mw=1e-12;function vw(t,e){return e[1]-t[1]||e[0]-t[0]}function bw(t,e){var n,r,i,a=t.sort(vw).pop();for(yw=[],dw=new Array(t.length),fw=new qk,pw=new qk;;)if(i=Jk,a&&(!i||a[1]gw||Math.abs(i[0][1]-i[1][1])>gw)||delete yw[a]}(o,s,c,u),function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g=dw.length,m=!0;for(i=0;igw||Math.abs(y-f)>gw)&&(c.splice(s,0,yw.push(Hk(o,d,Math.abs(p-t)gw?[t,Math.abs(h-t)gw?[Math.abs(f-r)gw?[n,Math.abs(h-n)gw?[Math.abs(f-e)=s)return null;var c=t-i.site[0],u=e-i.site[1],l=c*c+u*u;do{i=a.cells[r=o],o=null,i.halfedges.forEach((function(n){var r=a.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=t-s[0],u=e-s[1],h=c*c+u*u;hr?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var Lw=function(){var t,e,n=Aw,r=Mw,i=Dw,a=Nw,o=Bw,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=dp,h=ht("start","zoom","end"),f=0;function d(t){t.property("__zoom",Ow).on("wheel.zoom",x).on("mousedown.zoom",_).on("dblclick.zoom",k).filter(o).on("touchstart.zoom",w).on("touchmove.zoom",T).on("touchend.zoom touchcancel.zoom",E).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new ww(e,t.x,t.y)}function y(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new ww(t.k,r,i)}function g(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function m(t,e,n){t.on("start.zoom",(function(){v(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){v(this,arguments).end()})).tween("zoom",(function(){var t=this,i=arguments,a=v(t,i),o=r.apply(t,i),s=null==n?g(o):"function"==typeof n?n.apply(t,i):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,h="function"==typeof e?e.apply(t,i):e,f=l(u.invert(s).concat(c/u.k),h.invert(s).concat(c/h.k));return function(t){if(1===t)t=h;else{var e=f(t),n=c/e[2];t=new ww(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function v(t,e,n){return!n&&t.__zooming||new b(t,e)}function b(t,e){this.that=t,this.args=e,this.active=0,this.extent=r.apply(t,e),this.taps=0}function x(){if(n.apply(this,arguments)){var t=v(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Dn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[o,e.invert(o)],sr(this),t.start()}Sw(),t.wheel=setTimeout(u,150),t.zoom("mouse",i(y(p(e,r),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function _(){if(!e&&n.apply(this,arguments)){var t=v(this,arguments,!0),r=we(ue.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Dn(this),o=ue.clientX,s=ue.clientY;Ce(ue.view),Cw(),t.mouse=[a,this.__zoom.invert(a)],sr(this),t.start()}function u(){if(Sw(),!t.moved){var e=ue.clientX-o,n=ue.clientY-s;t.moved=e*e+n*n>f}t.zoom("mouse",i(y(t.that.__zoom,t.mouse[0]=Dn(t.that),t.mouse[1]),t.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),Se(ue.view,t.moved),Sw(),t.end()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=Dn(this),a=t.invert(e),o=t.k*(ue.shiftKey?.5:2),s=i(y(p(t,o),e,a),r.apply(this,arguments),c);Sw(),u>0?we(this).transition().duration(u).call(m,s,e):we(this).call(d.transform,s)}}function w(){if(n.apply(this,arguments)){var e,r,i,a,o=ue.touches,s=o.length,c=v(this,arguments,ue.changedTouches.length===s);for(Cw(),r=0;rh&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),58;case 1:return this.begin("type_directive"),59;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),61;case 4:return 60;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return e.yytext=e.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 56;case 44:return 57;case 45:return 46;case 46:return 47;case 47:return 5;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){var r=n(203);t.exports={Graph:r.Graph,json:n(306),alg:n(307),version:r.version}},function(t,e,n){var r;try{r={cloneDeep:n(318),constant:n(88),defaults:n(154),each:n(89),filter:n(128),find:n(319),flatten:n(156),forEach:n(126),forIn:n(326),has:n(94),isUndefined:n(139),last:n(327),map:n(140),mapValues:n(328),max:n(329),merge:n(331),min:n(336),minBy:n(337),now:n(338),pick:n(161),range:n(162),reduce:n(142),sortBy:n(345),uniqueId:n(163),values:n(147),zipObject:n(350)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i=n(178),a=n(179),o=n(180),s={format:{keyword:i.default,hex:r.default,rgb:a.default,rgba:a.default,hsl:o.default,hsla:o.default},parse:function(t){if("string"!=typeof t)return t;var e=r.default.parse(t)||a.default.parse(t)||o.default.parse(t)||i.default.parse(t);if(e)return e;throw new Error('Unsupported color format: "'+t+'"')},stringify:function(t){return!t.changed&&t.color?t.color:t.type.is(2)||void 0===t.data.r?o.default.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?a.default.stringify(t):r.default.stringify(t)}};e.default=s},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){ /** * @license * Copyright (c) 2012-2013 Chris Pettitt @@ -21,12 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -t.exports={graphlib:n(312),dagre:n(154),intersect:n(369),render:n(371),util:n(14),version:n(383)}},function(t,e,n){"use strict";var r=n(4),i=n(20).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=u*o/s,r=u):(o<0&&(c=-c),n=c,r=c*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},function(t,e,n){t.exports={graphlib:n(20),layout:n(313),debug:n(367),util:{time:n(8).time,notime:n(8).notime},version:n(368)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(173),i=n(174),a=n(175),o={channel:r.default,lang:i.default,unit:a.default};e.default=o},function(t,e){var n,r,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var c,u=[],l=!1,h=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(c=u,u=[];++h1)for(var n=1;nh&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},N={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),13;case 1:return this.begin("type_directive"),14;case 2:return this.popState(),this.begin("arg_directive"),11;case 3:return this.popState(),this.popState(),16;case 4:return 15;case 5:case 6:break;case 7:return 10;case 8:break;case 9:case 10:return 17;case 11:return this.begin("struct"),34;case 12:return"EOF_IN_STRUCT";case 13:return"OPEN_IN_STRUCT";case 14:return this.popState(),36;case 15:break;case 16:return"MEMBER";case 17:return 32;case 18:return 58;case 19:return 51;case 20:return 52;case 21:return 54;case 22:return 37;case 23:return 38;case 24:this.begin("generic");break;case 25:this.popState();break;case 26:return"GENERICTYPE";case 27:this.begin("string");break;case 28:this.popState();break;case 29:return"STR";case 30:this.begin("bqstring");break;case 31:this.popState();break;case 32:return"BQUOTE_STR";case 33:this.begin("href");break;case 34:this.popState();break;case 35:return 57;case 36:this.begin("callback_name");break;case 37:this.popState();break;case 38:this.popState(),this.begin("callback_args");break;case 39:return 55;case 40:this.popState();break;case 41:return 56;case 42:case 43:case 44:case 45:return 53;case 46:case 47:return 46;case 48:case 49:return 48;case 50:return 47;case 51:return 45;case 52:return 49;case 53:return 50;case 54:return 26;case 55:return 33;case 56:return 70;case 57:return"DOT";case 58:return"PLUS";case 59:return 67;case 60:case 61:return"EQUALS";case 62:return 74;case 63:return"PUNCTUATION";case 64:return 73;case 65:return 72;case 66:return 69;case 67:return 19}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callback_args:{rules:[40,41],inclusive:!1},callback_name:{rules:[37,38,39],inclusive:!1},href:{rules:[34,35],inclusive:!1},struct:{rules:[12,13,14,15,16],inclusive:!1},generic:{rules:[25,26],inclusive:!1},bqstring:{rules:[31,32],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,17,18,19,20,21,22,23,24,27,30,33,36,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],inclusive:!0}}};function D(){this.yy={}}return B.lexer=N,D.prototype=B,B.Parser=D,new D}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(76),i=n(99),a=n(179),o=n(180),s=n(181),c={format:{keyword:a.default,hex:i.default,rgb:o.default,rgba:o.default,hsl:s.default,hsla:s.default},parse:function(t){if("string"!=typeof t)return t;var e=i.default.parse(t)||o.default.parse(t)||s.default.parse(t)||a.default.parse(t);if(e)return e;throw new Error('Unsupported color format: "'+t+'"')},stringify:function(t){return!t.changed&&t.color?t.color:t.type.is(r.TYPE.HSL)||void 0===t.data.r?s.default.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?o.default.stringify(t):i.default.stringify(t)}};e.default=c},function(t,e){},function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,i="/"===o.charAt(0))}return(i?"/":"")+(e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"))||"."},e.normalize=function(t){var a=e.isAbsolute(t),o="/"===i(t,-1);return(t=n(r(t.split("/"),(function(t){return!!t})),!a).join("/"))||a||(t="."),t&&o&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=function(t){"string"!=typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=o+1;break}}return-1===e||-1===r||0===a||1===a&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n(11))},function(t,e,n){var r=n(110),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,30],d=[1,23],p=[1,24],y=[1,25],g=[1,26],v=[1,27],m=[1,32],b=[1,33],x=[1,34],_=[1,35],k=[1,31],w=[1,38],E=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],T=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],C=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],S=[4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],A={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,openDirective:31,typeDirective:32,closeDirective:33,":":34,argDirective:35,direction_tb:36,direction_bt:37,direction_rl:38,direction_lr:39,eol:40,";":41,EDGE_STATE:42,left_of:43,right_of:44,open_directive:45,type_directive:46,arg_directive:47,close_directive:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",34:":",36:"direction_tb",37:"direction_bt",38:"direction_rl",39:"direction_lr",41:";",42:"EDGE_STATE",43:"left_of",44:"right_of",45:"open_directive",46:"type_directive",47:"arg_directive",48:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[40,1],[40,1],[11,1],[11,1],[28,1],[28,1],[31,1],[32,1],[35,1],[33,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 31:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 32:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 33:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 36:case 37:this.$=a[s];break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,31:6,45:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,31:6,45:i},{3:9,4:e,5:n,6:4,7:r,31:6,45:i},{3:10,4:e,5:n,6:4,7:r,31:6,45:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,36,37,38,39,42,45],a,{8:11}),{32:12,46:[1,13]},{46:[2,40]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:v,30:29,31:6,36:m,37:b,38:x,39:_,42:k,45:i},{33:36,34:[1,37],48:w},t([34,48],[2,41]),t(E,[2,6]),{6:28,10:39,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:v,30:29,31:6,36:m,37:b,38:x,39:_,42:k,45:i},t(E,[2,8]),t(E,[2,9]),t(E,[2,10],{12:[1,40],13:[1,41]}),t(E,[2,14]),{16:[1,42]},t(E,[2,16],{18:[1,43]}),{21:[1,44]},t(E,[2,20]),t(E,[2,21]),t(E,[2,22]),t(E,[2,23]),{28:45,29:[1,46],43:[1,47],44:[1,48]},t(E,[2,26]),t(E,[2,27]),t(T,[2,36]),t(T,[2,37]),t(E,[2,30]),t(E,[2,31]),t(E,[2,32]),t(E,[2,33]),t(C,[2,28]),{35:49,47:[1,50]},t(C,[2,43]),t(E,[2,7]),t(E,[2,11]),{11:51,22:f,42:k},t(E,[2,15]),t(S,a,{8:52}),{22:[1,53]},{22:[1,54]},{21:[1,55]},{22:[2,38]},{22:[2,39]},{33:56,48:w},{48:[2,42]},t(E,[2,12],{12:[1,57]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,58],20:h,22:f,23:d,24:p,25:y,26:g,27:v,30:29,31:6,36:m,37:b,38:x,39:_,42:k,45:i},t(E,[2,18],{18:[1,59]}),{29:[1,60]},{22:[1,61]},t(C,[2,29]),t(E,[2,13]),t(E,[2,17]),t(S,a,{8:62}),t(E,[2,24]),t(E,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,63],20:h,22:f,23:d,24:p,25:y,26:g,27:v,30:29,31:6,36:m,37:b,38:x,39:_,42:k,45:i},t(E,[2,19])],defaultActions:{7:[2,40],8:[2,1],9:[2,2],10:[2,3],47:[2,38],48:[2,39],50:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 36;case 1:return 37;case 2:return 38;case 3:return 39;case 4:return this.begin("open_directive"),45;case 5:return this.begin("type_directive"),46;case 6:return this.popState(),this.begin("arg_directive"),34;case 7:return this.popState(),this.popState(),48;case 8:return 47;case 9:case 10:break;case 11:return 5;case 12:case 13:case 14:case 15:break;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:this.popState();break;case 19:this.pushState("STATE");break;case 20:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 21:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 22:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 23:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 24:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 25:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:this.begin("STATE_STRING");break;case 31:return this.popState(),this.pushState("STATE_ID"),"AS";case 32:return this.popState(),"ID";case 33:this.popState();break;case 34:return"STATE_DESCR";case 35:return 17;case 36:this.popState();break;case 37:return this.popState(),this.pushState("struct"),18;case 38:return this.popState(),19;case 39:break;case 40:return this.begin("NOTE"),27;case 41:return this.popState(),this.pushState("NOTE_ID"),43;case 42:return this.popState(),this.pushState("NOTE_ID"),44;case 43:this.popState(),this.pushState("FLOATING_NOTE");break;case 44:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 45:break;case 46:return"NOTE_TEXT";case 47:return this.popState(),"ID";case 48:return this.popState(),this.pushState("NOTE_TEXT"),22;case 49:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 50:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 51:case 52:return 7;case 53:return 14;case 54:return 42;case 55:return 22;case 56:return e.yytext=e.yytext.trim(),12;case 57:return 13;case 58:return 26;case 59:return 5;case 60:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,19,26,27,28,29,38,39,40,54,55,56,57,58],inclusive:!1},FLOATING_NOTE_ID:{rules:[47],inclusive:!1},FLOATING_NOTE:{rules:[44,45,46],inclusive:!1},NOTE_TEXT:{rules:[49,50],inclusive:!1},NOTE_ID:{rules:[48],inclusive:!1},NOTE:{rules:[41,42,43],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[32],inclusive:!1},STATE_STRING:{rules:[33,34],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,20,21,22,23,24,25,30,31,35,36,37],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,37,40,51,52,53,54,55,56,57,59,60],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){(function(t){t.exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n>>0,r=0;rgt(t)?(a=t+1,s-gt(t)):(a=t,s),{year:a,dayOfYear:o}}function It(t,e,n){var r,i,a=Dt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Rt(i=t.year()-1,e,n):o>Rt(t.year(),e,n)?(r=o-Rt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Rt(t,e,n){var r=Dt(t,e,n),i=Dt(t+1,e,n);return(gt(t)-r+i)/7}function Ft(t,e){return t.slice(e,7).concat(t.slice(0,e))}q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),P("week",5),P("isoWeek",5),lt("w",K),lt("ww",K,G),lt("W",K),lt("WW",K,G),yt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),q("d",0,"do","day"),q("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),q("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),q("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),P("day",11),P("weekday",11),P("isoWeekday",11),lt("d",K),lt("e",K),lt("E",K),lt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),lt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),lt("dddd",(function(t,e){return e.weekdaysRegex(t)})),yt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),yt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var Pt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),jt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Yt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zt=ct,Ut=ct,$t=ct;function qt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],u=[];for(e=0;e<7;e++)n=d([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),u.push(r),u.push(i),u.push(a);for(o.sort(t),s.sort(t),c.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),c[e]=ft(c[e]),u[e]=ft(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Wt(){return this.hours()%12||12}function Vt(t,e){q(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Ht(t,e){return e._meridiemParse}q("H",["HH",2],0,"hour"),q("h",["hh",2],0,Wt),q("k",["kk",2],0,(function(){return this.hours()||24})),q("hmm",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)})),q("hmmss",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)})),q("Hmm",0,0,(function(){return""+this.hours()+j(this.minutes(),2)})),q("Hmmss",0,0,(function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)})),Vt("a",!0),Vt("A",!1),L("hour","h"),P("hour",13),lt("a",Ht),lt("A",Ht),lt("H",K),lt("h",K),lt("k",K),lt("HH",K,G),lt("hh",K,G),lt("kk",K,G),lt("hmm",J),lt("hmmss",tt),lt("Hmm",J),lt("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var Gt,Xt=xt("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Tt,monthsShort:Ct,week:{dow:0,doy:6},weekdays:Pt,weekdaysMin:Yt,weekdaysShort:jt,meridiemParse:/[ap]\.?m?\.?/i},Qt={},Kt={};function Jt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Qt[e]&&void 0!==t&&t&&t.exports)try{r=Gt._abbr,n(198)("./"+e),ee(r)}catch(e){}return Qt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?Gt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Gt._abbr}function ne(t,e){if(null===e)return delete Qt[t],null;var n,r=Zt;if(e.abbr=t,null!=Qt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Qt[t]._config;else if(null!=e.parentLocale)if(null!=Qt[e.parentLocale])r=Qt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Kt[e.parentLocale]||(Kt[e.parentLocale]=[]),Kt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Qt[t]=new N(B(r,e)),Kt[t]&&Kt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Qt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Gt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a=e&&E(i,n,!0)>=e-1)break;e--}a++}return Gt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11wt(n[0],n[1])?2:n[3]<0||24Rt(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>gt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Nt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Nt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ue=/Z|[+-]\d\d(?::?\d\d)?/,le=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fe=/^\/?Date\((\-?\d+)/i;function de(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=le.length;en.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=De,on.isUTC=De,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Je),on.months=C("months accessor is deprecated. Use month instead",At),on.years=C("years accessor is deprecated. Use year instead",bt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(m(t,this),(t=me(t))._a){var e=t._isUTC?d(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&0h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},v={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),33;case 1:return this.begin("type_directive"),34;case 2:return this.popState(),this.begin("arg_directive"),26;case 3:return this.popState(),this.popState(),36;case 4:return 35;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 31;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 29;case 19:this.popState();break;case 20:return 30;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 28;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return 17;case 31:return"date";case 32:return 18;case 33:return 19;case 34:return 21;case 35:return 22;case 36:return 26;case 37:return 7;case 38:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}};function m(){this.yy={}}return g.lexer=v,m.prototype=g,g.Parser=m,new m}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){var r=n(38),i=n(81);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},function(t,e,n){var r=n(257),i=n(267),a=n(35),o=n(5),s=n(274);t.exports=function(t){return"function"==typeof t?t:null==t?a:"object"==typeof t?o(t)?i(t[0],t[1]):r(t):s(t)}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[1,20,21,22,23,38,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],o=[2,10],s=[1,20],c=[1,21],u=[1,22],l=[1,23],h=[1,30],f=[1,59],d=[1,33],p=[1,34],y=[1,35],g=[1,36],v=[1,37],m=[1,53],b=[1,48],x=[1,50],_=[1,45],k=[1,49],w=[1,52],E=[1,56],T=[1,57],C=[1,38],S=[1,39],A=[1,40],M=[1,41],O=[1,58],B=[1,47],N=[1,51],D=[1,54],L=[1,55],I=[1,46],R=[1,62],F=[1,67],P=[1,20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],j=[1,71],Y=[1,70],z=[1,72],U=[20,21,23,70,71],$=[1,93],q=[1,98],W=[1,95],V=[1,100],H=[1,103],G=[1,101],X=[1,102],Z=[1,96],Q=[1,108],K=[1,107],J=[1,97],tt=[1,99],et=[1,104],nt=[1,105],rt=[1,106],it=[1,109],at=[20,21,22,23,70,71],ot=[20,21,22,23,48,70,71],st=[20,21,22,23,40,47,48,50,52,54,56,58,60,62,63,65,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ct=[20,21,23],ut=[20,21,23,47,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],lt=[1,12,20,21,22,23,24,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],ht=[47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ft=[1,141],dt=[1,149],pt=[1,150],yt=[1,151],gt=[1,152],vt=[1,136],mt=[1,137],bt=[1,133],xt=[1,144],_t=[1,145],kt=[1,146],wt=[1,147],Et=[1,148],Tt=[1,153],Ct=[1,154],St=[1,139],At=[1,142],Mt=[1,138],Ot=[1,135],Bt=[20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],Nt=[1,157],Dt=[20,21,22,23,26,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],Lt=[20,21,22,23,24,26,38,40,41,42,47,51,53,55,57,59,61,62,64,66,70,71,72,76,77,78,79,80,81,82,85,95,96,99,100,101,103,104,105,106,114,115,116,117,118,119],It=[12,21,22,24],Rt=[22,96],Ft=[1,238],Pt=[1,242],jt=[1,239],Yt=[1,236],zt=[1,233],Ut=[1,234],$t=[1,235],qt=[1,237],Wt=[1,240],Vt=[1,241],Ht=[1,243],Gt=[1,260],Xt=[20,21,23,96],Zt=[20,21,22,23,76,92,95,96,99,100,101,102,103,104,105],Qt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,link:44,node:45,vertex:46,AMP:47,STYLE_SEPARATOR:48,idString:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,CYLINDERSTART:58,CYLINDEREND:59,DIAMOND_START:60,DIAMOND_STOP:61,TAGEND:62,TRAPSTART:63,TRAPEND:64,INVTRAPSTART:65,INVTRAPEND:66,linkStatement:67,arrowText:68,TESTSTR:69,START_LINK:70,LINK:71,PIPE:72,textToken:73,STR:74,keywords:75,STYLE:76,LINKSTYLE:77,CLASSDEF:78,CLASS:79,CLICK:80,DOWN:81,UP:82,textNoTags:83,textNoTagsToken:84,DEFAULT:85,stylesOpt:86,alphaNum:87,CALLBACKNAME:88,CALLBACKARGS:89,HREF:90,LINK_TARGET:91,HEX:92,numList:93,INTERPOLATE:94,NUM:95,COMMA:96,style:97,styleComponent:98,ALPHA:99,COLON:100,MINUS:101,UNIT:102,BRKT:103,DOT:104,PCT:105,TAGSTART:106,alphaNumToken:107,idStringToken:108,alphaNumStatement:109,direction_tb:110,direction_bt:111,direction_rl:112,direction_lr:113,PUNCTUATION:114,UNICODE_TEXT:115,PLUS:116,EQUALS:117,MULT:118,UNDERSCORE:119,graphCodeTokens:120,ARROW_CROSS:121,ARROW_POINT:122,ARROW_CIRCLE:123,ARROW_OPEN:124,QUOTE:125,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",47:"AMP",48:"STYLE_SEPARATOR",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"CYLINDERSTART",59:"CYLINDEREND",60:"DIAMOND_START",61:"DIAMOND_STOP",62:"TAGEND",63:"TRAPSTART",64:"TRAPEND",65:"INVTRAPSTART",66:"INVTRAPEND",69:"TESTSTR",70:"START_LINK",71:"LINK",72:"PIPE",74:"STR",76:"STYLE",77:"LINKSTYLE",78:"CLASSDEF",79:"CLASS",80:"CLICK",81:"DOWN",82:"UP",85:"DEFAULT",88:"CALLBACKNAME",89:"CALLBACKARGS",90:"HREF",91:"LINK_TARGET",92:"HEX",94:"INTERPOLATE",95:"NUM",96:"COMMA",99:"ALPHA",100:"COLON",101:"MINUS",102:"UNIT",103:"BRKT",104:"DOT",105:"PCT",106:"TAGSTART",110:"direction_tb",111:"direction_bt",112:"direction_rl",113:"direction_lr",114:"PUNCTUATION",115:"UNICODE_TEXT",116:"PLUS",117:"EQUALS",118:"MULT",119:"UNDERSCORE",121:"ARROW_CROSS",122:"ARROW_POINT",123:"ARROW_CIRCLE",124:"ARROW_OPEN",125:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[45,1],[45,5],[45,3],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,1],[44,2],[44,3],[44,3],[44,1],[44,3],[67,1],[68,3],[39,1],[39,2],[39,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[83,1],[83,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[93,1],[93,3],[86,1],[86,3],[97,1],[97,2],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[84,1],[84,1],[84,1],[84,1],[49,1],[49,2],[87,1],[87,2],[109,1],[109,1],[109,1],[109,1],[43,1],[43,1],[43,1],[43,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 77:case 79:case 91:case 147:case 149:case 150:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 48:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 49:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 50:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 51:this.$={stmt:a[s],nodes:a[s]};break;case 52:this.$=[a[s]];break;case 53:this.$=a[s-4].concat(a[s]);break;case 54:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 55:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 56:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 57:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 60:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 63:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 64:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 68:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 69:this.$=a[s],r.addVertex(a[s]);break;case 70:a[s-1].text=a[s],this.$=a[s-1];break;case 71:case 72:a[s-2].text=a[s-1],this.$=a[s-2];break;case 73:this.$=a[s];break;case 74:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 75:c=r.destructLink(a[s]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 76:this.$=a[s-1];break;case 78:case 92:case 148:this.$=a[s-1]+""+a[s];break;case 93:case 94:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 95:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 96:case 104:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 97:case 105:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 98:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 99:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 100:case 106:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 101:case 107:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 102:case 108:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 103:case 109:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 110:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 111:case 113:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 112:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 114:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 115:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 116:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 117:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 118:case 120:this.$=[a[s]];break;case 119:case 121:a[s-2].push(a[s]),this.$=a[s-2];break;case 123:this.$=a[s-1]+a[s];break;case 145:this.$=a[s];break;case 146:this.$=a[s-1]+""+a[s];break;case 151:this.$="v";break;case 152:this.$="-";break;case 153:this.$={stmt:"dir",value:"TB"};break;case 154:this.$={stmt:"dir",value:"BT"};break;case 155:this.$={stmt:"dir",value:"RL"};break;case 156:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:v,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:B,116:N,117:D,118:L,119:I},{8:60,10:[1,61],15:R},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,64],21:[1,65],22:F,27:63,30:66},t(P,[2,11]),t(P,[2,12]),t(P,[2,13]),t(P,[2,14]),t(P,[2,15]),t(P,[2,16]),{9:68,20:j,21:Y,23:z,44:69,67:73,70:[1,74],71:[1,75]},{9:76,20:j,21:Y,23:z},{9:77,20:j,21:Y,23:z},{9:78,20:j,21:Y,23:z},{9:79,20:j,21:Y,23:z},{9:80,20:j,21:Y,23:z},{9:82,20:j,21:Y,22:[1,81],23:z},t(P,[2,44]),t(U,[2,51],{30:83,22:F}),{22:[1,84]},{22:[1,85]},{22:[1,86]},{22:[1,87]},{26:$,47:q,74:[1,91],81:W,87:90,88:[1,88],90:[1,89],95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(P,[2,153]),t(P,[2,154]),t(P,[2,155]),t(P,[2,156]),t(at,[2,52],{48:[1,110]}),t(ot,[2,69],{108:121,40:[1,111],47:f,50:[1,112],52:[1,113],54:[1,114],56:[1,115],58:[1,116],60:[1,117],62:[1,118],63:[1,119],65:[1,120],81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,114:O,115:B,116:N,117:D,118:L,119:I}),t(st,[2,145]),t(st,[2,170]),t(st,[2,171]),t(st,[2,172]),t(st,[2,173]),t(st,[2,174]),t(st,[2,175]),t(st,[2,176]),t(st,[2,177]),t(st,[2,178]),t(st,[2,179]),t(st,[2,180]),t(st,[2,181]),t(st,[2,182]),t(st,[2,183]),t(st,[2,184]),{9:122,20:j,21:Y,23:z},{11:123,14:[1,124]},t(ct,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,125]},t(ut,[2,34],{30:126,22:F}),t(P,[2,35]),{45:127,46:42,47:f,49:43,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,114:O,115:B,116:N,117:D,118:L,119:I},t(lt,[2,45]),t(lt,[2,46]),t(lt,[2,47]),t(ht,[2,73],{68:128,69:[1,129],72:[1,130]}),{22:ft,24:dt,26:pt,38:yt,39:131,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t([47,69,72,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,75]),t(P,[2,36]),t(P,[2,37]),t(P,[2,38]),t(P,[2,39]),t(P,[2,40]),{22:ft,24:dt,26:pt,38:yt,39:155,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Bt,o,{17:156}),t(U,[2,50],{47:Nt}),{26:$,47:q,81:W,87:158,92:[1,159],95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{85:[1,160],93:161,95:[1,162]},{26:$,47:q,81:W,85:[1,163],87:164,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:165,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,96],{22:[1,166],89:[1,167]}),t(ct,[2,100],{22:[1,168]}),t(ct,[2,104],{107:94,109:170,22:[1,169],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,106],{22:[1,171]}),t(Dt,[2,147]),t(Dt,[2,149]),t(Dt,[2,150]),t(Dt,[2,151]),t(Dt,[2,152]),t(Lt,[2,157]),t(Lt,[2,158]),t(Lt,[2,159]),t(Lt,[2,160]),t(Lt,[2,161]),t(Lt,[2,162]),t(Lt,[2,163]),t(Lt,[2,164]),t(Lt,[2,165]),t(Lt,[2,166]),t(Lt,[2,167]),t(Lt,[2,168]),t(Lt,[2,169]),{47:f,49:172,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,114:O,115:B,116:N,117:D,118:L,119:I},{22:ft,24:dt,26:pt,38:yt,39:173,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:175,42:gt,47:q,50:[1,174],62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:176,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:177,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:178,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:179,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:180,42:gt,47:q,60:[1,181],62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:182,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:183,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:184,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(st,[2,146]),t(It,[2,3]),{8:185,15:R},{15:[2,7]},t(a,[2,28]),t(ut,[2,33]),t(U,[2,48],{30:186,22:F}),t(ht,[2,70],{22:[1,187]}),{22:[1,188]},{22:ft,24:dt,26:pt,38:yt,39:189,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:vt,70:mt,71:[1,190],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Lt,[2,77]),t(Lt,[2,79]),t(Lt,[2,135]),t(Lt,[2,136]),t(Lt,[2,137]),t(Lt,[2,138]),t(Lt,[2,139]),t(Lt,[2,140]),t(Lt,[2,141]),t(Lt,[2,142]),t(Lt,[2,143]),t(Lt,[2,144]),t(Lt,[2,80]),t(Lt,[2,81]),t(Lt,[2,82]),t(Lt,[2,83]),t(Lt,[2,84]),t(Lt,[2,85]),t(Lt,[2,86]),t(Lt,[2,87]),t(Lt,[2,88]),t(Lt,[2,89]),t(Lt,[2,90]),{9:193,20:j,21:Y,22:ft,23:z,24:dt,26:pt,38:yt,40:[1,192],42:gt,47:q,62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,194],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:v,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:B,116:N,117:D,118:L,119:I},{22:F,30:195},{22:[1,196],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,197]},{22:[1,198]},{22:[1,199],96:[1,200]},t(Rt,[2,118]),{22:[1,201]},{22:[1,202],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,203],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{74:[1,204]},t(ct,[2,98],{22:[1,205]}),{74:[1,206],91:[1,207]},{74:[1,208]},t(Dt,[2,148]),{74:[1,209],91:[1,210]},t(at,[2,54],{108:121,47:f,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,114:O,115:B,116:N,117:D,118:L,119:I}),{22:ft,24:dt,26:pt,38:yt,41:[1,211],42:gt,47:q,62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:212,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,213],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,53:[1,214],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,55:[1,215],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,57:[1,216],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,59:[1,217],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,218],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:219,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,41:[1,220],42:gt,47:q,62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:vt,64:[1,221],66:[1,222],70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:vt,64:[1,224],66:[1,223],70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{9:225,20:j,21:Y,23:z},t(U,[2,49],{47:Nt}),t(ht,[2,72]),t(ht,[2,71]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:vt,70:mt,72:[1,226],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ht,[2,74]),t(Lt,[2,78]),{22:ft,24:dt,26:pt,38:yt,39:227,42:gt,47:q,62:vt,70:mt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Bt,o,{17:228}),t(P,[2,43]),{46:229,47:f,49:43,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,114:O,115:B,116:N,117:D,118:L,119:I},{22:Ft,76:Pt,86:230,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:244,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:245,92:jt,94:[1,246],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:247,92:jt,94:[1,248],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{95:[1,249]},{22:Ft,76:Pt,86:250,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:251,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{26:$,47:q,81:W,87:252,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,97]),{74:[1,253]},t(ct,[2,101],{22:[1,254]}),t(ct,[2,102]),t(ct,[2,105]),t(ct,[2,107],{22:[1,255]}),t(ct,[2,108]),t(ot,[2,55]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,256],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,61]),t(ot,[2,57]),t(ot,[2,58]),t(ot,[2,59]),t(ot,[2,60]),t(ot,[2,62]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,257],62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,64]),t(ot,[2,65]),t(ot,[2,67]),t(ot,[2,66]),t(ot,[2,68]),t(It,[2,4]),t([22,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,76]),{22:ft,24:dt,26:pt,38:yt,41:[1,258],42:gt,47:q,62:vt,70:mt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Et,81:Tt,82:Ct,84:134,85:St,95:V,96:H,99:G,100:X,101:At,103:Q,104:K,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,259],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:v,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:B,116:N,117:D,118:L,119:I},t(at,[2,53]),t(ct,[2,110],{96:Gt}),t(Xt,[2,120],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht}),t(Zt,[2,122]),t(Zt,[2,124]),t(Zt,[2,125]),t(Zt,[2,126]),t(Zt,[2,127]),t(Zt,[2,128]),t(Zt,[2,129]),t(Zt,[2,130]),t(Zt,[2,131]),t(Zt,[2,132]),t(Zt,[2,133]),t(Zt,[2,134]),t(ct,[2,111],{96:Gt}),t(ct,[2,112],{96:Gt}),{22:[1,262]},t(ct,[2,113],{96:Gt}),{22:[1,263]},t(Rt,[2,119]),t(ct,[2,93],{96:Gt}),t(ct,[2,94],{96:Gt}),t(ct,[2,95],{107:94,109:170,26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,99]),{91:[1,264]},{91:[1,265]},{51:[1,266]},{61:[1,267]},{9:268,20:j,21:Y,23:z},t(P,[2,42]),{22:Ft,76:Pt,92:jt,95:Yt,97:269,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},t(Zt,[2,123]),{26:$,47:q,81:W,87:270,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:271,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,103]),t(ct,[2,109]),t(ot,[2,56]),t(ot,[2,63]),t(Bt,o,{17:272}),t(Xt,[2,121],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht}),t(ct,[2,116],{107:94,109:170,22:[1,273],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,117],{107:94,109:170,22:[1,274],26:$,47:q,81:W,95:V,96:H,99:G,100:X,101:Z,103:Q,104:K,114:J,115:tt,116:et,117:nt,118:rt,119:it}),{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,275],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:v,81:m,95:b,96:x,99:_,100:k,101:w,103:E,104:T,108:44,110:C,111:S,112:A,113:M,114:O,115:B,116:N,117:D,118:L,119:I},{22:Ft,76:Pt,86:276,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},{22:Ft,76:Pt,86:277,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Vt,105:Ht},t(P,[2,41]),t(ct,[2,114],{96:Gt}),t(ct,[2,115],{96:Gt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],124:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Kt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 76;case 11:return 85;case 12:return 77;case 13:return 94;case 14:return 78;case 15:return 79;case 16:this.begin("href");break;case 17:this.popState();break;case 18:return 90;case 19:this.begin("callbackname");break;case 20:this.popState();break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 88;case 23:this.popState();break;case 24:return 89;case 25:this.begin("click");break;case 26:this.popState();break;case 27:return 80;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 91;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 110;case 48:return 111;case 49:return 112;case 50:return 113;case 51:return 95;case 52:return 103;case 53:return 48;case 54:return 100;case 55:return 47;case 56:return 20;case 57:return 96;case 58:return 118;case 59:case 60:case 61:return 71;case 62:case 63:case 64:return 70;case 65:return 52;case 66:return 53;case 67:return 54;case 68:return 55;case 69:return 56;case 70:return 57;case 71:return 58;case 72:return 59;case 73:return 101;case 74:return 104;case 75:return 119;case 76:return 116;case 77:return 105;case 78:case 79:return 117;case 80:return 106;case 81:return 62;case 82:return 82;case 83:return"SEP";case 84:return 81;case 85:return 99;case 86:return 64;case 87:return 63;case 88:return 66;case 89:return 65;case 90:return 114;case 91:return 115;case 92:return 72;case 93:return 50;case 94:return 51;case 95:return 40;case 96:return 41;case 97:return 60;case 98:return 61;case 99:return 125;case 100:return 21;case 101:return 22;case 102:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102],inclusive:!0}}};function Jt(){this.yy={}}return Qt.lexer=Kt,Jt.prototype=Qt,Qt.Parser=Jt,new Jt}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(16);e.default=function(t,e){return r.default.lang.round(i.default.parse(t)[e])}},function(t,e,n){var r=n(113),i=n(83),a=n(25);t.exports=function(t){return a(t)?r(t):i(t)}},function(t,e,n){var r;if(!r)try{r=n(0)}catch(t){}r||(r=window.d3),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(16);e.default=function(t,e,n){var a=i.default.parse(t),o=a[e],s=r.default.channel.clamp[e](o+n);return o!==s&&(a[e]=s),i.default.stringify(a)}},function(t,e,n){var r=n(211),i=n(217);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(39),i=n(213),a=n(214),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},function(t,e){t.exports=function(t){return t}},function(t){t.exports=JSON.parse('{"name":"mermaid","version":"8.10.2","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build:development":"webpack --progress --colors","build:production":"yarn build:development -p --config webpack.config.prod.babel.js","build":"yarn build:development && yarn build:production","postbuild":"documentation build src/mermaidAPI.js src/config.js src/defaultConfig.js --shallow -f md --markdown-toc false > docs/Setup.md","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","d3":"^5.7.0","dagre":"^0.8.4","dagre-d3":"^0.6.4","entity-decode":"^2.0.2","graphlib":"^2.1.7","he":"^1.2.0","khroma":"^1.1.0","minify":"^4.1.1","moment-mini":"^2.22.1","stylis":"^3.5.2"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.8.4","@babel/register":"^7.0.0","@percy/cypress":"*","babel-core":"7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","cypress":"4.0.1","documentation":"^12.0.1","eslint":"^6.3.0","eslint-config-prettier":"^6.3.0","eslint-plugin-prettier":"^3.1.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^24.9.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^5.0.0","prettier":"^1.18.2","puppeteer":"^1.17.0","sass-loader":"^7.1.0","start-server-and-test":"^1.10.6","terser-webpack-plugin":"^2.2.2","webpack":"^4.41.2","webpack-bundle-analyzer":"^3.7.0","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]},"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(34),i=n(13);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(19).Symbol;t.exports=r},function(t,e,n){(function(t){var r=n(19),i=n(233),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(this,n(6)(t))},function(t,e,n){var r=n(113),i=n(237),a=n(25);t.exports=function(t){return a(t)?r(t,!0):i(t)}},function(t,e,n){var r=n(242),i=n(78),a=n(243),o=n(122),s=n(244),c=n(34),u=n(111),l=u(r),h=u(i),f=u(a),d=u(o),p=u(s),y=c;(r&&"[object DataView]"!=y(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=y(new i)||a&&"[object Promise]"!=y(a.resolve())||o&&"[object Set]"!=y(new o)||s&&"[object WeakMap]"!=y(new s))&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case h:return"[object Map]";case f:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return e}),t.exports=y},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r;try{r={defaults:n(155),each:n(88),isFunction:n(38),isPlainObject:n(159),pick:n(162),has:n(94),range:n(163),uniqueId:n(164)}}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,17],i=[2,10],a=[1,21],o=[1,22],s=[1,23],c=[1,24],u=[1,25],l=[1,26],h=[1,19],f=[1,27],d=[1,28],p=[1,31],y=[66,67],g=[5,8,14,35,36,37,38,39,40,48,55,57,66,67],v=[5,6,8,14,35,36,37,38,39,40,48,66,67],m=[1,51],b=[1,52],x=[1,53],_=[1,54],k=[1,55],w=[1,56],E=[1,57],T=[57,58],C=[1,69],S=[1,65],A=[1,66],M=[1,67],O=[1,68],B=[1,70],N=[1,74],D=[1,75],L=[1,72],I=[1,73],R=[5,8,14,35,36,37,38,39,40,48,66,67],F={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,open_directive:14,type_directive:15,arg_directive:16,close_directive:17,requirementDef:18,elementDef:19,relationshipDef:20,requirementType:21,requirementName:22,STRUCT_START:23,requirementBody:24,ID:25,COLONSEP:26,id:27,TEXT:28,text:29,RISK:30,riskLevel:31,VERIFYMTHD:32,verifyType:33,STRUCT_STOP:34,REQUIREMENT:35,FUNCTIONAL_REQUIREMENT:36,INTERFACE_REQUIREMENT:37,PERFORMANCE_REQUIREMENT:38,PHYSICAL_REQUIREMENT:39,DESIGN_CONSTRAINT:40,LOW_RISK:41,MED_RISK:42,HIGH_RISK:43,VERIFY_ANALYSIS:44,VERIFY_DEMONSTRATION:45,VERIFY_INSPECTION:46,VERIFY_TEST:47,ELEMENT:48,elementName:49,elementBody:50,TYPE:51,type:52,DOCREF:53,ref:54,END_ARROW_L:55,relationship:56,LINE:57,END_ARROW_R:58,CONTAINS:59,COPIES:60,DERIVES:61,SATISFIES:62,VERIFIES:63,REFINES:64,TRACES:65,unqString:66,qString:67,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"open_directive",15:"type_directive",16:"arg_directive",17:"close_directive",23:"STRUCT_START",25:"ID",26:"COLONSEP",28:"TEXT",30:"RISK",32:"VERIFYMTHD",34:"STRUCT_STOP",35:"REQUIREMENT",36:"FUNCTIONAL_REQUIREMENT",37:"INTERFACE_REQUIREMENT",38:"PERFORMANCE_REQUIREMENT",39:"PHYSICAL_REQUIREMENT",40:"DESIGN_CONSTRAINT",41:"LOW_RISK",42:"MED_RISK",43:"HIGH_RISK",44:"VERIFY_ANALYSIS",45:"VERIFY_DEMONSTRATION",46:"VERIFY_INSPECTION",47:"VERIFY_TEST",48:"ELEMENT",51:"TYPE",53:"DOCREF",55:"END_ARROW_L",57:"LINE",58:"END_ARROW_R",59:"CONTAINS",60:"COPIES",61:"DERIVES",62:"SATISFIES",63:"VERIFIES",64:"REFINES",65:"TRACES",66:"unqString",67:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[18,5],[24,5],[24,5],[24,5],[24,5],[24,2],[24,1],[21,1],[21,1],[21,1],[21,1],[21,1],[21,1],[31,1],[31,1],[31,1],[33,1],[33,1],[33,1],[33,1],[19,5],[50,5],[50,5],[50,2],[50,1],[20,5],[20,5],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[27,1],[27,1],[29,1],[29,1],[49,1],[49,1],[52,1],[52,1],[54,1],[54,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","pie");break;case 10:this.$=[];break;case 16:r.addRequirement(a[s-3],a[s-4]);break;case 17:r.setNewReqId(a[s-2]);break;case 18:r.setNewReqText(a[s-2]);break;case 19:r.setNewReqRisk(a[s-2]);break;case 20:r.setNewReqVerifyMethod(a[s-2]);break;case 23:this.$=r.RequirementType.REQUIREMENT;break;case 24:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 26:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 27:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 29:this.$=r.RiskLevel.LOW_RISK;break;case 30:this.$=r.RiskLevel.MED_RISK;break;case 31:this.$=r.RiskLevel.HIGH_RISK;break;case 32:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 33:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 34:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 35:this.$=r.VerifyType.VERIFY_TEST;break;case 36:r.addElement(a[s-3]);break;case 37:r.setNewElementType(a[s-2]);break;case 38:r.setNewElementDocRef(a[s-2]);break;case 41:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 42:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 43:this.$=r.Relationships.CONTAINS;break;case 44:this.$=r.Relationships.COPIES;break;case 45:this.$=r.Relationships.DERIVES;break;case 46:this.$=r.Relationships.SATISFIES;break;case 47:this.$=r.Relationships.VERIFIES;break;case 48:this.$=r.Relationships.REFINES;break;case 49:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n},{1:[3]},{3:7,4:2,5:[1,6],6:e,9:4,14:n},{5:[1,8]},{10:9,15:[1,10]},{15:[2,6]},{3:11,4:2,6:e,9:4,14:n},{1:[2,2]},{4:16,5:r,7:12,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{11:29,12:[1,30],17:p},t([12,17],[2,7]),{1:[2,1]},{8:[1,32]},{4:16,5:r,7:33,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:34,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:35,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:36,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:37,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{22:38,66:[1,39],67:[1,40]},{49:41,66:[1,42],67:[1,43]},{55:[1,44],57:[1,45]},t(y,[2,23]),t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(g,[2,52]),t(g,[2,53]),t(v,[2,4]),{13:46,16:[1,47]},t(v,[2,9]),{1:[2,3]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{23:[1,48]},{23:[2,50]},{23:[2,51]},{23:[1,49]},{23:[2,56]},{23:[2,57]},{56:50,59:m,60:b,61:x,62:_,63:k,64:w,65:E},{56:58,59:m,60:b,61:x,62:_,63:k,64:w,65:E},{11:59,17:p},{17:[2,8]},{5:[1,60]},{5:[1,61]},{57:[1,62]},t(T,[2,43]),t(T,[2,44]),t(T,[2,45]),t(T,[2,46]),t(T,[2,47]),t(T,[2,48]),t(T,[2,49]),{58:[1,63]},t(v,[2,5]),{5:C,24:64,25:S,28:A,30:M,32:O,34:B},{5:N,34:D,50:71,51:L,53:I},{27:76,66:f,67:d},{27:77,66:f,67:d},t(R,[2,16]),{26:[1,78]},{26:[1,79]},{26:[1,80]},{26:[1,81]},{5:C,24:82,25:S,28:A,30:M,32:O,34:B},t(R,[2,22]),t(R,[2,36]),{26:[1,83]},{26:[1,84]},{5:N,34:D,50:85,51:L,53:I},t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),{27:86,66:f,67:d},{29:87,66:[1,88],67:[1,89]},{31:90,41:[1,91],42:[1,92],43:[1,93]},{33:94,44:[1,95],45:[1,96],46:[1,97],47:[1,98]},t(R,[2,21]),{52:99,66:[1,100],67:[1,101]},{54:102,66:[1,103],67:[1,104]},t(R,[2,39]),{5:[1,105]},{5:[1,106]},{5:[2,54]},{5:[2,55]},{5:[1,107]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[1,108]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[1,109]},{5:[2,58]},{5:[2,59]},{5:[1,110]},{5:[2,60]},{5:[2,61]},{5:C,24:111,25:S,28:A,30:M,32:O,34:B},{5:C,24:112,25:S,28:A,30:M,32:O,34:B},{5:C,24:113,25:S,28:A,30:M,32:O,34:B},{5:C,24:114,25:S,28:A,30:M,32:O,34:B},{5:N,34:D,50:115,51:L,53:I},{5:N,34:D,50:116,51:L,53:I},t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,37]),t(R,[2,38])],defaultActions:{5:[2,6],7:[2,2],11:[2,1],32:[2,3],33:[2,11],34:[2,12],35:[2,13],36:[2,14],37:[2,15],39:[2,50],40:[2,51],42:[2,56],43:[2,57],47:[2,8],88:[2,54],89:[2,55],91:[2,29],92:[2,30],93:[2,31],95:[2,32],96:[2,33],97:[2,34],98:[2,35],100:[2,58],101:[2,59],103:[2,60],104:[2,61]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),14;case 1:return this.begin("type_directive"),15;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),17;case 4:return 16;case 5:return 5;case 6:case 7:case 8:break;case 9:return 8;case 10:return 6;case 11:return 23;case 12:return 34;case 13:return 26;case 14:return 25;case 15:return 28;case 16:return 30;case 17:return 32;case 18:return 35;case 19:return 36;case 20:return 37;case 21:return 38;case 22:return 39;case 23:return 40;case 24:return 41;case 25:return 42;case 26:return 43;case 27:return 44;case 28:return 45;case 29:return 46;case 30:return 47;case 31:return 48;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 62;case 36:return 63;case 37:return 64;case 38:return 65;case 39:return 51;case 40:return 53;case 41:return 55;case 42:return 58;case 43:return 57;case 44:this.begin("string");break;case 45:this.popState();break;case 46:return"qString";case 47:return e.yytext=e.yytext.trim(),66}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[45,46],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47],inclusive:!0}}};function j(){this.yy={}}return F.lexer=P,j.prototype=F,F.Parser=j,new j}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=new(n(176).default)({r:0,g:0,b:0,a:0},"transparent");e.default=r},function(t,e,n){var r=n(59),i=n(60);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s-1&&t%1==0&&t-1}(s)?s:(n=s.match(a))?(e=n[0],r.test(e)?"about:blank":s):"about:blank"}}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){a.length;switch(i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,20,21,22,23],s=[2,5],c=[1,6,11,13,20,21,22,23],u=[20,21,22],l=[2,8],h=[1,18],f=[1,19],d=[1,24],p=[6,20,21,22,23],y={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,openDirective:15,typeDirective:16,closeDirective:17,":":18,argDirective:19,NEWLINE:20,";":21,EOF:22,open_directive:23,type_directive:24,arg_directive:25,close_directive:26,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",18:":",20:"NEWLINE",21:";",22:"EOF",23:"open_directive",24:"type_directive",25:"arg_directive",26:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[15,1],[16,1],[19,1],[17,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setTitle(this.$);break;case 17:r.parseDirective("%%{","open_directive");break;case 18:r.parseDirective(a[s],"type_directive");break;case 19:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 20:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{1:[3]},{3:10,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{3:11,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,14]),t(c,[2,15]),t(c,[2,16]),{16:14,24:[1,15]},{24:[2,17]},{1:[2,1]},{1:[2,2]},t(u,l,{15:8,9:16,10:17,5:20,1:[2,3],11:h,13:f,23:a}),t(o,s,{7:21}),{17:22,18:[1,23],26:d},t([18,26],[2,18]),t(o,[2,6]),{4:25,20:n,21:r,22:i},{12:[1,26]},{14:[1,27]},t(u,[2,11]),t(u,l,{15:8,9:16,10:17,5:20,1:[2,4],11:h,13:f,23:a}),t(p,[2,12]),{19:28,25:[1,29]},t(p,[2,20]),t(o,[2,7]),t(u,[2,9]),t(u,[2,10]),{17:30,26:d},{26:[2,19]},t(p,[2,13])],defaultActions:{9:[2,17],10:[2,1],11:[2,2],29:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),23;case 1:return this.begin("type_directive"),24;case 2:return this.popState(),this.begin("arg_directive"),18;case 3:return this.popState(),this.popState(),26;case 4:return 25;case 5:case 6:break;case 7:return 20;case 8:case 9:break;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return 8;case 17:return"value";case 18:return 22}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17,18],inclusive:!0}}};function v(){this.yy={}}return y.lexer=g,v.prototype=y,y.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,37],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,34,35],f=[4,6,9,11,23,37],d=[30,31,32,33],p=[22,27],y={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,ATTRIBUTE_WORD:27,cardinality:28,relType:29,ZERO_OR_ONE:30,ZERO_OR_MORE:31,ONE_OR_MORE:32,ONLY_ONE:33,NON_IDENTIFYING:34,IDENTIFYING:35,WORD:36,open_directive:37,type_directive:38,arg_directive:39,close_directive:40,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",27:"ATTRIBUTE_WORD",30:"ZERO_OR_ONE",31:"ZERO_OR_MORE",32:"ONE_OR_MORE",33:"ONLY_ONE",34:"NON_IDENTIFYING",35:"IDENTIFYING",36:"WORD",37:"open_directive",38:"type_directive",39:"arg_directive",40:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[25,1],[26,1],[18,3],[28,1],[28,1],[28,1],[28,1],[29,1],[29,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:this.$=a[s];break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:case 21:this.$=a[s];break;case 22:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 23:this.$=r.Cardinality.ZERO_OR_ONE;break;case 24:this.$=r.Cardinality.ZERO_OR_MORE;break;case 25:this.$=r.Cardinality.ONE_OR_MORE;break;case 26:this.$=r.Cardinality.ONLY_ONE;break;case 27:this.$=r.Identification.NON_IDENTIFYING;break;case 28:this.$=r.Identification.IDENTIFYING;break;case 29:this.$=a[s].replace(/"/g,"");break;case 30:this.$=a[s];break;case 31:r.parseDirective("%%{","open_directive");break;case 32:r.parseDirective(a[s],"type_directive");break;case 33:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 34:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,37:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,37:n},{13:8,38:[1,9]},{38:[2,31]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,37:n},{1:[2,2]},{14:18,15:[1,19],40:a},t([15,40],[2,32]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,37:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,28:24,20:[1,23],30:o,31:s,32:c,33:u}),t([6,9,11,15,20,23,30,31,32,33,37],[2,16]),{11:[1,29]},{16:30,39:[1,31]},{11:[2,34]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,27:l},{29:38,34:[1,39],35:[1,40]},t(h,[2,23]),t(h,[2,24]),t(h,[2,25]),t(h,[2,26]),t(f,[2,9]),{14:41,40:a},{40:[2,33]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,27:l},{26:45,27:[1,46]},{27:[2,20]},{28:47,30:o,31:s,32:c,33:u},t(d,[2,27]),t(d,[2,28]),{11:[1,48]},{19:49,23:[1,51],36:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19]),t(p,[2,21]),{23:[2,22]},t(f,[2,10]),t(r,[2,12]),t(r,[2,29]),t(r,[2,30])],defaultActions:{5:[2,31],7:[2,2],20:[2,34],31:[2,33],37:[2,20],44:[2,18],47:[2,22]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in A=[],o[k])this.terminals_[T]&&T>h&&A.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),37;case 1:return this.begin("type_directive"),38;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),40;case 4:return 39;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 36;case 11:return 4;case 12:return this.begin("block"),20;case 13:break;case 14:return 27;case 15:break;case 16:return this.popState(),22;case 17:return e.yytext[0];case 18:return 30;case 19:return 31;case 20:return 32;case 21:return 33;case 22:return 30;case 23:return 31;case 24:return 32;case 25:return 34;case 26:return 35;case 27:case 28:return 34;case 29:return 23;case 30:return e.yytext[0];case 31:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31],inclusive:!0}}};function v(){this.yy={}}return y.lexer=g,v.prototype=y,y.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(11),n(6)(t))},function(t,e,n){"use strict";var r;Object.defineProperty(e,"__esModule",{value:!0}),function(t){t[t.ALL=0]="ALL",t[t.RGB=1]="RGB",t[t.HSL=2]="HSL"}(r||(r={})),e.TYPE=r},function(t,e,n){"use strict";var r=n(12);t.exports=i;function i(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function s(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+""+o+""+(r.isUndefined(i)?"\0":i)}function c(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return s(t,e.v,e.w,e.name)}i.prototype._nodeCount=0,i.prototype._edgeCount=0,i.prototype.isDirected=function(){return this._isDirected},i.prototype.isMultigraph=function(){return this._isMultigraph},i.prototype.isCompound=function(){return this._isCompound},i.prototype.setGraph=function(t){return this._label=t,this},i.prototype.graph=function(){return this._label},i.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},i.prototype.nodeCount=function(){return this._nodeCount},i.prototype.nodes=function(){return r.keys(this._nodes)},i.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},i.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},i.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},i.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]="\0",this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},i.prototype.node=function(t){return this._nodes[t]},i.prototype.hasNode=function(t){return r.has(this._nodes,t)},i.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},i.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e="\0";else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},i.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},i.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if("\0"!==e)return e}},i.prototype.children=function(t){if(r.isUndefined(t)&&(t="\0"),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if("\0"===t)return this.nodes();if(this.hasNode(t))return[]}},i.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},i.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},i.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},i.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},i.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,function t(r){var a=n.parent(r);return void 0===a||e.hasNode(a)?(i[r]=a,a):a in i?i[a]:t(a)}(t))})),e},i.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},i.prototype.edgeCount=function(){return this._edgeCount},i.prototype.edges=function(){return r.values(this._edgeObjs)},i.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},i.prototype.setEdge=function(){var t,e,n,i,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var l=s(this._isDirected,t,e,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=c(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},i.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return this._edgeLabels[r]},i.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},i.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},i.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},i.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},i.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){var r=n(33)(n(19),"Map");t.exports=r},function(t,e,n){var r=n(218),i=n(225),a=n(227),o=n(228),s=n(229);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){(function(t){var r=n(110),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{var t=a&&a.require&&a.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(this,n(6)(t))},function(t,e,n){var r=n(63),i=n(235),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(117),i=n(118),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(t,e,n){var r=n(43);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i4,u=c?1:17,l=c?8:4,h=s?0:-1,f=c?255:15;return i.default.set({r:(r>>l*(h+3)&f)*u,g:(r>>l*(h+2)&f)*u,b:(r>>l*(h+1)&f)*u,a:s?(r&f)*u/255:1},t)}}},stringify:function(t){return t.a<1?"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]+r.default.unit.frac2hex(t.a):"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]}};e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(46),a=n(16);e.default=function(t,e,n,o){void 0===o&&(o=1);var s=i.default.set({h:r.default.channel.clamp.h(t),s:r.default.channel.clamp.s(e),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(o)});return a.default.stringify(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"a")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(16);e.default=function(t){var e=i.default.parse(t),n=e.r,a=e.g,o=e.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(a)+.0722*r.default.channel.toLinear(o);return r.default.lang.round(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(102);e.default=function(t){return r.default(t)>=.5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(16),i=n(53);e.default=function(t,e){var n=r.default.parse(t),a={};for(var o in e)e[o]&&(a[o]=n[o]+e[o]);return i.default(t,a)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(16),i=n(52);e.default=function(t,e,n){void 0===n&&(n=50);var a=r.default.parse(t),o=a.r,s=a.g,c=a.b,u=a.a,l=r.default.parse(e),h=l.r,f=l.g,d=l.b,p=l.a,y=n/100,g=2*y-1,v=u-p,m=((g*v==-1?g:(g+v)/(1+g*v))+1)/2,b=1-m,x=o*m+h*b,_=s*m+f*b,k=c*m+d*b,w=u*y+p*(1-y);return i.default(x,_,k,w)}},function(t,e){},function(t,e,n){var r=n(54),i=n(80),a=n(59),o=n(230),s=n(236),c=n(115),u=n(116),l=n(239),h=n(240),f=n(120),d=n(241),p=n(42),y=n(245),g=n(246),v=n(125),m=n(5),b=n(40),x=n(250),_=n(13),k=n(252),w=n(30),E={};E["[object Arguments]"]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object DataView]"]=E["[object Boolean]"]=E["[object Date]"]=E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Map]"]=E["[object Number]"]=E["[object Object]"]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[object Symbol]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Error]"]=E["[object Function]"]=E["[object WeakMap]"]=!1,t.exports=function t(e,n,T,C,S,A){var M,O=1&n,B=2&n,N=4&n;if(T&&(M=S?T(e,C,S,A):T(e)),void 0!==M)return M;if(!_(e))return e;var D=m(e);if(D){if(M=y(e),!O)return u(e,M)}else{var L=p(e),I="[object Function]"==L||"[object GeneratorFunction]"==L;if(b(e))return c(e,O);if("[object Object]"==L||"[object Arguments]"==L||I&&!S){if(M=B||I?{}:v(e),!O)return B?h(e,s(M,e)):l(e,o(M,e))}else{if(!E[L])return S?e:{};M=g(e,L,O)}}A||(A=new r);var R=A.get(e);if(R)return R;A.set(e,M),k(e)?e.forEach((function(r){M.add(t(r,n,T,r,e,A))})):x(e)&&e.forEach((function(r,i){M.set(i,t(r,n,T,i,e,A))}));var F=N?B?d:f:B?keysIn:w,P=D?void 0:F(e);return i(P||e,(function(r,i){P&&(r=e[i=r]),a(M,i,t(r,n,T,i,e,A))})),M}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(212))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(33),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(231),i=n(48),a=n(5),o=n(40),s=n(61),c=n(49),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),h=!n&&!l&&o(t),f=!n&&!l&&!h&&c(t),d=n||l||h||f,p=d?r(t.length,String):[],y=p.length;for(var g in t)!e&&!u.call(t,g)||d&&("length"==g||h&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,y))||p.push(g);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(19),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(6)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var f=c.get(t);if(f&&c.get(e))return f==e;var d=-1,p=!0,y=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++d0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(u);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){var r=n(12);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority2?e[2]:void 0;for(u&&a(e[0],e[1],u)&&(r=1);++n1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o);return{x:i+n,y:a+r}}},function(t,e,n){t.exports=function t(e){"use strict";var n=/^\0+/g,r=/[\0\r\f]/g,i=/: */g,a=/zoo|gra/,o=/([,: ])(transform)/g,s=/,+\s*(?![^(]*[)])/g,c=/ +\s*(?![^(]*[)])/g,u=/ *[\0] */g,l=/,\r+?/g,h=/([\t\r\n ])*\f?&/g,f=/:global\(((?:[^\(\)\[\]]*|\[.*\]|\([^\(\)]*\))*)\)/g,d=/\W+/g,p=/@(k\w+)\s*(\S*)\s*/,y=/::(place)/g,g=/:(read-only)/g,v=/\s+(?=[{\];=:>])/g,m=/([[}=:>])\s+/g,b=/(\{[^{]+?);(?=\})/g,x=/\s{2,}/g,_=/([^\(])(:+) */g,k=/[svh]\w+-[tblr]{2}/,w=/\(\s*(.*)\s*\)/g,E=/([\s\S]*?);/g,T=/-self|flex-/g,C=/[^]*?(:[rp][el]a[\w-]+)[^]*/,S=/stretch|:\s*\w+\-(?:conte|avail)/,A=/([^-])(image-set\()/,M="-webkit-",O="-moz-",B="-ms-",N=1,D=1,L=0,I=1,R=1,F=1,P=0,j=0,Y=0,z=[],U=[],$=0,q=null,W=0,V=1,H="",G="",X="";function Z(t,e,i,a,o){for(var s,c,l=0,h=0,f=0,d=0,v=0,m=0,b=0,x=0,k=0,E=0,T=0,C=0,S=0,A=0,O=0,B=0,P=0,U=0,q=0,K=i.length,it=K-1,at="",ot="",st="",ct="",ut="",lt="";O0&&(ot=ot.replace(r,"")),ot.trim().length>0)){switch(b){case 32:case 9:case 59:case 13:case 10:break;default:ot+=i.charAt(O)}b=59}if(1===P)switch(b){case 123:case 125:case 59:case 34:case 39:case 40:case 41:case 44:P=0;case 9:case 13:case 10:case 32:break;default:for(P=0,q=O,v=b,O--,b=59;q0&&(++O,b=v);case 123:q=K}}switch(b){case 123:for(v=(ot=ot.trim()).charCodeAt(0),T=1,q=++O;O0&&(ot=ot.replace(r,"")),m=ot.charCodeAt(1)){case 100:case 109:case 115:case 45:s=e;break;default:s=z}if(q=(st=Z(e,s,st,m,o+1)).length,Y>0&&0===q&&(q=ot.length),$>0&&(c=nt(3,st,s=Q(z,ot,U),e,D,N,q,m,o,a),ot=s.join(""),void 0!==c&&0===(q=(st=c.trim()).length)&&(m=0,st="")),q>0)switch(m){case 115:ot=ot.replace(w,et);case 100:case 109:case 45:st=ot+"{"+st+"}";break;case 107:st=(ot=ot.replace(p,"$1 $2"+(V>0?H:"")))+"{"+st+"}",st=1===R||2===R&&tt("@"+st,3)?"@"+M+st+"@"+st:"@"+st;break;default:st=ot+st,112===a&&(ct+=st,st="")}else st="";break;default:st=Z(e,Q(e,ot,U),st,a,o+1)}ut+=st,C=0,P=0,A=0,B=0,U=0,S=0,ot="",st="",b=i.charCodeAt(++O);break;case 125:case 59:if((q=(ot=(B>0?ot.replace(r,""):ot).trim()).length)>1)switch(0===A&&(45===(v=ot.charCodeAt(0))||v>96&&v<123)&&(q=(ot=ot.replace(" ",":")).length),$>0&&void 0!==(c=nt(1,ot,e,t,D,N,ct.length,a,o,a))&&0===(q=(ot=c.trim()).length)&&(ot="\0\0"),v=ot.charCodeAt(0),m=ot.charCodeAt(1),v){case 0:break;case 64:if(105===m||99===m){lt+=ot+i.charAt(O);break}default:if(58===ot.charCodeAt(q-1))break;ct+=J(ot,v,m,ot.charCodeAt(2))}C=0,P=0,A=0,B=0,U=0,ot="",b=i.charCodeAt(++O)}}switch(b){case 13:case 10:if(h+d+f+l+j===0)switch(E){case 41:case 39:case 34:case 64:case 126:case 62:case 42:case 43:case 47:case 45:case 58:case 44:case 59:case 123:case 125:break;default:A>0&&(P=1)}47===h?h=0:I+C===0&&107!==a&&ot.length>0&&(B=1,ot+="\0"),$*W>0&&nt(0,ot,e,t,D,N,ct.length,a,o,a),N=1,D++;break;case 59:case 125:if(h+d+f+l===0){N++;break}default:switch(N++,at=i.charAt(O),b){case 9:case 32:if(d+l+h===0)switch(x){case 44:case 58:case 9:case 32:at="";break;default:32!==b&&(at=" ")}break;case 0:at="\\0";break;case 12:at="\\f";break;case 11:at="\\v";break;case 38:d+h+l===0&&I>0&&(U=1,B=1,at="\f"+at);break;case 108:if(d+h+l+L===0&&A>0)switch(O-A){case 2:112===x&&58===i.charCodeAt(O-3)&&(L=x);case 8:111===k&&(L=k)}break;case 58:d+h+l===0&&(A=O);break;case 44:h+f+d+l===0&&(B=1,at+="\r");break;case 34:case 39:0===h&&(d=d===b?0:0===d?b:d);break;case 91:d+h+f===0&&l++;break;case 93:d+h+f===0&&l--;break;case 41:d+h+l===0&&f--;break;case 40:if(d+h+l===0){if(0===C)switch(2*x+3*k){case 533:break;default:T=0,C=1}f++}break;case 64:h+f+d+l+A+S===0&&(S=1);break;case 42:case 47:if(d+l+f>0)break;switch(h){case 0:switch(2*b+3*i.charCodeAt(O+1)){case 235:h=47;break;case 220:q=O,h=42}break;case 42:47===b&&42===x&&q+2!==O&&(33===i.charCodeAt(q+2)&&(ct+=i.substring(q,O+1)),at="",h=0)}}if(0===h){if(I+d+l+S===0&&107!==a&&59!==b)switch(b){case 44:case 126:case 62:case 43:case 41:case 40:if(0===C){switch(x){case 9:case 32:case 10:case 13:at+="\0";break;default:at="\0"+at+(44===b?"":"\0")}B=1}else switch(b){case 40:A+7===O&&108===x&&(A=0),C=++T;break;case 41:0==(C=--T)&&(B=1,at+="\0")}break;case 9:case 32:switch(x){case 0:case 123:case 125:case 59:case 44:case 12:case 9:case 32:case 10:case 13:break;default:0===C&&(B=1,at+="\0")}}ot+=at,32!==b&&9!==b&&(E=b)}}k=x,x=b,O++}if(q=ct.length,Y>0&&0===q&&0===ut.length&&0===e[0].length==0&&(109!==a||1===e.length&&(I>0?G:X)===e[0])&&(q=e.join(",").length+2),q>0){if(s=0===I&&107!==a?function(t){for(var e,n,i=0,a=t.length,o=Array(a);i1)){if(f=c.charCodeAt(c.length-1),d=n.charCodeAt(0),e="",0!==l)switch(f){case 42:case 126:case 62:case 43:case 32:case 40:break;default:e=" "}switch(d){case 38:n=e+G;case 126:case 62:case 43:case 32:case 41:case 40:break;case 91:n=e+n+G;break;case 58:switch(2*n.charCodeAt(1)+3*n.charCodeAt(2)){case 530:if(F>0){n=e+n.substring(8,h-1);break}default:(l<1||s[l-1].length<1)&&(n=e+G+n)}break;case 44:e="";default:n=h>1&&n.indexOf(":")>0?e+n.replace(_,"$1"+G+"$2"):e+n+G}c+=n}o[i]=c.replace(r,"").trim()}return o}(e):e,$>0&&void 0!==(c=nt(2,ct,s,t,D,N,q,a,o,a))&&0===(ct=c).length)return lt+ct+ut;if(ct=s.join(",")+"{"+ct+"}",R*L!=0){switch(2!==R||tt(ct,2)||(L=0),L){case 111:ct=ct.replace(g,":-moz-$1")+ct;break;case 112:ct=ct.replace(y,"::-webkit-input-$1")+ct.replace(y,"::-moz-$1")+ct.replace(y,":-ms-input-$1")+ct}L=0}}return lt+ct+ut}function Q(t,e,n){var r=e.trim().split(l),i=r,a=r.length,o=t.length;switch(o){case 0:case 1:for(var s=0,c=0===o?"":t[0]+" ";s0&&I>0)return i.replace(f,"$1").replace(h,"$1"+X);break;default:return t.trim()+i.replace(h,"$1"+t.trim())}default:if(n*I>0&&i.indexOf("\f")>0)return i.replace(h,(58===t.charCodeAt(0)?"":"$1")+t.trim())}return t+i}function J(t,e,n,r){var u,l=0,h=t+";",f=2*e+3*n+4*r;if(944===f)return function(t){var e=t.length,n=t.indexOf(":",9)+1,r=t.substring(0,n).trim(),i=t.substring(n,e-1).trim();switch(t.charCodeAt(9)*V){case 0:break;case 45:if(110!==t.charCodeAt(10))break;default:var a=i.split((i="",s)),o=0;for(n=0,e=a.length;o64&&h<90||h>96&&h<123||95===h||45===h&&45!==u.charCodeAt(1)))switch(isNaN(parseFloat(u))+(-1!==u.indexOf("("))){case 1:switch(u){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:u+=H}}l[n++]=u}i+=(0===o?"":",")+l.join(" ")}}return i=r+i+";",1===R||2===R&&tt(i,1)?M+i+i:i}(h);if(0===R||2===R&&!tt(h,1))return h;switch(f){case 1015:return 97===h.charCodeAt(10)?M+h+h:h;case 951:return 116===h.charCodeAt(3)?M+h+h:h;case 963:return 110===h.charCodeAt(5)?M+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return M+h+h;case 978:return M+h+O+h+h;case 1019:case 983:return M+h+O+h+B+h+h;case 883:return 45===h.charCodeAt(8)?M+h+h:h.indexOf("image-set(",11)>0?h.replace(A,"$1-webkit-$2")+h:h;case 932:if(45===h.charCodeAt(4))switch(h.charCodeAt(5)){case 103:return M+"box-"+h.replace("-grow","")+M+h+B+h.replace("grow","positive")+h;case 115:return M+h+B+h.replace("shrink","negative")+h;case 98:return M+h+B+h.replace("basis","preferred-size")+h}return M+h+B+h+h;case 964:return M+h+B+"flex-"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return u=h.substring(h.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),M+"box-pack"+u+M+h+B+"flex-pack"+u+h;case 1005:return a.test(h)?h.replace(i,":"+M)+h.replace(i,":"+O)+h:h;case 1e3:switch(l=(u=h.substring(13).trim()).indexOf("-")+1,u.charCodeAt(0)+u.charCodeAt(l)){case 226:u=h.replace(k,"tb");break;case 232:u=h.replace(k,"tb-rl");break;case 220:u=h.replace(k,"lr");break;default:return h}return M+h+B+u+h;case 1017:if(-1===h.indexOf("sticky",9))return h;case 975:switch(l=(h=t).length-10,f=(u=(33===h.charCodeAt(l)?h.substring(0,l):h).substring(t.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|u.charCodeAt(7))){case 203:if(u.charCodeAt(8)<111)break;case 115:h=h.replace(u,M+u)+";"+h;break;case 207:case 102:h=h.replace(u,M+(f>102?"inline-":"")+"box")+";"+h.replace(u,M+u)+";"+h.replace(u,B+u+"box")+";"+h}return h+";";case 938:if(45===h.charCodeAt(5))switch(h.charCodeAt(6)){case 105:return u=h.replace("-items",""),M+h+M+"box-"+u+B+"flex-"+u+h;case 115:return M+h+B+"flex-item-"+h.replace(T,"")+h;default:return M+h+B+"flex-line-pack"+h.replace("align-content","").replace(T,"")+h}break;case 973:case 989:if(45!==h.charCodeAt(3)||122===h.charCodeAt(4))break;case 931:case 953:if(!0===S.test(t))return 115===(u=t.substring(t.indexOf(":")+1)).charCodeAt(0)?J(t.replace("stretch","fill-available"),e,n,r).replace(":fill-available",":stretch"):h.replace(u,M+u)+h.replace(u,O+u.replace("fill-",""))+h;break;case 962:if(h=M+h+(102===h.charCodeAt(5)?B+h:"")+h,n+r===211&&105===h.charCodeAt(13)&&h.indexOf("transform",10)>0)return h.substring(0,h.indexOf(";",27)+1).replace(o,"$1-webkit-$2")+h}return h}function tt(t,e){var n=t.indexOf(1===e?":":"{"),r=t.substring(0,3!==e?n:10),i=t.substring(n+1,t.length-1);return q(2!==e?r:r.replace(C,"$1"),i,e)}function et(t,e){var n=J(e,e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2));return n!==e+";"?n.replace(E," or ($1)").substring(4):"("+e+")"}function nt(t,e,n,r,i,a,o,s,c,u){for(var l,h=0,f=e;h<$;++h)switch(l=U[h].call(at,t,f,n,r,i,a,o,s,c,u)){case void 0:case!1:case!0:case null:break;default:f=l}if(f!==e)return f}function rt(t,e,n,r){for(var i=e+1;i0&&(H=i.replace(d,91===a?"":"-")),a=1,1===I?X=i:G=i;var o,s=[X];$>0&&void 0!==(o=nt(-1,n,s,s,D,N,0,0,0,0))&&"string"==typeof o&&(n=o);var c=Z(z,s,n,0,0);return $>0&&void 0!==(o=nt(-2,c,s,s,D,N,c.length,0,0,0))&&"string"!=typeof(c=o)&&(a=0),H="",X="",G="",L=0,D=1,N=1,P*a==0?c:function(t){return t.replace(r,"").replace(v,"").replace(m,"$1").replace(b,"$1").replace(x," ")}(c)}return at.use=function t(e){switch(e){case void 0:case null:$=U.length=0;break;default:if("function"==typeof e)U[$++]=e;else if("object"==typeof e)for(var n=0,r=e.length;n=255?255:t<0?0:t},g:function(t){return t>=255?255:t<0?0:t},b:function(t){return t>=255?255:t<0?0:t},h:function(t){return t%360},s:function(t){return t>=100?100:t<0?0:t},l:function(t){return t>=100?100:t<0?0:t},a:function(t){return t>=1?1:t<0?0:t}},toLinear:function(t){var e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:function(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t},hsl2rgb:function(t,e){var n=t.h,i=t.s,a=t.l;if(100===i)return 2.55*a;n/=360,i/=100;var o=(a/=100)<.5?a*(1+i):a+i-a*i,s=2*a-o;switch(e){case"r":return 255*r.hue2rgb(s,o,n+1/3);case"g":return 255*r.hue2rgb(s,o,n);case"b":return 255*r.hue2rgb(s,o,n-1/3)}},rgb2hsl:function(t,e){var n=t.r,r=t.g,i=t.b;n/=255,r/=255,i/=255;var a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if("l"===e)return 100*s;if(a===o)return 0;var c=a-o;if("s"===e)return 100*(s>.5?c/(2-a-o):c/(a+o));switch(a){case n:return 60*((r-i)/c+(r1?e:"0"+e},dec2hex:function(t){var e=Math.round(t).toString(16);return e.length>1?e:"0"+e}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(76),a=n(177),o=function(){function t(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a.default}return t.prototype.set=function(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.TYPE.ALL,this},t.prototype._ensureHSL=function(){void 0===this.data.h&&(this.data.h=r.default.channel.rgb2hsl(this.data,"h")),void 0===this.data.s&&(this.data.s=r.default.channel.rgb2hsl(this.data,"s")),void 0===this.data.l&&(this.data.l=r.default.channel.rgb2hsl(this.data,"l"))},t.prototype._ensureRGB=function(){void 0===this.data.r&&(this.data.r=r.default.channel.hsl2rgb(this.data,"r")),void 0===this.data.g&&(this.data.g=r.default.channel.hsl2rgb(this.data,"g")),void 0===this.data.b&&(this.data.b=r.default.channel.hsl2rgb(this.data,"b"))},Object.defineProperty(t.prototype,"r",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.r?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"r")):this.data.r},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.r=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"g",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.g?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"g")):this.data.g},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.g=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"b",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.b?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"b")):this.data.b},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.b=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"h",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.h?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"h")):this.data.h},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.h=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"s",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.s?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"s")):this.data.s},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.s=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"l",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.l?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"l")):this.data.l},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.l=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"a",{get:function(){return this.data.a},set:function(t){this.changed=!0,this.data.a=t},enumerable:!0,configurable:!0}),t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(76),i=function(){function t(){this.type=r.TYPE.ALL}return t.prototype.get=function(){return this.type},t.prototype.set=function(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t},t.prototype.reset=function(){this.type=r.TYPE.ALL},t.prototype.is=function(t){return this.type===t},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i={};e.DEC2HEX=i;for(var a=0;a<=255;a++)i[a]=r.default.unit.dec2hex(a)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:function(t){t=t.toLowerCase();var e=i.colors[t];if(e)return r.default.parse(e)},stringify:function(t){var e=r.default.stringify(t);for(var n in i.colors)if(i.colors[n]===e)return n}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(46),a={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:function(t){var e=t.charCodeAt(0);if(114===e||82===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5],h=n[6],f=n[7],d=n[8];return i.default.set({r:r.default.channel.clamp.r(s?2.55*parseFloat(o):parseFloat(o)),g:r.default.channel.clamp.g(u?2.55*parseFloat(c):parseFloat(c)),b:r.default.channel.clamp.b(h?2.55*parseFloat(l):parseFloat(l)),a:f?r.default.channel.clamp.a(d?parseFloat(f)/100:parseFloat(f)):1},t)}}},stringify:function(t){return t.a<1?"rgba("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+", "+r.default.lang.round(t.a)+")":"rgb("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+")"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(46),a={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:function(t){var e=t.match(a.hueRe);if(e){var n=e[1];switch(e[2]){case"grad":return r.default.channel.clamp.h(.9*parseFloat(n));case"rad":return r.default.channel.clamp.h(180*parseFloat(n)/Math.PI);case"turn":return r.default.channel.clamp.h(360*parseFloat(n))}}return r.default.channel.clamp.h(parseFloat(t))},parse:function(t){var e=t.charCodeAt(0);if(104===e||72===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5];return i.default.set({h:a._hue2deg(o),s:r.default.channel.clamp.s(parseFloat(s)),l:r.default.channel.clamp.l(parseFloat(c)),a:u?r.default.channel.clamp.a(l?parseFloat(u)/100:parseFloat(u)):1},t)}}},stringify:function(t){return t.a<1?"hsla("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%, "+t.a+")":"hsl("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%)"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"r")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"g")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"b")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"h")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"s")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"l")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(103);e.default=function(t){return!r.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(16);e.default=function(t){try{return r.default.parse(t),!0}catch(t){return!1}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t){return r.default(t,"h",180)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(53);e.default=function(t){return r.default(t,{s:0})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(16),i=n(107);e.default=function(t,e){void 0===e&&(e=100);var n=r.default.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,i.default(n,t,e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10),i=n(16),a=n(106);e.default=function(t,e){var n,o,s,c=i.default.parse(t),u={};for(var l in e)u[l]=(n=c[l],o=e[l],s=r.default.channel.max[l],o>0?(s-n)*o/100:n*o/100);return a.default(t,u)}},function(t,e,n){var r={"./locale":108,"./locale.js":108};function i(t){var e=a(t);return n(e)}function a(t){if(!n.o(r,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return r[t]}i.keys=function(){return Object.keys(r)},i.resolve=a,t.exports=i,i.id=198},function(t,e,n){t.exports={Graph:n(77),version:n(301)}},function(t,e,n){var r=n(109);t.exports=function(t){return r(t,4)}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(56),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():i.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(56);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(56);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(56);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(55);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(55),i=n(78),a=n(79);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(38),i=n(215),a=n(13),o=n(111),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,h=u.hasOwnProperty,f=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||i(t))&&(r(t)?f:s).test(o(t))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(39),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,i=n(216),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},function(t,e,n){var r=n(19)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(219),i=n(55),a=n(78);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(t,e,n){var r=n(220),i=n(221),a=n(222),o=n(223),s=n(224);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(132),i=n(293),a=n(297),o=n(133),s=n(298),c=n(91);t.exports=function(t,e,n){var u=-1,l=i,h=t.length,f=!0,d=[],p=d;if(n)f=!1,l=a;else if(h>=200){var y=e?null:s(t);if(y)return c(y);f=!1,l=o,p=new r}else p=e?[]:d;t:for(;++u-1}},function(t,e,n){var r=n(146),i=n(295),a=n(296);t.exports=function(t,e,n){return e==e?a(t,e,n):r(t,i,n)}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r1||1===e.length&&t.hasEdge(e[0],e[0])}))}},function(t,e,n){var r=n(12);t.exports=function(t,e,n){return function(t,e,n){var r={},i=t.nodes();return i.forEach((function(t){r[t]={},r[t][t]={distance:0},i.forEach((function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})})),n(t).forEach((function(n){var i=n.v===t?n.w:n.v,a=e(n);r[t][i]={distance:a,predecessor:t}}))})),i.forEach((function(t){var e=r[t];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[t],i=e[n],o=a[n],s=r.distance+i.distance;s0;){if(n=c.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(n).forEach(u)}return o}},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e,n){"use strict";var r=n(4),i=n(346),a=n(349),o=n(350),s=n(8).normalizeRanks,c=n(352),u=n(8).removeEmptyRanks,l=n(353),h=n(354),f=n(355),d=n(356),p=n(365),y=n(8),g=n(20).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?y.time:y.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new g({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},m,T(n,v),r.pick(n,b))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(T(i,x),_)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,T(i,k),r.pick(i,E)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){l.run(t)})),e(" rank",(function(){o(y.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};y.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){u(t)})),e(" nestingGraph.cleanup",(function(){l.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){d(t)})),e(" insertSelfEdges",(function(){!function(t){var e=y.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){y.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){f.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){f.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function u(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){u(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&u(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(y.intersectRect(a,n)),i.points.push(y.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var v=["nodesep","edgesep","ranksep","marginx","marginy"],m={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],x=["width","height"],_={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function T(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},function(t,e,n){var r=n(109);t.exports=function(t){return r(t,5)}},function(t,e,n){var r=n(316)(n(317));t.exports=r},function(t,e,n){var r=n(26),i=n(25),a=n(30);t.exports=function(t){return function(e,n,o){var s=Object(e);if(!i(e)){var c=r(n,3);e=a(e),n=function(t){return c(s[t],t,s)}}var u=t(e,n,o);return u>-1?s[c?e[u]:u]:void 0}}},function(t,e,n){var r=n(146),i=n(26),a=n(318),o=Math.max;t.exports=function(t,e,n){var s=null==t?0:t.length;if(!s)return-1;var c=null==n?0:a(n);return c<0&&(c=o(s+c,0)),r(t,i(e,3),c)}},function(t,e,n){var r=n(156);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(13),i=n(43),a=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(r(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(a,"");var n=s.test(t);return n||c.test(t)?u(t.slice(2),n?2:8):o.test(t)?NaN:+t}},function(t,e,n){var r=n(90),i=n(128),a=n(41);t.exports=function(t,e){return null==t?t:r(t,i(e),a)}},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){var r=n(60),i=n(89),a=n(26);t.exports=function(t,e){var n={};return e=a(e,3),i(t,(function(t,i,a){r(n,i,e(t,i,a))})),n}},function(t,e,n){var r=n(96),i=n(324),a=n(35);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},function(t,e){t.exports=function(t,e){return t>e}},function(t,e,n){var r=n(326),i=n(329)((function(t,e,n){r(t,e,n)}));t.exports=i},function(t,e,n){var r=n(54),i=n(158),a=n(90),o=n(327),s=n(13),c=n(41),u=n(160);t.exports=function t(e,n,l,h,f){e!==n&&a(n,(function(a,c){if(f||(f=new r),s(a))o(e,n,c,l,t,h,f);else{var d=h?h(u(e,c),a,c+"",e,n,f):void 0;void 0===d&&(d=a),i(e,c,d)}}),c)}},function(t,e,n){var r=n(158),i=n(115),a=n(124),o=n(116),s=n(125),c=n(48),u=n(5),l=n(147),h=n(40),f=n(38),d=n(13),p=n(159),y=n(49),g=n(160),v=n(328);t.exports=function(t,e,n,m,b,x,_){var k=g(t,n),w=g(e,n),E=_.get(w);if(E)r(t,n,E);else{var T=x?x(k,w,n+"",t,e,_):void 0,C=void 0===T;if(C){var S=u(w),A=!S&&h(w),M=!S&&!A&&y(w);T=w,S||A||M?u(k)?T=k:l(k)?T=o(k):A?(C=!1,T=i(w,!0)):M?(C=!1,T=a(w,!0)):T=[]:p(w)||c(w)?(T=k,c(k)?T=v(k):d(k)&&!f(k)||(T=s(w))):C=!1}C&&(_.set(w,T),b(T,w,m,x,_),_.delete(w)),r(t,n,T)}}},function(t,e,n){var r=n(47),i=n(41);t.exports=function(t){return r(t,i(t))}},function(t,e,n){var r=n(68),i=n(69);t.exports=function(t){return r((function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r1&&o(t,e[0],e[1])?e=[]:n>2&&o(e[0],e[1],e[2])&&(e=[e[0]]),i(t,r(e,1),[])}));t.exports=s},function(t,e,n){var r=n(67),i=n(26),a=n(142),o=n(341),s=n(62),c=n(342),u=n(35);t.exports=function(t,e,n){var l=-1;e=r(e.length?e:[u],s(i));var h=a(t,(function(t,n,i){return{criteria:r(e,(function(e){return e(t)})),index:++l,value:t}}));return o(h,(function(t,e){return c(t,e,n)}))}},function(t,e){t.exports=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}},function(t,e,n){var r=n(343);t.exports=function(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,s=a.length,c=n.length;++i=c?u:u*("desc"==n[i]?-1:1)}return t.index-e.index}},function(t,e,n){var r=n(43);t.exports=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,a=t==t,o=r(t),s=void 0!==e,c=null===e,u=e==e,l=r(e);if(!c&&!l&&!o&&t>e||o&&s&&u&&!c&&!l||i&&s&&u||!n&&u||!a)return 1;if(!i&&!o&&!l&&t0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(u,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},function(t,e){function n(){var t={};t._next=t._prev=t,this._sentinel=t}function r(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function i(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=n,n.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return r(e),e},n.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&r(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},n.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,i)),n=n._prev;return"["+t.join(", ")+"]"}},function(t,e,n){"use strict";var r=n(4),i=n(8);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,u=t.node(c).rank,l=e.name,h=t.edge(e),f=h.labelRank;if(u===s+1)return;for(t.removeEdge(e),a=0,++s;sc.lim&&(u=c,l=!0);var h=r.filter(e.edges(),(function(e){return l===m(t,t.node(e.v),u)&&l!==m(t,t.node(e.w),u)}));return r.minBy(h,(function(t){return a(e,t)}))}function v(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),d(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function m(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=l,l.initLowLimValues=d,l.initCutValues=h,l.calcCutValue=f,l.leaveEdge=y,l.enterEdge=g,l.exchangeEdges=v},function(t,e,n){var r=n(4);t.exports=function(t){var e=function(t){var e={},n=0;function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}}return r.forEach(t.children(),i),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),u=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||u>e[i].lim));a=i,i=r;for(;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,u=o[c],l=!0;n!==i.w;){if(r=t.node(n),l){for(;(u=o[c])!==s&&t.node(u).maxRank=2),s=l.buildLayerMatrix(t);var g=a(t,s);g0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;u+=t.weight*n}))),u}t.exports=function(t,e){for(var n=0,r=1;r=t.barycenter)&&function(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight);e.weight&&(n+=e.barycenter*e.weight,r+=e.weight);t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},function(t,e,n){var r=n(4),i=n(8);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n=i.partition(t,(function(t){return r.has(t,"barycenter")})),o=n.lhs,s=r.sortBy(n.rhs,(function(t){return-t.i})),c=[],u=0,l=0,h=0;o.sort((f=!!e,function(t,e){return t.barycentere.barycenter?1:f?e.i-t.i:t.i-e.i})),h=a(c,s,h),r.forEach(o,(function(t){h+=t.vs.length,c.push(t.vs),u+=t.barycenter*t.weight,l+=t.weight,h=a(c,s,h)}));var f;var d={vs:r.flatten(c,!0)};l&&(d.barycenter=u/l,d.weight=l);return d}},function(t,e,n){var r=n(4),i=n(20).Graph;t.exports=function(t,e,n){var a=function(t){var e;for(;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},function(t,e,n){var r=n(4);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},function(t,e,n){"use strict";var r=n(4),i=n(8),a=n(366).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},function(t,e,n){"use strict";var r=n(4),i=n(20).Graph,a=n(8);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,u=r.last(i);return r.forEach(i,(function(e,l){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),f=h?t.node(h).order:s;(h||e===u)&&(r.forEach(i.slice(o,l+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(os)&&c(n,e,u)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var u=t.predecessors(r);u.length&&(a=t.node(u[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function u(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function l(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length)for(var l=((c=r.sortBy(c,(function(t){return s[t]}))).length-1)/2,h=Math.floor(l),f=Math.ceil(l);h<=f;++h){var d=c[h];o[t]===t&&e0}t.exports=function(t,e,r,i){var a,o,s,c,u,l,h,f,d,p,y,g,v;if(a=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,d=a*r.x+s*r.y+u,p=a*i.x+s*i.y+u,0!==d&&0!==p&&n(d,p))return;if(o=i.y-r.y,c=r.x-i.x,l=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+l,f=o*e.x+c*e.y+l,0!==h&&0!==f&&n(h,f))return;if(0===(y=a*c-o*s))return;return g=Math.abs(y/2),{x:(v=s*l-c*u)<0?(v-g)/y:(v+g)/y,y:(v=o*u-a*l)<0?(v-g)/y:(v+g)/y}}},function(t,e,n){var r=n(44),i=n(31),a=n(154).layout;t.exports=function(){var t=n(372),e=n(375),i=n(376),u=n(377),l=n(378),h=n(379),f=n(380),d=n(381),p=n(382),y=function(n,y){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(y);var g=c(n,"output"),v=c(g,"clusters"),m=c(g,"edgePaths"),b=i(c(g,"edgeLabels"),y),x=t(c(g,"nodes"),y,d);a(y),l(x,y),h(b,y),u(m,y,p);var _=e(v,y);f(_,y),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(y)};return y.createNodes=function(e){return arguments.length?(t=e,y):t},y.createClusters=function(t){return arguments.length?(e=t,y):e},y.createEdgeLabels=function(t){return arguments.length?(i=t,y):i},y.createEdgePaths=function(t){return arguments.length?(u=t,y):u},y.shapes=function(t){return arguments.length?(d=t,y):d},y.arrows=function(t){return arguments.length?(p=t,y):p},y};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},function(t,e,n){"use strict";var r=n(44),i=n(98),a=n(14),o=n(31);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),u=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);u.exit().remove(),u.enter().append("g").attr("class","node").style("opacity",0),(u=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var u=c.append("g").attr("class","label"),l=i(u,s),h=n[s.shape],f=r.pick(l.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&u.attr("id",s.labelId),r.has(s,"width")&&(f.width=s.width),r.has(s,"height")&&(f.height=s.height),f.width+=s.paddingLeft+s.paddingRight,f.height+=s.paddingTop+s.paddingBottom,u.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var d=o.select(this);d.select(".label-container").remove();var p=h(d,f,s).classed("label-container",!0);a.applyStyle(p,s.style);var y=p.node().getBBox();s.width=y.width,s.height=y.height})),s=u.exit?u.exit():u.selectAll(null);return a.applyTransition(s,e).style("opacity",0).remove(),u}},function(t,e,n){var r=n(14);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==s[t]&&(t=s[t])),c.trace=function(){},c.debug=function(){},c.info=function(){},c.warn=function(){},c.error=function(){},c.fatal=function(){},t<=s.fatal&&(c.fatal=console.error?console.error.bind(console,l("FATAL"),"color: orange"):console.log.bind(console,"",l("FATAL"))),t<=s.error&&(c.error=console.error?console.error.bind(console,l("ERROR"),"color: orange"):console.log.bind(console,"",l("ERROR"))),t<=s.warn&&(c.warn=console.warn?console.warn.bind(console,l("WARN"),"color: orange"):console.log.bind(console,"",l("WARN"))),t<=s.info&&(c.info=console.info?console.info.bind(console,l("INFO"),"color: lightblue"):console.log.bind(console,"",l("INFO"))),t<=s.debug&&(c.debug=console.debug?console.debug.bind(console,l("DEBUG"),"color: lightgreen"):console.log.bind(console,"",l("DEBUG")))},l=function(t){var e=o()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")},h=n(0),f=n(170),d=n.n(f),p=n(36),y=n(71),g=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}return e},v=//gi,m=function(t){return t.replace(v,"#br#")},b=function(t){return t.replace(/#br#/g,"
")},x=function(t){return"false"!==t&&!1!==t},_={getRows:function(t){if(!t)return 1;var e=m(t);return(e=e.replace(/\\n/g,"#br#")).split("#br#")},sanitizeText:function(t,e){var n=t,r=!0;if(!e.flowchart||!1!==e.flowchart.htmlLabels&&"false"!==e.flowchart.htmlLabels||(r=!1),r){var i=e.securityLevel;"antiscript"===i?n=g(n):"loose"!==i&&(n=(n=(n=m(n)).replace(//g,">")).replace(/=/g,"="),n=b(n))}return n},hasBreaks:function(t){return//gi.test(t)},splitBreaks:function(t){return t.split(//gi)},lineBreakRegex:v,removeScript:g,getUrl:function(t){var e="";return t&&(e=(e=(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),e},evaluate:x};function k(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(S.source,")(?=[}][%]{2}).*\n"),"ig");t=t.trim().replace(n,"").replace(/'/gm,'"'),c.debug("Detecting diagram directive".concat(null!==e?" type:"+e:""," based on the text:").concat(t));for(var r,i=[];null!==(r=C.exec(t));)if(r.index===C.lastIndex&&C.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){var a=r[1]?r[1]:r[2],o=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;i.push({type:a,args:o})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return c.error("ERROR: ".concat(n.message," - Unable to parse directive\n ").concat(null!==e?" type:"+e:""," based on the text:").concat(t)),{type:null,args:null}}},O=function(t,e){return t=t.replace(C,"").replace(A,"\n"),c.debug("Detecting diagram type based on the text "+t),t.match(/^\s*sequenceDiagram/)?"sequence":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram-v2/)?"classDiagram":t.match(/^\s*classDiagram/)?e&&e.class&&"dagre-wrapper"===e.class.defaultRenderer?"classDiagram":"class":t.match(/^\s*stateDiagram-v2/)?"stateDiagram":t.match(/^\s*stateDiagram/)?e&&e.class&&"dagre-wrapper"===e.state.defaultRenderer?"stateDiagram":"state":t.match(/^\s*gitGraph/)?"git":t.match(/^\s*flowchart/)?"flowchart-v2":t.match(/^\s*info/)?"info":t.match(/^\s*pie/)?"pie":t.match(/^\s*erDiagram/)?"er":t.match(/^\s*journey/)?"journey":t.match(/^\s*requirement/)||t.match(/^\s*requirementDiagram/)?"requirement":e&&e.flowchart&&"dagre-wrapper"===e.flowchart.defaultRenderer?"flowchart-v2":"flowchart"},B=function(t,e){var n={};return function(){for(var r=arguments.length,i=new Array(r),a=0;a"},n),_.lineBreakRegex.test(t))return t;var r=t.split(" "),i=[],a="";return r.forEach((function(t,o){var s=U("".concat(t," "),n),c=U(a,n);if(s>e){var u=z(t,e,"-",n),l=u.hyphenatedStrings,h=u.remainingWord;i.push.apply(i,[a].concat(E(l))),a=h}else c+s>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");o+1===r.length&&i.push(a)})),i.filter((function(t){return""!==t})).join(n.joinWith)}),(function(t,e,n){return"".concat(t,"-").concat(e,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),z=B((function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var i=t.split(""),a=[],o="";return i.forEach((function(t,s){var c="".concat(o).concat(t);if(U(c,r)>=e){var u=s+1,l=i.length===u,h="".concat(c).concat(n);a.push(l?c:h),o=""}else o=c})),{hyphenatedStrings:a,remainingWord:o}}),(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(t,"-").concat(e,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),U=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),$(t,e).width},$=B((function(t,e){var n=e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),r=n.fontSize,i=n.fontFamily,a=n.fontWeight;if(!t)return{width:0,height:0};var o=["sans-serif",i],s=t.split(_.lineBreakRegex),c=[],u=Object(h.select)("body");if(!u.remove)return{width:0,height:0,lineHeight:0};for(var l=u.append("svg"),f=0,d=o;fc[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),(function(t,e){return"".concat(t,"-").concat(e.fontSize,"-").concat(e.fontWeight,"-").concat(e.fontFamily)})),q=function(t,e,n){var r=new Map;return r.set("height",t),n?(r.set("width","100%"),r.set("style","max-width: ".concat(e,"px;"))):r.set("width",e),r},W=function(t,e,n,r){!function(t,e){var n=!0,r=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;t.attr(s[0],s[1])}}catch(t){r=!0,i=t}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}(t,q(e,n,r))},V={assignWithDepth:P,wrapLabel:Y,calculateTextHeight:function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),$(t,e).height},calculateTextWidth:U,calculateTextDimensions:$,calculateSvgSizeAttrs:q,configureSvgSize:W,detectInit:function(t,e){var n=M(t,/(?:init\b)|(?:initialize\b)/),r={};if(Array.isArray(n)){var i=n.map((function(t){return t.args}));r=P(r,E(i))}else r=n.args;if(r){var a=O(t,e);["config"].forEach((function(t){void 0!==r[t]&&("flowchart-v2"===a&&(a="flowchart"),r[a]=r[t],delete r[t])}))}return r},detectDirective:M,detectType:O,isSubstringInArray:function(t,e){for(var n=0;n=1&&(i={x:t.x,y:t.y}),a>0&&a<1&&(i={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),i}(t)},calcCardinalityPosition:function(t,e,n){var r;c.info("our points",e),e[0]!==n&&(e=e.reverse()),e.forEach((function(t){D(t,r),r=t}));var i,a=25;r=void 0,e.forEach((function(t){if(r&&!i){var e=D(t,r);if(e=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var o=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),u={x:0,y:0};return u.x=Math.sin(s)*o+(e[0].x+i.x)/2,u.y=-Math.cos(s)*o+(e[0].y+i.y)/2,u},calcTerminalLabelPosition:function(t,e,n){var r,i=JSON.parse(JSON.stringify(n));c.info("our points",i),"start_left"!==e&&"start_right"!==e&&(i=i.reverse()),i.forEach((function(t){D(t,r),r=t}));var a,o=25;r=void 0,i.forEach((function(t){if(r&&!a){var e=D(t,r);if(e=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var s=10,u=Math.atan2(i[0].y-a.y,i[0].x-a.x),l={x:0,y:0};return l.x=Math.sin(u)*s+(i[0].x+a.x)/2,l.y=-Math.cos(u)*s+(i[0].y+a.y)/2,"start_left"===e&&(l.x=Math.sin(u+Math.PI)*s+(i[0].x+a.x)/2,l.y=-Math.cos(u+Math.PI)*s+(i[0].y+a.y)/2),"end_right"===e&&(l.x=Math.sin(u-Math.PI)*s+(i[0].x+a.x)/2-5,l.y=-Math.cos(u-Math.PI)*s+(i[0].y+a.y)/2-5),"end_left"===e&&(l.x=Math.sin(u)*s+(i[0].x+a.x)/2-5,l.y=-Math.cos(u)*s+(i[0].y+a.y)/2-5),l},formatUrl:function(t,e){var n=t.trim();if(n)return"loose"!==e.securityLevel?Object(y.sanitizeUrl)(n):n},getStylesFromArray:L,generateId:R,random:F,memoize:B,runFunc:function(t){for(var e,n=t.split("."),r=n.length-1,i=n[r],a=window,o=0;o1?s-1:0),u=1;u-1||e[n].indexOf(">")>-1||e[n].indexOf("url(data:")>-1)&&delete e[n],"object"===dt(e[n])&&t(e[n])}))},wt=function(t){t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),vt.push(t),bt(gt,vt)},Et=function(){bt(gt,vt=[])};function Tt(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e0){var r=t.split("~");n=r[0],e=r[1]}return{className:n,type:e}},Bt=function(t){var e=Ot(t);void 0===St[e.className]&&(St[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:"classid-"+e.className+"-"+At},At++)},Nt=function(t){for(var e=Object.keys(St),n=0;n>")?r.annotations.push(i.substring(2,i.length-2)):i.indexOf(")")>0?r.methods.push(i):i&&r.members.push(i)}},Lt=function(t,e){t.split(",").forEach((function(t){var n=t;t[0].match(/\d/)&&(n="classid-"+n),void 0!==St[n]&&St[n].cssClasses.push(e)}))},It=function(t,e,n){var r=_t(),i=t,a=Nt(i);if("loose"===r.securityLevel&&void 0!==e&&void 0!==St[i]){var o=[];if("string"==typeof n){o=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var s=0;s1&&a>i&&a<=t.length){var o="",s="",c=t.substring(0,1);c.match(/\w/)?s=t.substring(0,i).trim():(c.match(/\+|-|~|#/)&&(o=c),s=t.substring(1,i).trim());var u=t.substring(i+1,a),l=t.substring(a+1,1);n=Kt(l),e=o+s+"("+Qt(u.trim())+")",a<"".length&&""!==(r=t.substring(a+2).trim())&&(r=" : "+Qt(r))}else e=Qt(t);return{displayText:e,cssStyle:n}},Zt=function(t,e,n,r){var i=Vt(e),a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},Qt=function t(e){var n=e;return-1!=e.indexOf("~")?t(n=(n=n.replace("~","<")).replace("~",">")):n},Kt=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},Jt=function(t,e,n){c.info("Rendering class "+e);var r,i=e.id,a={id:i,label:e.id,width:0,height:0},o=t.append("g").attr("id",Nt(i)).attr("class","classGroup");r=e.link?o.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):o.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var s=!0;e.annotations.forEach((function(t){var e=r.append("tspan").text("«"+t+"»");s||e.attr("dy",n.textHeight),s=!1}));var u=e.id;void 0!==e.type&&""!==e.type&&(u+="<"+e.type+">");var l=r.append("tspan").text(u).attr("class","title");s||l.attr("dy",n.textHeight);var h=r.node().getBBox().height,f=o.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin/2).attr("y2",n.padding+h+n.dividerMargin/2),d=o.append("text").attr("x",n.padding).attr("y",h+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.members.forEach((function(t){Zt(d,t,s,n),s=!1}));var p=d.node().getBBox(),y=o.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin+p.height).attr("y2",n.padding+h+n.dividerMargin+p.height),g=o.append("text").attr("x",n.padding).attr("y",h+2*n.dividerMargin+p.height+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.methods.forEach((function(t){Zt(g,t,s,n),s=!1}));var v=o.node().getBBox(),m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));var b=o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",v.width+2*n.padding).attr("height",v.height+n.padding+.5*n.dividerMargin).attr("class",m).node().getBBox().width;return r.node().childNodes.forEach((function(t){t.setAttribute("x",(b-t.getBBox().width)/2)})),e.tooltip&&r.insert("title").text(e.tooltip),f.attr("x2",b),y.attr("x2",b),a.width=b,a.height=v.height+n.padding+.5*n.dividerMargin,a},te=function(t,e,n,r){var i=function(t){switch(t){case Rt.AGGREGATION:return"aggregation";case Rt.EXTENSION:return"extension";case Rt.COMPOSITION:return"composition";case Rt.DEPENDENCY:return"dependency"}};e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var a,o,s=e.points,u=Object(h.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(h.curveBasis),l=t.append("path").attr("d",u(s)).attr("id","edge"+Wt).attr("class","relation"),f="";r.arrowMarkerAbsolute&&(f=(f=(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&l.attr("class","relation dashed-line"),"none"!==n.relation.type1&&l.attr("marker-start","url("+f+"#"+i(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&l.attr("marker-end","url("+f+"#"+i(n.relation.type2)+"End)");var d,p,y,g,v=e.points.length,m=V.calcLabelPosition(e.points);if(a=m.x,o=m.y,v%2!=0&&v>1){var b=V.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),x=V.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[v-1]);c.debug("cardinality_1_point "+JSON.stringify(b)),c.debug("cardinality_2_point "+JSON.stringify(x)),d=b.x,p=b.y,y=x.x,g=x.y}if(void 0!==n.title){var _=t.append("g").attr("class","classLabel"),k=_.append("text").attr("class","label").attr("x",a).attr("y",o).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=k;var w=k.node().getBBox();_.insert("rect",":first-child").attr("class","box").attr("x",w.x-r.padding/2).attr("y",w.y-r.padding/2).attr("width",w.width+r.padding).attr("height",w.height+r.padding)}(c.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1)&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",d).attr("y",p).attr("fill","black").attr("font-size","6").text(n.relationTitle1);void 0!==n.relationTitle2&&"none"!==n.relationTitle2&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",y).attr("y",g).attr("fill","black").attr("font-size","6").text(n.relationTitle2);Wt++};$t.parser.yy=Pt;var ee={},ne={dividerMargin:10,padding:5,textHeight:10},re=function(t){for(var e=Object.keys(ee),n=0;n "+t.w+": "+JSON.stringify(i.edge(t))),te(r,i.edge(t),i.edge(t).relation,ne))}));var f=r.node().getBBox(),d=f.width+40,p=f.height+40;W(r,p,d,ne.useMaxWidth);var y="".concat(f.x-20," ").concat(f.y-20," ").concat(d," ").concat(p);c.debug("viewBox ".concat(y)),r.attr("viewBox",y)},oe={extension:function(t,e,n){c.trace("Making markers for ",n),t.append("defs").append("marker").attr("id",e+"-extensionStart").attr("class","marker extension "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id",e+"-extensionEnd").attr("class","marker extension "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:function(t,e){t.append("defs").append("marker").attr("id",e+"-compositionStart").attr("class","marker composition "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-compositionEnd").attr("class","marker composition "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:function(t,e){t.append("defs").append("marker").attr("id",e+"-aggregationStart").attr("class","marker aggregation "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-aggregationEnd").attr("class","marker aggregation "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:function(t,e){t.append("defs").append("marker").attr("id",e+"-dependencyStart").attr("class","marker dependency "+e).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id",e+"-dependencyEnd").attr("class","marker dependency "+e).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},point:function(t,e){t.append("marker").attr("id",e+"-pointEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-pointStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:function(t,e){t.append("marker").attr("id",e+"-circleEnd").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-circleStart").attr("class","marker "+e).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:function(t,e){t.append("marker").attr("id",e+"-crossEnd").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),t.append("marker").attr("id",e+"-crossStart").attr("class","marker cross "+e).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:function(t,e){t.append("defs").append("marker").attr("id",e+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}},se=function(t,e,n,r){e.forEach((function(e){oe[e](t,n,r)}))};function ce(t){return(ce="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var ue=function(t,e,n,r){var i=t||"";if("object"===ce(i)&&(i=i[0]),x(_t().flowchart.htmlLabels))return i=i.replace(/\\n|\n/g,"
"),c.info("vertexText"+i),function(t){var e,n,r=Object(h.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),i=r.append("xhtml:div"),a=t.label,o=t.isNode?"nodeLabel":"edgeLabel";return i.html('"+a+""),e=i,(n=t.labelStyle)&&e.attr("style",n),i.style("display","inline-block"),i.style("white-space","nowrap"),i.attr("xmlns","http://www.w3.org/1999/xhtml"),r.node()}({isNode:r,label:i.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")})),labelStyle:e.replace("fill:","color:")});var a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));var o=[];o="string"==typeof i?i.split(/\\n|\n|/gi):Array.isArray(i)?i:[];for(var s=0;s0)t(a,n,r,i);else{var o=n.node(a);c.info("cp ",a," to ",i," with parent ",e),r.setNode(a,o),i!==n.parent(a)&&(c.warn("Setting parent",a,n.parent(a)),r.setParent(a,n.parent(a))),e!==i&&a!==e?(c.debug("Setting parent",a,e),r.setParent(a,e)):(c.info("In copy ",e,"root",i,"data",n.node(e),i),c.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==i,"node!==clusterId",a!==e));var s=n.edges(a);c.debug("Copying Edges",s),s.forEach((function(t){c.info("Edge",t);var a=n.edge(t.v,t.w,t.name);c.info("Edge data",a,i);try{!function(t,e){return c.info("Decendants of ",e," is ",pe[e]),c.info("Edge is ",t),t.v!==e&&(t.w!==e&&(pe[e]?(c.info("Here "),pe[e].indexOf(t.v)>=0||(!!ge(t.v,e)||(!!ge(t.w,e)||pe[e].indexOf(t.w)>=0))):(c.debug("Tilt, ",e,",not in decendants"),!1)))}(t,i)?c.info("Skipping copy of edge ",t.v,"--\x3e",t.w," rootId: ",i," clusterId:",e):(c.info("Copying as ",t.v,t.w,a,t.name),r.setEdge(t.v,t.w,a,t.name),c.info("newGraph edges ",r.edges(),r.edge(r.edges()[0])))}catch(t){c.error(t)}}))}c.debug("Removing node",a),n.removeNode(a)}))},me=function t(e,n){c.trace("Searching",e);var r=n.children(e);if(c.trace("Searching children of id ",e,r),r.length<1)return c.trace("This is a valid node",e),e;for(var i=0;i ",a),a}},be=function(t){return de[t]&&de[t].externalConnections&&de[t]?de[t].id:t},xe=function(t,e){!t||e>10?c.debug("Opting out, no graph "):(c.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(c.warn("Cluster identified",e," Replacement id in edges: ",me(e,t)),pe[e]=function t(e,n){for(var r=n.children(e),i=[].concat(r),a=0;a0?(c.debug("Cluster identified",e,pe),r.forEach((function(t){t.v!==e&&t.w!==e&&(ge(t.v,e)^ge(t.w,e)&&(c.warn("Edge: ",t," leaves cluster ",e),c.warn("Decendants of XXX ",e,": ",pe[e]),de[e].externalConnections=!0))}))):c.debug("Not a cluster ",e,pe)})),t.edges().forEach((function(e){var n=t.edge(e);c.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),c.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));var r=e.v,i=e.w;c.warn("Fix XXX",de,"ids:",e.v,e.w,"Translateing: ",de[e.v]," --- ",de[e.w]),(de[e.v]||de[e.w])&&(c.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=be(e.v),i=be(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),c.warn("Fix Replacing with XXX",r,i,e.name),t.setEdge(r,i,n,e.name))})),c.warn("Adjusted Graph",Ut.a.json.write(t)),_e(t,0),c.trace(de))},_e=function t(e,n){if(c.warn("extractor - ",n,Ut.a.json.write(e),e.children("D")),n>10)c.error("Bailing out");else{for(var r=e.nodes(),i=!1,a=0;a0}if(i){c.debug("Nodes = ",r,n);for(var u=0;u0){c.warn("Cluster without external connections, without a parent and with children",l,n);var h="TB"===e.graph().rankdir?"LR":"TB";de[l]&&de[l].clusterData&&de[l].clusterData.dir&&(h=de[l].clusterData.dir,c.warn("Fixing dir",de[l].clusterData.dir,h));var f=new Ut.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:h,nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));c.warn("Old graph before copy",Ut.a.json.write(e)),ve(l,e,f,l),e.setNode(l,{clusterNode:!0,id:l,clusterData:de[l].clusterData,labelText:de[l].labelText,graph:f}),c.warn("New graph after copy node: (",l,")",Ut.a.json.write(f)),c.debug("Old graph after copy",Ut.a.json.write(e))}else c.warn("Cluster ** ",l," **not meeting the criteria !externalConnections:",!de[l].externalConnections," no parent: ",!e.parent(l)," children ",e.children(l)&&e.children(l).length>0,e.children("D"),n),c.debug(de);else c.debug("Not a cluster",l,n)}r=e.nodes(),c.warn("New list of nodes",r);for(var d=0;d0}var Se=function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,y,g;if(i=e.y-t.y,o=t.x-e.x,c=e.x*t.y-t.x*e.y,f=i*n.x+o*n.y+c,d=i*r.x+o*r.y+c,!(0!==f&&0!==d&&Ce(f,d)||(a=r.y-n.y,s=n.x-r.x,u=r.x*n.y-n.x*r.y,l=a*t.x+s*t.y+u,h=a*e.x+s*e.y+u,0!==l&&0!==h&&Ce(l,h)||0==(p=i*s-a*o))))return y=Math.abs(p/2),{x:(g=o*u-s*c)<0?(g-y)/p:(g+y)/p,y:(g=a*c-i*u)<0?(g-y)/p:(g+y)/p}},Ae=function(t,e,n){var r=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)})):(o=Math.min(o,e.x),s=Math.min(s,e.y));for(var c=r-t.width/2-o,u=i-t.height/2-s,l=0;l1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}},Oe={node:n.n(we).a,circle:Te,ellipse:Ee,polygon:Ae,rect:Me};function Be(t){return(Be="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ne=function(t,e,n){var r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;"LR"===n&&(i=10,a=70);var o=r.append("rect").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return he(e,o),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return Oe.rect(e,t)},r},De={question:function(t,e){var n=le(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding+(i.height+e.padding),o=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}];c.info("Question main (Circle)");var s=fe(r,a,a,o);return s.attr("style",e.style),he(e,s),e.intersect=function(t){return c.warn("Intersect called"),Oe.polygon(e,o,t)},r},rect:function(t,e){var n=le(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;c.trace("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),he(e,o),e.intersect=function(t){return Oe.rect(e,t)},r},rectWithTitle:function(t,e){var n;n=e.classes?"node "+e.classes:"node default";var r=t.insert("g").attr("class",n).attr("id",e.domId||e.id),i=r.insert("rect",":first-child"),a=r.insert("line"),o=r.insert("g").attr("class","label"),s=e.labelText.flat?e.labelText.flat():e.labelText,u="";u="object"===Be(s)?s[0]:s,c.info("Label text abc79",u,s,"object"===Be(s));var l,f=o.node().appendChild(ue(u,e.labelStyle,!0,!0));if(x(_t().flowchart.htmlLabels)){var d=f.children[0],p=Object(h.select)(f);l=d.getBoundingClientRect(),p.attr("width",l.width),p.attr("height",l.height)}c.info("Text 2",s);var y=s.slice(1,s.length),g=f.getBBox(),v=o.node().appendChild(ue(y.join?y.join("
"):y,e.labelStyle,!0,!0));if(x(_t().flowchart.htmlLabels)){var m=v.children[0],b=Object(h.select)(v);l=m.getBoundingClientRect(),b.attr("width",l.width),b.attr("height",l.height)}var _=e.padding/2;return Object(h.select)(v).attr("transform","translate( "+(l.width>g.width?0:(g.width-l.width)/2)+", "+(g.height+_+5)+")"),Object(h.select)(f).attr("transform","translate( "+(l.widthe.height/2-s)){var i=s*s*(1-r*r/(o*o));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},r},start:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),he(e,r),e.intersect=function(t){return Oe.circle(e,7,t)},n},end:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),he(e,i),e.intersect=function(t){return Oe.circle(e,7,t)},n},note:function(t,e){var n=le(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;c.info("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),he(e,o),e.intersect=function(t){return Oe.rect(e,t)},r},subroutine:function(t,e){var n=le(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=[{x:0,y:0},{x:a,y:0},{x:a,y:-o},{x:0,y:-o},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-o},{x:-8,y:-o},{x:-8,y:0}],c=fe(r,a,o,s);return c.attr("style",e.style),he(e,c),e.intersect=function(t){return Oe.polygon(e,s,t)},r},fork:Ne,join:Ne,class_box:function(t,e){var n,r=e.padding/2;n=e.classes?"node "+e.classes:"node default";var i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),o=i.insert("line"),s=i.insert("line"),c=0,u=4,l=i.insert("g").attr("class","label"),f=0,d=e.classData.annotations&&e.classData.annotations[0],p=e.classData.annotations[0]?"«"+e.classData.annotations[0]+"»":"",y=l.node().appendChild(ue(p,e.labelStyle,!0,!0)),g=y.getBBox();if(x(_t().flowchart.htmlLabels)){var v=y.children[0],m=Object(h.select)(y);g=v.getBoundingClientRect(),m.attr("width",g.width),m.attr("height",g.height)}e.classData.annotations[0]&&(u+=g.height+4,c+=g.width);var b=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(b+="<"+e.classData.type+">");var _=l.node().appendChild(ue(b,e.labelStyle,!0,!0));Object(h.select)(_).attr("class","classTitle");var k=_.getBBox();if(x(_t().flowchart.htmlLabels)){var w=_.children[0],E=Object(h.select)(_);k=w.getBoundingClientRect(),E.attr("width",k.width),E.attr("height",k.height)}u+=k.height+4,k.width>c&&(c=k.width);var T=[];e.classData.members.forEach((function(t){var n=Vt(t).displayText,r=l.node().appendChild(ue(n,e.labelStyle,!0,!0)),i=r.getBBox();if(x(_t().flowchart.htmlLabels)){var a=r.children[0],o=Object(h.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),u+=i.height+4,T.push(r)})),u+=8;var C=[];if(e.classData.methods.forEach((function(t){var n=Vt(t).displayText,r=l.node().appendChild(ue(n,e.labelStyle,!0,!0)),i=r.getBBox();if(x(_t().flowchart.htmlLabels)){var a=r.children[0],o=Object(h.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),u+=i.height+4,C.push(r)})),u+=8,d){var S=(c-g.width)/2;Object(h.select)(y).attr("transform","translate( "+(-1*c/2+S)+", "+-1*u/2+")"),f=g.height+4}var A=(c-k.width)/2;return Object(h.select)(_).attr("transform","translate( "+(-1*c/2+A)+", "+(-1*u/2+f)+")"),f+=k.height+4,o.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+f).attr("y2",-u/2-r+8+f),f+=8,T.forEach((function(t){Object(h.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+f+4)+")"),f+=k.height+4})),f+=8,s.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+f).attr("y2",-u/2-r+8+f),f+=8,C.forEach((function(t){Object(h.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+f)+")"),f+=k.height+4})),a.attr("class","outer title-state").attr("x",-c/2-r).attr("y",-u/2-r).attr("width",c+e.padding).attr("height",u+e.padding),he(e,a),e.intersect=function(t){return Oe.rect(e,t)},i}},Le={},Ie=function(t){var e=Le[t.id];c.trace("Transforming node",t.diff,t,"translate("+(t.x-t.width/2-5)+", "+t.width/2+")");var n=t.diff||0;return t.clusterNode?e.attr("transform","translate("+(t.x+n-t.width/2)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")"),n},Re={rect:function(t,e){c.trace("Creating subgraph rect for ",e.id,e);var n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(ue(e.labelText,e.labelStyle,void 0,!0)),o=a.getBBox();if(x(_t().flowchart.htmlLabels)){var s=a.children[0],u=Object(h.select)(a);o=s.getBoundingClientRect(),u.attr("width",o.width),u.attr("height",o.height)}var l=0*e.padding,f=l/2,d=e.width<=o.width+l?o.width+l:e.width;e.width<=o.width+l?e.diff=(o.width-e.width)/2:e.diff=-e.padding/2,c.trace("Data ",e,JSON.stringify(e)),r.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-d/2).attr("y",e.y-e.height/2-f).attr("width",d).attr("height",e.height+l),i.attr("transform","translate("+(e.x-o.width/2)+", "+(e.y-e.height/2+e.padding/3)+")");var p=r.node().getBBox();return e.width=p.width,e.height=p.height,e.intersect=function(t){return Me(e,t)},n},roundedWithTitle:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),o=i.node().appendChild(ue(e.labelText,e.labelStyle,void 0,!0)),s=o.getBBox();if(x(_t().flowchart.htmlLabels)){var c=o.children[0],u=Object(h.select)(o);s=c.getBoundingClientRect(),u.attr("width",s.width),u.attr("height",s.height)}s=o.getBBox();var l=0*e.padding,f=l/2,d=e.width<=s.width+e.padding?s.width+e.padding:e.width;e.width<=s.width+e.padding?e.diff=(s.width+e.padding-e.width)/2:e.diff=-e.padding/2,r.attr("class","outer").attr("x",e.x-d/2-f).attr("y",e.y-e.height/2-f).attr("width",d+l).attr("height",e.height+l),a.attr("class","inner").attr("x",e.x-d/2-f).attr("y",e.y-e.height/2-f+s.height-1).attr("width",d+l).attr("height",e.height+l-s.height-3),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2-e.padding/3+(x(_t().flowchart.htmlLabels)?5:3))+")");var p=r.node().getBBox();return e.height=p.height,e.intersect=function(t){return Me(e,t)},n},noteGroup:function(t,e){var n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return Me(e,t)},n},divider:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return Me(e,t)},n}},Fe={},Pe={},je={},Ye=function(t,e){c.warn("abc88 cutPathAtIntersect",t,e);var n=[],r=t[0],i=!1;return t.forEach((function(t){if(c.info("abc88 checking point",t,e),function(t,e){var n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),o=t.width/2,s=t.height/2;return i>=o||a>=s}(e,t)||i)c.warn("abc88 outside",t,r),r=t,i||n.push(t);else{var a=function(t,e,n){c.warn("intersection calc abc89:\n outsidePoint: ".concat(JSON.stringify(e),"\n insidePoint : ").concat(JSON.stringify(n),"\n node : x:").concat(t.x," y:").concat(t.y," w:").concat(t.width," h:").concat(t.height));var r=t.x,i=t.y,a=Math.abs(r-n.x),o=t.width/2,s=n.xMath.abs(r-e.x)*u){var f=n.y0&&c.trace("Recursive edges",n.edge(n.edges()[0]));var s=o.insert("g").attr("class","clusters"),u=o.insert("g").attr("class","edgePaths"),l=o.insert("g").attr("class","edgeLabels"),f=o.insert("g").attr("class","nodes");n.nodes().forEach((function(e){var o=n.node(e);if(void 0!==i){var s=JSON.parse(JSON.stringify(i.clusterData));c.info("Setting data for cluster XXX (",e,") ",s,i),n.setNode(i.id,s),n.parent(e)||(c.trace("Setting parent",e,i.id),n.setParent(e,i.id,s))}if(c.info("(Insert) Node XXX"+e+": "+JSON.stringify(n.node(e))),o&&o.clusterNode){c.info("Cluster identified",e,o.width,n.node(e));var u=t(f,o.graph,r,n.node(e)),l=u.elem;he(o,l),o.diff=u.diff||0,c.info("Node bounds (abc123)",e,o,o.width,o.x,o.y),function(t,e){Le[e.id]=t}(l,o),c.warn("Recursive render complete ",l,o)}else n.children(e).length>0?(c.info("Cluster - the non recursive path XXX",e,o.id,o,n),c.info(me(o.id,n)),de[o.id]={id:me(o.id,n),node:o}):(c.info("Node - the non recursive path",e,o.id,o),function(t,e,n){var r,i;e.link?(r=t.insert("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget||"_blank"),i=De[e.shape](r,e,n)):r=i=De[e.shape](t,e,n),e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),Le[e.id]=r,e.haveCallback&&Le[e.id].attr("class",Le[e.id].attr("class")+" clickable")}(f,n.node(e),a))})),n.edges().forEach((function(t){var e=n.edge(t.v,t.w,t.name);c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),c.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(n.edge(t))),c.info("Fix",de,"ids:",t.v,t.w,"Translateing: ",de[t.v],de[t.w]),function(t,e){var n=ue(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);var a=n.getBBox();if(x(_t().flowchart.htmlLabels)){var o=n.children[0],s=Object(h.select)(n);a=o.getBoundingClientRect(),s.attr("width",a.width),s.attr("height",a.height)}if(i.attr("transform","translate("+-a.width/2+", "+-a.height/2+")"),Pe[e.id]=r,e.width=a.width,e.height=a.height,e.startLabelLeft){var c=ue(e.startLabelLeft,e.labelStyle),u=t.insert("g").attr("class","edgeTerminals"),l=u.insert("g").attr("class","inner");l.node().appendChild(c);var f=c.getBBox();l.attr("transform","translate("+-f.width/2+", "+-f.height/2+")"),je[e.id]||(je[e.id]={}),je[e.id].startLeft=u}if(e.startLabelRight){var d=ue(e.startLabelRight,e.labelStyle),p=t.insert("g").attr("class","edgeTerminals"),y=p.insert("g").attr("class","inner");p.node().appendChild(d),y.node().appendChild(d);var g=d.getBBox();y.attr("transform","translate("+-g.width/2+", "+-g.height/2+")"),je[e.id]||(je[e.id]={}),je[e.id].startRight=p}if(e.endLabelLeft){var v=ue(e.endLabelLeft,e.labelStyle),m=t.insert("g").attr("class","edgeTerminals"),b=m.insert("g").attr("class","inner");b.node().appendChild(v);var _=v.getBBox();b.attr("transform","translate("+-_.width/2+", "+-_.height/2+")"),m.node().appendChild(v),je[e.id]||(je[e.id]={}),je[e.id].endLeft=m}if(e.endLabelRight){var k=ue(e.endLabelRight,e.labelStyle),w=t.insert("g").attr("class","edgeTerminals"),E=w.insert("g").attr("class","inner");E.node().appendChild(k);var T=k.getBBox();E.attr("transform","translate("+-T.width/2+", "+-T.height/2+")"),w.node().appendChild(k),je[e.id]||(je[e.id]={}),je[e.id].endRight=w}}(l,e)})),n.edges().forEach((function(t){c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),c.info("#############################################"),c.info("### Layout ###"),c.info("#############################################"),c.info(n),Yt.a.layout(n),c.info("Graph after layout:",Ut.a.json.write(n));var d=0;return ke(n).forEach((function(t){var e=n.node(t);c.info("Position "+t+": "+JSON.stringify(n.node(t))),c.info("Position "+t+": ("+e.x,","+e.y,") width: ",e.width," height: ",e.height),e&&e.clusterNode?Ie(e):n.children(t).length>0?(!function(t,e){c.trace("Inserting cluster");var n=e.shape||"rect";Fe[e.id]=Re[n](t,e)}(s,e),de[e.id].node=e):Ie(e)})),n.edges().forEach((function(t){var e=n.edge(t);c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e),e),function(t,e){c.info("Moving label abc78 ",t.id,t.label,Pe[t.id]);var n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){var r=Pe[t.id],i=t.x,a=t.y;if(n){var o=V.calcLabelPosition(n);c.info("Moving label from (",i,",",a,") to (",o.x,",",o.y,") abc78")}r.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){var s=je[t.id].startLeft,u=t.x,l=t.y;if(n){var h=V.calcTerminalLabelPosition(0,"start_left",n);u=h.x,l=h.y}s.attr("transform","translate("+u+", "+l+")")}if(t.startLabelRight){var f=je[t.id].startRight,d=t.x,p=t.y;if(n){var y=V.calcTerminalLabelPosition(0,"start_right",n);d=y.x,p=y.y}f.attr("transform","translate("+d+", "+p+")")}if(t.endLabelLeft){var g=je[t.id].endLeft,v=t.x,m=t.y;if(n){var b=V.calcTerminalLabelPosition(0,"end_left",n);v=b.x,m=b.y}g.attr("transform","translate("+v+", "+m+")")}if(t.endLabelRight){var x=je[t.id].endRight,_=t.x,k=t.y;if(n){var w=V.calcTerminalLabelPosition(0,"end_right",n);_=w.x,k=w.y}x.attr("transform","translate("+_+", "+k+")")}}(e,function(t,e,n,r,i,a){var o=n.points,s=!1,u=a.node(e.v),l=a.node(e.w);c.info("abc88 InsertEdge: ",n),l.intersect&&u.intersect&&((o=o.slice(1,n.points.length-1)).unshift(u.intersect(o[0])),c.info("Last point",o[o.length-1],l,l.intersect(o[o.length-1])),o.push(l.intersect(o[o.length-1]))),n.toCluster&&(c.info("to cluster abc88",r[n.toCluster]),o=Ye(n.points,r[n.toCluster].node),s=!0),n.fromCluster&&(c.info("from cluster abc88",r[n.fromCluster]),o=Ye(o.reverse(),r[n.fromCluster].node).reverse(),s=!0);var f,d=o.filter((function(t){return!Number.isNaN(t.y)}));f=("graph"===i||"flowchart"===i)&&n.curve||h.curveBasis;var p,y=Object(h.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(f);switch(n.thickness){case"normal":p="edge-thickness-normal";break;case"thick":p="edge-thickness-thick";break;default:p=""}switch(n.pattern){case"solid":p+=" edge-pattern-solid";break;case"dotted":p+=" edge-pattern-dotted";break;case"dashed":p+=" edge-pattern-dashed"}var g=t.append("path").attr("d",y(d)).attr("id",n.id).attr("class"," "+p+(n.classes?" "+n.classes:"")).attr("style",n.style),v="";switch(_t().state.arrowMarkerAbsolute&&(v=(v=(v=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),c.info("arrowTypeStart",n.arrowTypeStart),c.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":g.attr("marker-start","url("+v+"#"+i+"-crossStart)");break;case"arrow_point":g.attr("marker-start","url("+v+"#"+i+"-pointStart)");break;case"arrow_barb":g.attr("marker-start","url("+v+"#"+i+"-barbStart)");break;case"arrow_circle":g.attr("marker-start","url("+v+"#"+i+"-circleStart)");break;case"aggregation":g.attr("marker-start","url("+v+"#"+i+"-aggregationStart)");break;case"extension":g.attr("marker-start","url("+v+"#"+i+"-extensionStart)");break;case"composition":g.attr("marker-start","url("+v+"#"+i+"-compositionStart)");break;case"dependency":g.attr("marker-start","url("+v+"#"+i+"-dependencyStart)")}switch(n.arrowTypeEnd){case"arrow_cross":g.attr("marker-end","url("+v+"#"+i+"-crossEnd)");break;case"arrow_point":g.attr("marker-end","url("+v+"#"+i+"-pointEnd)");break;case"arrow_barb":g.attr("marker-end","url("+v+"#"+i+"-barbEnd)");break;case"arrow_circle":g.attr("marker-end","url("+v+"#"+i+"-circleEnd)");break;case"aggregation":g.attr("marker-end","url("+v+"#"+i+"-aggregationEnd)");break;case"extension":g.attr("marker-end","url("+v+"#"+i+"-extensionEnd)");break;case"composition":g.attr("marker-end","url("+v+"#"+i+"-compositionEnd)");break;case"dependency":g.attr("marker-end","url("+v+"#"+i+"-dependencyEnd)")}var m={};return s&&(m.updatedPath=o),m.originalPath=n.points,m}(u,t,e,de,r,n))})),n.nodes().forEach((function(t){var e=n.node(t);c.info(t,e.type,e.diff),"group"===e.type&&(d=e.diff)})),{elem:o,diff:d}},Ue=function(t,e,n,r,i){se(t,n,r,i),Le={},Pe={},je={},Fe={},pe={},ye={},de={},c.warn("Graph at first:",Ut.a.json.write(e)),xe(e),c.warn("Graph after:",Ut.a.json.write(e)),ze(t,e,r)};$t.parser.yy=Pt;var $e={dividerMargin:10,padding:5,textHeight:10},qe=function(t){Object.keys(t).forEach((function(e){$e[e]=t[e]}))},We=function(t,e){c.info("Drawing class"),Pt.clear(),$t.parser.parse(t);var n=_t().flowchart;c.info("config:",n);var r=n.nodeSpacing||50,i=n.rankSpacing||50,a=new Ut.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TD",nodesep:r,ranksep:i,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),o=Pt.getClasses(),s=Pt.getRelations();c.info(s),function(t,e){var n=Object.keys(t);c.info("keys:",n),c.info(t),n.forEach((function(n){var r=t[n],i="";r.cssClasses.length>0&&(i=i+" "+r.cssClasses.join(" "));var a={labelStyle:""},o=void 0!==r.text?r.text:r.id,s="";switch(r.type){case"class":s="class_box";break;default:s="class_box"}e.setNode(r.id,{labelStyle:a.labelStyle,shape:s,labelText:o,classData:r,rx:0,ry:0,class:i,style:a.style,id:r.id,domId:r.domId,haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:_t().flowchart.padding}),c.info("setNode",{labelStyle:a.labelStyle,shape:s,labelText:o,rx:0,ry:0,class:i,style:a.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:_t().flowchart.padding})}))}(o,a),function(t,e){var n=0;t.forEach((function(r){n++;var i={classes:"relation"};i.pattern=1==r.relation.lineType?"dashed":"solid",i.id="id"+n,"arrow_open"===r.type?i.arrowhead="none":i.arrowhead="normal",c.info(i,r),i.startLabelRight="none"===r.relationTitle1?"":r.relationTitle1,i.endLabelLeft="none"===r.relationTitle2?"":r.relationTitle2,i.arrowTypeStart=Ve(r.relation.type1),i.arrowTypeEnd=Ve(r.relation.type2);var a="",o="";if(void 0!==r.style){var s=L(r.style);a=s.style,o=s.labelStyle}else a="fill:none";i.style=a,i.labelStyle=o,void 0!==r.interpolate?i.curve=N(r.interpolate,h.curveLinear):void 0!==t.defaultInterpolate?i.curve=N(t.defaultInterpolate,h.curveLinear):i.curve=N($e.curve,h.curveLinear),r.text=r.title,void 0===r.text?void 0!==r.style&&(i.arrowheadStyle="fill: #333"):(i.arrowheadStyle="fill: #333",i.labelpos="c",_t().flowchart.htmlLabels,i.labelType="text",i.label=r.text.replace(_.lineBreakRegex,"\n"),void 0===r.style&&(i.style=i.style||"stroke: #333; stroke-width: 1.5px;fill:none"),i.labelStyle=i.labelStyle.replace("color:","fill:")),e.setEdge(r.id1,r.id2,i,n)}))}(s,a);var u=Object(h.select)('[id="'.concat(e,'"]'));u.attr("xmlns:xlink","http://www.w3.org/1999/xlink");var l=Object(h.select)("#"+e+" g");Ue(l,a,["aggregation","extension","composition","dependency"],"classDiagram",e);var f=u.node().getBBox(),d=f.width+16,p=f.height+16;if(c.debug("new ViewBox 0 0 ".concat(d," ").concat(p),"translate(".concat(8-a._label.marginx,", ").concat(8-a._label.marginy,")")),W(u,p,d,n.useMaxWidth),u.attr("viewBox","0 0 ".concat(d," ").concat(p)),u.select("g").attr("transform","translate(".concat(8-a._label.marginx,", ").concat(8-f.y,")")),!n.htmlLabels)for(var y=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),g=0;g=0;n--)r.attributes.push(e[n]),c.debug("Added attribute ",e[n].attributeName)},getEntities:function(){return He},addRelationship:function(t,e,n,r){var i={entityA:t,roleA:e,entityB:n,relSpec:r};Ge.push(i),c.debug("Added new relationship :",i)},getRelationships:function(){return Ge},clear:function(){He={},Ge=[],Xe=""},setTitle:function(t){Xe=t},getTitle:function(){return Xe}},Ke=n(75),Je=n.n(Ke),tn={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},en=tn,nn=function(t,e){var n;t.append("defs").append("marker").attr("id",tn.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),t.append("defs").append("marker").attr("id",tn.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",tn.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M9,0 L9,18"),(n=t.append("defs").append("marker").attr("id",tn.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,0 L21,18"),t.append("defs").append("marker").attr("id",tn.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),t.append("defs").append("marker").attr("id",tn.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),(n=t.append("defs").append("marker").attr("id",tn.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),(n=t.append("defs").append("marker").attr("id",tn.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",e.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",e.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")},rn={},an=function(t,e,n){var r;return Object.keys(e).forEach((function(i){var a=t.append("g").attr("id",i);r=void 0===r?i:r;var o="entity-"+i,s=a.append("text").attr("class","er entityLabel").attr("id",o).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","middle").attr("style","font-family: "+_t().fontFamily+"; font-size: "+rn.fontSize+"px").text(i),c=function(t,e,n){var r=rn.entityPadding/3,i=rn.entityPadding/3,a=.85*rn.fontSize,o=e.node().getBBox(),s=[],c=0,u=0,l=o.height+2*r,h=1;n.forEach((function(n){var i="".concat(e.node().id,"-attr-").concat(h),o=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-type")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+_t().fontFamily+"; font-size: "+a+"px").text(n.attributeType),f=t.append("text").attr("class","er entityLabel").attr("id","".concat(i,"-name")).attr("x",0).attr("y",0).attr("dominant-baseline","middle").attr("text-anchor","left").attr("style","font-family: "+_t().fontFamily+"; font-size: "+a+"px").text(n.attributeName);s.push({tn:o,nn:f});var d=o.node().getBBox(),p=f.node().getBBox();c=Math.max(c,d.width),u=Math.max(u,p.width),l+=Math.max(d.height,p.height)+2*r,h+=1}));var f={width:Math.max(rn.minEntityWidth,Math.max(o.width+2*rn.entityPadding,c+u+4*i)),height:n.length>0?l:Math.max(rn.minEntityHeight,o.height+2*rn.entityPadding)},d=Math.max(0,f.width-(c+u)-4*i);if(n.length>0){e.attr("transform","translate("+f.width/2+","+(r+o.height/2)+")");var p=o.height+2*r,y="attributeBoxOdd";s.forEach((function(e){var n=p+r+Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)/2;e.tn.attr("transform","translate("+i+","+n+")");var a=t.insert("rect","#"+e.tn.node().id).attr("class","er ".concat(y)).attr("fill",rn.fill).attr("fill-opacity","100%").attr("stroke",rn.stroke).attr("x",0).attr("y",p).attr("width",c+2*i+d/2).attr("height",e.tn.node().getBBox().height+2*r);e.nn.attr("transform","translate("+(parseFloat(a.attr("width"))+i)+","+n+")"),t.insert("rect","#"+e.nn.node().id).attr("class","er ".concat(y)).attr("fill",rn.fill).attr("fill-opacity","100%").attr("stroke",rn.stroke).attr("x","".concat(a.attr("x")+a.attr("width"))).attr("y",p).attr("width",u+2*i+d/2).attr("height",e.nn.node().getBBox().height+2*r),p+=Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)+2*r,y="attributeBoxOdd"==y?"attributeBoxEven":"attributeBoxOdd"}))}else f.height=Math.max(rn.minEntityHeight,l),e.attr("transform","translate("+f.width/2+","+f.height/2+")");return f}(a,s,e[i].attributes),u=c.width,l=c.height,h=a.insert("rect","#"+o).attr("class","er entityBox").attr("fill",rn.fill).attr("fill-opacity","100%").attr("stroke",rn.stroke).attr("x",0).attr("y",0).attr("width",u).attr("height",l).node().getBBox();n.setNode(i,{width:h.width,height:h.height,shape:"rect",id:i})})),r},on=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},sn=0,cn=function(t){for(var e=Object.keys(t),n=0;n=0&&(n=!0)})),n},Dn=function(t,e){var n=[];return t.nodes.forEach((function(r,i){Nn(e,r)||n.push(t.nodes[i])})),{nodes:n}},Ln={parseDirective:function(t,e,n){vs.parseDirective(this,t,e,n)},defaultConfig:function(){return yt.flowchart},addVertex:function(t,e,n,r,i,a){var o,s=t;void 0!==s&&0!==s.trim().length&&(void 0===gn[s]&&(gn[s]={id:s,domId:"flowchart-"+s+"-"+pn,styles:[],classes:[]}),pn++,void 0!==e?(yn=_t(),'"'===(o=_.sanitizeText(e.trim(),yn))[0]&&'"'===o[o.length-1]&&(o=o.substring(1,o.length-1)),gn[s].text=o):void 0===gn[s].text&&(gn[s].text=t),void 0!==n&&(gn[s].type=n),null!=r&&r.forEach((function(t){gn[s].styles.push(t)})),null!=i&&i.forEach((function(t){gn[s].classes.push(t)})),void 0!==a&&(gn[s].dir=a))},lookUpDomId:Tn,addLink:function(t,e,n,r){var i,a;for(i=0;i/)&&(fn="LR"),fn.match(/.*v/)&&(fn="TB")},setClass:Sn,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(_n["gen-1"===dn?Tn(t):t]=_.sanitizeText(e,yn))}))},getTooltip:function(t){return _n[t]},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){var r=Tn(t);if("loose"===_t().securityLevel&&void 0!==e){var i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var a=0;a=0)&&r.push(t))})),dir:e}}(a.concat.apply(a,e)),s=o.nodeList,u=o.dir;if(a=s,"gen-1"===dn){c.warn("LOOKING UP");for(var l=0;l0&&function t(e,n){var r=bn[n].nodes;if(!((On+=1)>2e3)){if(Bn[On]=n,bn[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i=0){var s=t(e,o);if(s.result)return{result:!0,count:a+s.count};a+=s.count}i+=1}return{result:!1,count:a}}}("none",bn.length-1)},getSubGraphs:function(){return bn},destructLink:function(t,e){var n,r=function(t){var e=t.trim(),n=e.slice(0,-1),r="arrow_open";switch(e.slice(-1)){case"x":r="arrow_cross","x"===e[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===e[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===e[0]&&(r="double_"+r,n=n.slice(1))}var i="normal",a=n.length-1;"="===n[0]&&(i="thick");var o=function(t,e){for(var n=e.length,r=0,i=0;in.height/2-a)){var o=a*a*(1-r*r/(i*i));0!=o&&(o=Math.sqrt(o)),o=a-o,t.y-n.y>0&&(o=-o),e.y+=o}return e},c}function Kn(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("transform","translate("+-e/2+","+n/2+")")}var Jn={addToRender:function(t){t.shapes().question=zn,t.shapes().hexagon=Un,t.shapes().stadium=Xn,t.shapes().subroutine=Zn,t.shapes().cylinder=Qn,t.shapes().rect_left_inv_arrow=$n,t.shapes().lean_right=qn,t.shapes().lean_left=Wn,t.shapes().trapezoid=Vn,t.shapes().inv_trapezoid=Hn,t.shapes().rect_right_inv_arrow=Gn},addToRenderV2:function(t){t({question:zn}),t({hexagon:Un}),t({stadium:Xn}),t({subroutine:Zn}),t({cylinder:Qn}),t({rect_left_inv_arrow:$n}),t({lean_right:qn}),t({lean_left:Wn}),t({trapezoid:Vn}),t({inv_trapezoid:Hn}),t({rect_right_inv_arrow:Gn})}},tr={},er=function(t,e,n){var r=Object(h.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var o,s=L(i.styles),u=void 0!==i.text?i.text:i.id;if(x(_t().flowchart.htmlLabels)){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=Yn()(r,l).node()).parentNode.removeChild(o)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var f=u.split(_.lineBreakRegex),d=0;d').concat(a.text.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")})),"")):(u.labelType="text",u.label=a.text.replace(_.lineBreakRegex,"\n"),void 0===a.style&&(u.style=u.style||"stroke: #333; stroke-width: 1.5px;fill:none"),u.labelStyle=u.labelStyle.replace("color:","fill:"))),u.id=o,u.class=s+" "+c,u.minlen=a.length||1,e.setEdge(Ln.lookUpDomId(a.start),Ln.lookUpDomId(a.end),u,i)}))},rr=function(t){for(var e=Object.keys(t),n=0;n=0;f--)i=l[f],Ln.addVertex(i.id,i.title,"group",void 0,i.classes);var d=Ln.getVertices();c.warn("Get vertices",d);var p=Ln.getEdges(),y=0;for(y=l.length-1;y>=0;y--){i=l[y],Object(h.selectAll)("cluster").append("text");for(var g=0;g0&&(a=i.classes.join(" "));var o,s=L(i.styles),u=void 0!==i.text?i.text:i.id;if(x(_t().flowchart.htmlLabels)){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=Yn()(r,l).node()).parentNode.removeChild(o)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var f=u.split(_.lineBreakRegex),d=0;d=0;f--)i=l[f],c.info("Subgraph - ",i),Ln.addVertex(i.id,i.title,"group",void 0,i.classes,i.dir);var d=Ln.getVertices(),p=Ln.getEdges();c.info(p);var y=0;for(y=l.length-1;y>=0;y--){i=l[y],Object(h.selectAll)("cluster").append("text");for(var g=0;g=6&&n.indexOf("weekends")>=0||(n.indexOf(t.format("dddd").toLowerCase())>=0||n.indexOf(t.format(e.trim()))>=0)},Ar=function(t,e,n){if(n.length&&!t.manualEndTime){var r=o()(t.startTime,e,!0);r.add(1,"d");var i=o()(t.endTime,e,!0),a=Mr(r,i,e,n);t.endTime=i.toDate(),t.renderEndTime=a}},Mr=function(t,e,n,r){for(var i=!1,a=null;t<=e;)i||(a=e.toDate()),(i=Sr(t,n,r))&&e.add(1,"d"),t.add(1,"d");return a},Or=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var i=null;if(r[1].split(" ").forEach((function(t){var e=Fr(t);void 0!==e&&(i?e.endTime>i.endTime&&(i=e):i=e)})),i)return i.endTime;var a=new Date;return a.setHours(0,0,0,0),a}var s=o()(n,e.trim(),!0);return s.isValid()?s.toDate():(c.debug("Invalid date:"+n),c.debug("With date format:"+e.trim()),new Date)},Br=function(t,e){if(null!==t)switch(t[2]){case"s":e.add(t[1],"seconds");break;case"m":e.add(t[1],"minutes");break;case"h":e.add(t[1],"hours");break;case"d":e.add(t[1],"days");break;case"w":e.add(t[1],"weeks")}return e.toDate()},Nr=function(t,e,n,r){r=r||!1,n=n.trim();var i=o()(n,e.trim(),!0);return i.isValid()?(r&&i.add(1,"d"),i.toDate()):Br(/^([\d]+)([wdhms])/.exec(n.trim()),o()(t))},Dr=0,Lr=function(t){return void 0===t?"task"+(Dr+=1):t},Ir=[],Rr={},Fr=function(t){var e=Rr[t];return Ir[e]},Pr=function(){for(var t=function(t){var e=Ir[t],n="";switch(Ir[t].raw.startTime.type){case"prevTaskEnd":var r=Fr(e.prevTaskId);e.startTime=r.endTime;break;case"getStartDate":(n=Or(0,pr,Ir[t].raw.startTime.startData))&&(Ir[t].startTime=n)}return Ir[t].startTime&&(Ir[t].endTime=Nr(Ir[t].startTime,pr,Ir[t].raw.endTime.data,Er),Ir[t].endTime&&(Ir[t].processed=!0,Ir[t].manualEndTime=o()(Ir[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Ar(Ir[t],pr,vr))),Ir[t].processed},e=!0,n=0;nr?i=1:n0&&(e=t.classes.join(" "));for(var r=0,i=0;ir-e?r+o+1.5*n.leftPadding>l?e+i-5:r+i+5:(r-e)/2+e+i})).attr("y",(function(t,i){return t.order*e+n.barHeight/2+(n.fontSize/2-2)+r})).attr("text-height",a).attr("class",(function(t){var e=s(t.startTime),r=s(t.endTime);t.milestone&&(r=e+a);var i=this.getBBox().width,o="";t.classes.length>0&&(o=t.classes.join(" "));for(var u=0,h=0;hr-e?r+i+1.5*n.leftPadding>l?o+" taskTextOutsideLeft taskTextOutside"+u+" "+f:o+" taskTextOutsideRight taskTextOutside"+u+" "+f+" width-"+i:o+" taskText taskText"+u+" "+f+" width-"+i}))}(t,a,u,d,i,0,e),function(t,e){for(var r=[],i=0,a=0;a0&&a.setAttribute("dy","1em"),a.textContent=e[i],r.appendChild(a)}return r})).attr("x",10).attr("y",(function(n,a){if(!(a>0))return n[1]*t/2+e;for(var o=0;oe.seq?t:e}),t[0]),n="";t.forEach((function(t){n+=t===e?"\t*":"\t|"}));var r,i,a,o=[n,e.id,e.seq];for(var s in Zr)Zr[s]===e.id&&o.push(s);if(c.debug(o.join(" ")),Array.isArray(e.parent)){var u=Gr[e.parent[0]];ri(t,e,u),t.push(Gr[e.parent[1]])}else{if(null==e.parent)return;var l=Gr[e.parent];ri(t,e,l)}r=t,i=function(t){return t.id},a=Object.create(null),ii(t=r.reduce((function(t,e){var n=i(e);return a[n]||(a[n]=!0,t.push(e)),t}),[]))}var ai,oi=function(){var t=Object.keys(Gr).map((function(t){return Gr[t]}));return t.forEach((function(t){c.debug(t.id)})),t.sort((function(t,e){return e.seq-t.seq})),t},si={setDirection:function(t){Kr=t},setOptions:function(t){c.debug("options str",t),t=(t=t&&t.trim())||"{}";try{ni=JSON.parse(t)}catch(t){c.error("error while parsing gitGraph options",t.message)}},getOptions:function(){return ni},commit:function(t){var e={id:ti(),message:t,seq:Jr++,parent:null==Xr?null:Xr.id};Xr=e,Gr[e.id]=e,Zr[Qr]=e.id,c.debug("in pushCommit "+e.id)},branch:function(t){Zr[t]=null!=Xr?Xr.id:null,c.debug("in createBranch")},merge:function(t){var e=Gr[Zr[Qr]],n=Gr[Zr[t]];if(function(t,e){return t.seq>e.seq&&ei(e,t)}(e,n))c.debug("Already merged");else{if(ei(e,n))Zr[Qr]=Zr[t],Xr=Gr[Zr[Qr]];else{var r={id:ti(),message:"merged branch "+t+" into "+Qr,seq:Jr++,parent:[null==Xr?null:Xr.id,Zr[t]]};Xr=r,Gr[r.id]=r,Zr[Qr]=r.id}c.debug(Zr),c.debug("in mergeBranch")}},checkout:function(t){c.debug("in checkout");var e=Zr[Qr=t];Xr=Gr[e]},reset:function(t){c.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?Xr:Gr[Zr[e]];for(c.debug(r,n);n>0;)if(n--,!(r=Gr[r.parent])){var i="Critical error - unique parent commit not found during reset";throw c.error(i),i}Xr=r,Zr[Qr]=r.id},prettyPrint:function(){c.debug(Gr),ii([oi()[0]])},clear:function(){Gr={},Zr={master:Xr=null},Qr="master",Jr=0},getBranchesAsObjArray:function(){var t=[];for(var e in Zr)t.push({name:e,commit:Gr[Zr[e]]});return t},getBranches:function(){return Zr},getCommits:function(){return Gr},getCommitsArray:oi,getCurrentBranch:function(){return Qr},getDirection:function(){return Kr},getHead:function(){return Xr}},ci=n(72),ui=n.n(ci),li={},hi={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},fi={};function di(t,e,n,r){var i=N(r,h.curveBasis),a=hi.branchColors[n%hi.branchColors.length],o=Object(h.line)().x((function(t){return Math.round(t.x)})).y((function(t){return Math.round(t.y)})).curve(i);t.append("svg:path").attr("d",o(e)).style("stroke",a).style("stroke-width",hi.lineStrokeWidth).style("fill","none")}function pi(t,e){e=e||t.node().getBBox();var n=t.node().getCTM();return{left:n.e+e.x*n.a,top:n.f+e.y*n.d,width:e.width,height:e.height}}function yi(t,e,n,r,i){c.debug("svgDrawLineForCommits: ",e,n);var a=pi(t.select("#node-"+e+" circle")),o=pi(t.select("#node-"+n+" circle"));switch(r){case"LR":if(a.left-o.left>hi.nodeSpacing){var s={x:a.left-hi.nodeSpacing,y:o.top+o.height/2};di(t,[s,{x:o.left+o.width,y:o.top+o.height/2}],i,"linear"),di(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-hi.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-hi.nodeSpacing/2,y:s.y},s],i)}else di(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-hi.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-hi.nodeSpacing/2,y:o.top+o.height/2},{x:o.left+o.width,y:o.top+o.height/2}],i);break;case"BT":if(o.top-a.top>hi.nodeSpacing){var u={x:o.left+o.width/2,y:a.top+a.height+hi.nodeSpacing};di(t,[u,{x:o.left+o.width/2,y:o.top}],i,"linear"),di(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+a.height+hi.nodeSpacing/2},{x:o.left+o.width/2,y:u.y-hi.nodeSpacing/2},u],i)}else di(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+hi.nodeSpacing/2},{x:o.left+o.width/2,y:o.top-hi.nodeSpacing/2},{x:o.left+o.width/2,y:o.top}],i)}}function gi(t,e){return t.select(e).node().cloneNode(!0)}function vi(t,e,n,r){var i,a=Object.keys(li).length;if("string"==typeof e)do{if(i=li[e],c.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append((function(){return gi(t,"#def-commit")})).attr("class","commit").attr("id",(function(){return"node-"+i.id})).attr("transform",(function(){switch(r){case"LR":return"translate("+(i.seq*hi.nodeSpacing+hi.leftMargin)+", "+ai*hi.branchOffset+")";case"BT":return"translate("+(ai*hi.branchOffset+hi.leftMargin)+", "+(a-i.seq)*hi.nodeSpacing+")"}})).attr("fill",hi.nodeFillColor).attr("stroke",hi.nodeStrokeColor).attr("stroke-width",hi.nodeStrokeWidth);var o=void 0;for(var s in n)if(n[s].commit===i){o=n[s];break}o&&(c.debug("found branch ",o.name),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(o.name+", ")),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===r&&t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),e=i.parent}while(e&&li[e]);Array.isArray(e)&&(c.debug("found merge commmit",e),vi(t,e[0],n,r),ai++,vi(t,e[1],n,r),ai--)}function mi(t,e,n,r){for(r=r||0;e.seq>0&&!e.lineDrawn;)"string"==typeof e.parent?(yi(t,e.id,e.parent,n,r),e.lineDrawn=!0,e=li[e.parent]):Array.isArray(e.parent)&&(yi(t,e.id,e.parent[0],n,r),yi(t,e.id,e.parent[1],n,r+1),mi(t,li[e.parent[1]],n,r+1),e.lineDrawn=!0,e=li[e.parent[0]])}var bi,xi=function(t){fi=t},_i=function(t,e,n){try{var r=ui.a.parser;r.yy=si,r.yy.clear(),c.debug("in gitgraph renderer",t+"\n","id:",e,n),r.parse(t+"\n"),hi=Object.assign(hi,fi,si.getOptions()),c.debug("effective options",hi);var i=si.getDirection();li=si.getCommits();var a=si.getBranchesAsObjArray();"BT"===i&&(hi.nodeLabel.x=a.length*hi.branchOffset,hi.nodeLabel.width="100%",hi.nodeLabel.y=-2*hi.nodeRadius);var o=Object(h.select)('[id="'.concat(e,'"]'));for(var s in function(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",hi.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",hi.nodeLabel.width).attr("height",hi.nodeLabel.height).attr("x",hi.nodeLabel.x).attr("y",hi.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(o),ai=1,a){var u=a[s];vi(o,u.commit.id,a,i),mi(o,u.commit,i),ai++}o.attr("height",(function(){return"BT"===i?Object.keys(li).length*hi.nodeSpacing:(a.length+1)*hi.branchOffset}))}catch(t){c.error("Error while rendering gitgraph"),c.error(t.message)}},ki="",wi=!1,Ei={setMessage:function(t){c.debug("Setting message to: "+t),ki=t},getMessage:function(){return ki},setInfo:function(t){wi=t},getInfo:function(){return wi}},Ti=n(73),Ci=n.n(Ti),Si={},Ai=function(t){Object.keys(t).forEach((function(e){Si[e]=t[e]}))},Mi=function(t,e,n){try{var r=Ci.a.parser;r.yy=Ei,c.debug("Renering info diagram\n"+t),r.parse(t),c.debug("Parsed info diagram");var i=Object(h.select)("#"+e);i.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),i.attr("height",100),i.attr("width",400)}catch(t){c.error("Error while rendering info diagram"),c.error(t.message)}},Oi=n(74),Bi=n.n(Oi),Ni={},Di="",Li=!1,Ii={parseDirective:function(t,e,n){vs.parseDirective(this,t,e,n)},getConfig:function(){return _t().pie},addSection:function(t,e){void 0===Ni[t]&&(Ni[t]=e,c.debug("Added new section :",t))},getSections:function(){return Ni},cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){Ni={},Di="",Li=!1},setTitle:function(t){Di=t},getTitle:function(){return Di},setShowData:function(t){Li=t},getShowData:function(){return Li}},Ri=_t(),Fi=function(t,e){try{Ri=_t();var n=Bi.a.parser;n.yy=Ii,c.debug("Rendering info diagram\n"+t),n.yy.clear(),n.parse(t),c.debug("Parsed info diagram");var r=document.getElementById(e);void 0===(bi=r.parentElement.offsetWidth)&&(bi=1200),void 0!==Ri.useWidth&&(bi=Ri.useWidth),void 0!==Ri.pie.useWidth&&(bi=Ri.pie.useWidth);var i=Object(h.select)("#"+e);W(i,450,bi,Ri.pie.useMaxWidth),r.setAttribute("viewBox","0 0 "+bi+" 450");var a=Math.min(bi,450)/2-40,o=i.append("g").attr("transform","translate("+bi/2+",225)"),s=Ii.getSections(),u=0;Object.keys(s).forEach((function(t){u+=s[t]}));var l=Ri.themeVariables,f=[l.pie1,l.pie2,l.pie3,l.pie4,l.pie5,l.pie6,l.pie7,l.pie8,l.pie9,l.pie10,l.pie11,l.pie12],d=Object(h.scaleOrdinal)().domain(s).range(f),p=Object(h.pie)().value((function(t){return t.value}))(Object(h.entries)(s)),y=Object(h.arc)().innerRadius(0).outerRadius(a);o.selectAll("mySlices").data(p).enter().append("path").attr("d",y).attr("fill",(function(t){return d(t.data.key)})).attr("class","pieCircle"),o.selectAll("mySlices").data(p.filter((function(t){return 0!==t.data.value}))).enter().append("text").text((function(t){return(t.data.value/u*100).toFixed(0)+"%"})).attr("transform",(function(t){return"translate("+y.centroid(t)+")"})).style("text-anchor","middle").attr("class","slice"),o.append("text").text(n.yy.getTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var g=o.selectAll(".legend").data(d.domain()).enter().append("g").attr("class","legend").attr("transform",(function(t,e){return"translate(216,"+(22*e-22*d.domain().length/2)+")"}));g.append("rect").attr("width",18).attr("height",18).style("fill",d).style("stroke",d),g.data(p.filter((function(t){return 0!==t.data.value}))).append("text").attr("x",22).attr("y",14).text((function(t){return n.yy.getShowData()||Ri.showData||Ri.pie.showData?t.data.key+" ["+t.data.value+"]":t.data.key}))}catch(t){c.error("Error while rendering info diagram"),c.error(t)}},Pi=n(45),ji=n.n(Pi),Yi=[],zi={},Ui={},$i={},qi={},Wi={RequirementType:{REQUIREMENT:"Requirement",FUNCTIONAL_REQUIREMENT:"Functional Requirement",INTERFACE_REQUIREMENT:"Interface Requirement",PERFORMANCE_REQUIREMENT:"Performance Requirement",PHYSICAL_REQUIREMENT:"Physical Requirement",DESIGN_CONSTRAINT:"Design Constraint"},RiskLevel:{LOW_RISK:"Low",MED_RISK:"Medium",HIGH_RISK:"High"},VerifyType:{VERIFY_ANALYSIS:"Analysis",VERIFY_DEMONSTRATION:"Demonstration",VERIFY_INSPECTION:"Inspection",VERIFY_TEST:"Test"},Relationships:{CONTAINS:"contains",COPIES:"copies",DERIVES:"derives",SATISFIES:"satisfies",VERIFIES:"verifies",REFINES:"refines",TRACES:"traces"},parseDirective:function(t,e,n){vs.parseDirective(this,t,e,n)},getConfig:function(){return _t().req},addRequirement:function(t,e){return void 0===Ui[t]&&(Ui[t]={name:t,type:e,id:zi.id,text:zi.text,risk:zi.risk,verifyMethod:zi.verifyMethod}),zi={},Ui[t]},getRequirements:function(){return Ui},setNewReqId:function(t){void 0!==zi&&(zi.id=t)},setNewReqText:function(t){void 0!==zi&&(zi.text=t)},setNewReqRisk:function(t){void 0!==zi&&(zi.risk=t)},setNewReqVerifyMethod:function(t){void 0!==zi&&(zi.verifyMethod=t)},addElement:function(t){return void 0===qi[t]&&(qi[t]={name:t,type:$i.type,docRef:$i.docRef},c.info("Added new requirement: ",t)),$i={},qi[t]},getElements:function(){return qi},setNewElementType:function(t){void 0!==$i&&($i.type=t)},setNewElementDocRef:function(t){void 0!==$i&&($i.docRef=t)},addRelationship:function(t,e,n){Yi.push({type:t,src:e,dst:n})},getRelationships:function(){return Yi},clear:function(){Yi=[],zi={},Ui={},$i={},qi={}}},Vi={CONTAINS:"contains",ARROW:"arrow"},Hi=Vi,Gi=function(t,e){var n=t.append("defs").append("marker").attr("id",Vi.CONTAINS+"_line_ending").attr("refX",0).attr("refY",e.line_height/2).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("g");n.append("circle").attr("cx",e.line_height/2).attr("cy",e.line_height/2).attr("r",e.line_height/2).attr("fill","none"),n.append("line").attr("x1",0).attr("x2",e.line_height).attr("y1",e.line_height/2).attr("y2",e.line_height/2).attr("stroke-width",1),n.append("line").attr("y1",0).attr("y2",e.line_height).attr("x1",e.line_height/2).attr("x2",e.line_height/2).attr("stroke-width",1),t.append("defs").append("marker").attr("id",Vi.ARROW+"_line_ending").attr("refX",e.line_height).attr("refY",.5*e.line_height).attr("markerWidth",e.line_height).attr("markerHeight",e.line_height).attr("orient","auto").append("path").attr("d","M0,0\n L".concat(e.line_height,",").concat(e.line_height/2,"\n M").concat(e.line_height,",").concat(e.line_height/2,"\n L0,").concat(e.line_height)).attr("stroke-width",1)},Xi={},Zi=0,Qi=function(t,e){return t.insert("rect","#"+e).attr("class","req reqBox").attr("x",0).attr("y",0).attr("width",Xi.rect_min_width+"px").attr("height",Xi.rect_min_height+"px")},Ki=function(t,e,n){var r=Xi.rect_min_width/2,i=t.append("text").attr("class","req reqLabel reqTitle").attr("id",e).attr("x",r).attr("y",Xi.rect_padding).attr("dominant-baseline","hanging"),a=0;n.forEach((function(t){0==a?i.append("tspan").attr("text-anchor","middle").attr("x",Xi.rect_min_width/2).attr("dy",0).text(t):i.append("tspan").attr("text-anchor","middle").attr("x",Xi.rect_min_width/2).attr("dy",.75*Xi.line_height).text(t),a++}));var o=1.5*Xi.rect_padding+a*Xi.line_height*.75;return t.append("line").attr("class","req-title-line").attr("x1","0").attr("x2",Xi.rect_min_width).attr("y1",o).attr("y2",o),{titleNode:i,y:o}},Ji=function(t,e,n,r){var i=t.append("text").attr("class","req reqLabel").attr("id",e).attr("x",Xi.rect_padding).attr("y",r).attr("dominant-baseline","hanging"),a=0,o=[];return n.forEach((function(t){for(var e=t.length;e>30&&a<3;){var n=t.substring(0,30);e=(t=t.substring(30,t.length)).length,o[o.length]=n,a++}if(3==a){var r=o[o.length-1];o[o.length-1]=r.substring(0,r.length-4)+"..."}else o[o.length]=t;a=0})),o.forEach((function(t){i.append("tspan").attr("x",Xi.rect_padding).attr("dy",Xi.line_height).text(t)})),i},ta=function(t,e,n,r){var i=n.edge(ea(e.src),ea(e.dst)),a=Object(h.line)().x((function(t){return t.x})).y((function(t){return t.y})),o=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",a(i.points)).attr("fill","none");e.type==Wi.Relationships.CONTAINS?o.attr("marker-start","url("+_.getUrl(Xi.arrowMarkerAbsolute)+"#"+e.type+"_line_ending)"):(o.attr("stroke-dasharray","10,7"),o.attr("marker-end","url("+_.getUrl(Xi.arrowMarkerAbsolute)+"#"+Hi.ARROW+"_line_ending)")),function(t,e,n,r){var i=e.node().getTotalLength(),a=e.node().getPointAtLength(.5*i),o="rel"+Zi;Zi++;var s=t.append("text").attr("class","req relationshipLabel").attr("id",o).attr("x",a.x).attr("y",a.y).attr("text-anchor","middle").attr("dominant-baseline","middle").text(r).node().getBBox();t.insert("rect","#"+o).attr("class","req reqLabelBox").attr("x",a.x-s.width/2).attr("y",a.y-s.height/2).attr("width",s.width).attr("height",s.height).attr("fill","white").attr("fill-opacity","85%")}(t,o,0,"<<".concat(e.type,">>"))},ea=function(t){return t.replace(/\s/g,"").replace(/\./g,"_")},na=function(t){if(void 0!==t)for(var e=Object.keys(t),n=0;n>"),"".concat(e.name)]);s.push(u.titleNode);var l=Ji(n,t+"_body",["Id: ".concat(e.id),"Text: ".concat(e.text),"Risk: ".concat(e.risk),"Verification: ".concat(e.verifyMethod)],u.y);s.push(l);var h=o.node().getBBox();i.setNode(t,{width:h.width,height:h.height,shape:"rect",id:t})})),function(t,e,n){Object.keys(t).forEach((function(r){var i=t[r],a=ea(r),o=n.append("g").attr("id",a),s="element-"+a,c=Qi(o,s),u=[],l=Ki(o,s+"_title",["<>","".concat(r)]);u.push(l.titleNode);var h=Ji(o,s+"_body",["Type: ".concat(i.type||"Not Specified"),"Doc Ref: ".concat(i.docRef||"None")],l.y);u.push(h);var f=c.node().getBBox();e.setNode(a,{width:f.width,height:f.height,shape:"rect",id:a})}))}(u,o,n),function(t,e){t.forEach((function(t){var n=ea(t.src),r=ea(t.dst);e.setEdge(n,r,{relationship:t})}))}(l,o),Yt.a.layout(o),function(t,e){e.nodes().forEach((function(n){void 0!==n&&void 0!==e.node(n)&&(t.select("#"+n),t.select("#"+n).attr("transform","translate("+(e.node(n).x-e.node(n).width/2)+","+(e.node(n).y-e.node(n).height/2)+" )"))}))}(n,o),l.forEach((function(t){ta(n,t,o,e)}));var f=Xi.rect_padding,d=n.node().getBBox(),p=d.width+2*f,y=d.height+2*f;W(n,y,p,Xi.useMaxWidth),n.attr("viewBox","".concat(d.x-f," ").concat(d.y-f," ").concat(p," ").concat(y))},ia=n(2),aa=n.n(ia),oa=void 0,sa={},ca=[],ua=[],la="",ha=!1,fa=!1,da=!1,pa=function(t,e,n){var r=sa[t];r&&e===r.name&&null==n||(null!=n&&null!=n.text||(n={text:e,wrap:null}),sa[t]={name:e,description:n.text,wrap:void 0===n.wrap&&va()||!!n.wrap,prevActor:oa},oa&&sa[oa]&&(sa[oa].nextActor=t),oa=t)},ya=function(t){var e,n=0;for(e=0;e2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===ma.ACTIVE_END){var i=ya(t.actor);if(i<1){var a=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw a.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},a}}return ca.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&va()||!!n.wrap,type:r}),!0},va=function(){return da},ma={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ba=function(t,e,n){var r={actor:t,placement:e,message:n.text,wrap:void 0===n.wrap&&va()||!!n.wrap},i=[].concat(t,t);ua.push(r),ca.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&va()||!!n.wrap,type:ma.NOTE,placement:e})},xa=function(t){la=t.text,ha=void 0===t.wrap&&va()||!!t.wrap},_a={addActor:pa,addMessage:function(t,e,n,r){ca.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&va()||!!n.wrap,answer:r})},addSignal:ga,autoWrap:va,setWrap:function(t){da=t},enableSequenceNumbers:function(){fa=!0},showSequenceNumbers:function(){return fa},getMessages:function(){return ca},getActors:function(){return sa},getActor:function(t){return sa[t]},getActorKeys:function(){return Object.keys(sa)},getTitle:function(){return la},parseDirective:function(t,e,n){vs.parseDirective(this,t,e,n)},getConfig:function(){return _t().sequence},getTitleWrapped:function(){return ha},clear:function(){sa={},ca=[]},parseMessage:function(t){var e=t.trim(),n={text:e.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^[:]?wrap:/)||null===e.match(/^[:]?nowrap:/)&&void 0};return c.debug("parseMessage:",n),n},LINETYPE:ma,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:ba,setTitle:xa,apply:function t(e){if(e instanceof Array)e.forEach((function(e){t(e)}));else switch(e.type){case"addActor":pa(e.actor,e.actor,e.description);break;case"activeStart":case"activeEnd":ga(e.actor,void 0,void 0,e.signalType);break;case"addNote":ba(e.actor,e.placement,e.text);break;case"addMessage":ga(e.from,e.to,e.msg,e.signalType);break;case"loopStart":ga(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":ga(void 0,void 0,void 0,e.signalType);break;case"rectStart":ga(void 0,void 0,e.color,e.signalType);break;case"rectEnd":ga(void 0,void 0,void 0,e.signalType);break;case"optStart":ga(void 0,void 0,e.optText,e.signalType);break;case"optEnd":ga(void 0,void 0,void 0,e.signalType);break;case"altStart":case"else":ga(void 0,void 0,e.altText,e.signalType);break;case"altEnd":ga(void 0,void 0,void 0,e.signalType);break;case"setTitle":xa(e.text);break;case"parStart":case"and":ga(void 0,void 0,e.parText,e.signalType);break;case"parEnd":ga(void 0,void 0,void 0,e.signalType)}}},ka=function(t,e){var n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},wa=function(t,e){var n=0,r=0,i=e.text.split(_.lineBreakRegex),a=[],o=0,s=function(){return e.y};if(void 0!==e.valign&&void 0!==e.textMargin&&e.textMargin>0)switch(e.valign){case"top":case"start":s=function(){return Math.round(e.y+e.textMargin)};break;case"middle":case"center":s=function(){return Math.round(e.y+(n+r+e.textMargin)/2)};break;case"bottom":case"end":s=function(){return Math.round(e.y+(n+r+2*e.textMargin)-e.textMargin)}}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="text-after-edge",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="text-before-edge",e.alignmentBaseline="middle"}for(var c=0;c0&&(r+=(l._groups||l)[0][0].getBBox().height,n=r),a.push(l)}return a},Ea=function(t,e){var n,r,i,a,o,s=t.append("polygon");return s.attr("points",(n=e.x,r=e.y,i=e.width,a=e.height,n+","+r+" "+(n+i)+","+r+" "+(n+i)+","+(r+a-(o=7))+" "+(n+i-1.2*o)+","+(r+a)+" "+n+","+(r+a))),s.attr("class","labelBox"),e.y=e.y+e.height/2,wa(t,e),s},Ta=-1,Ca=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},Sa=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Aa=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var u=c.actorFontSize,l=c.actorFontFamily,h=c.actorFontWeight,f=t.split(_.lineBreakRegex),d=0;d0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:Ba.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},Na=function(t){return{fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}},Da=function(t){return{fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}},La=function(t){return{fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}},Ia=function(t,e,n,r){for(var i=0,a=0,o=0;o0&&o.forEach((function(r){if(n=r,i.startx===i.stopx){var a=e[t.from],o=e[t.to];n.from=Math.min(a.x-i.width/2,a.x-a.width/2,n.from),n.to=Math.max(o.x+i.width/2,o.x+a.width/2,n.to),n.width=Math.max(n.width,Math.abs(n.to-n.from))-Oa.labelBoxWidth}else n.from=Math.min(i.startx,n.from),n.to=Math.max(i.stopx,n.to),n.width=Math.max(n.width,i.width)-Oa.labelBoxWidth})))})),Ba.activations=[],c.debug("Loop type widths:",a),a},$a={bounds:Ba,drawActors:Ia,setConf:Ra,draw:function(t,e){Oa=_t().sequence,ia.parser.yy.clear(),ia.parser.yy.setWrap(Oa.wrap),ia.parser.parse(t+"\n"),Ba.init(),c.debug("C:".concat(JSON.stringify(Oa,null,2)));var n=Object(h.select)('[id="'.concat(e,'"]')),r=ia.parser.yy.getActors(),i=ia.parser.yy.getActorKeys(),a=ia.parser.yy.getMessages(),o=ia.parser.yy.getTitle(),s=Ya(r,a);Oa.height=za(r,s),Ia(n,r,i,0);var u=Ua(a,r,s);Ma.insertArrowHead(n),Ma.insertArrowCrossHead(n),Ma.insertArrowFilledHead(n),Ma.insertSequenceNumber(n);var l=1;a.forEach((function(t){var e,i,a;switch(t.type){case ia.parser.yy.LINETYPE.NOTE:i=t.noteModel,function(t,e){Ba.bumpVerticalPos(Oa.boxMargin),e.height=Oa.boxMargin,e.starty=Ba.getVerticalPos();var n=Ma.getNoteRect();n.x=e.startx,n.y=e.starty,n.width=e.width||Oa.width,n.class="note";var r=t.append("g"),i=Ma.drawRect(r,n),a=Ma.getTextObj();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=Oa.noteFontFamily,a.fontSize=Oa.noteFontSize,a.fontWeight=Oa.noteFontWeight,a.anchor=Oa.noteAlign,a.textMargin=Oa.noteMargin,a.valign=Oa.noteAlign;var o=wa(r,a),s=Math.round(o.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));i.attr("height",s+2*Oa.noteMargin),e.height+=s+2*Oa.noteMargin,Ba.bumpVerticalPos(s+2*Oa.noteMargin),e.stopy=e.starty+s+2*Oa.noteMargin,e.stopx=e.startx+n.width,Ba.insert(e.startx,e.starty,e.stopx,e.stopy),Ba.models.addNote(e)}(n,i);break;case ia.parser.yy.LINETYPE.ACTIVE_START:Ba.newActivation(t,n,r);break;case ia.parser.yy.LINETYPE.ACTIVE_END:!function(t,e){var r=Ba.endActivation(t);r.starty+18>e&&(r.starty=e-6,e+=12),Ma.drawActivation(n,r,e,Oa,Fa(t.from.actor).length),Ba.insert(r.startx,e-10,r.stopx,e)}(t,Ba.getVerticalPos());break;case ia.parser.yy.LINETYPE.LOOP_START:ja(u,t,Oa.boxMargin,Oa.boxMargin+Oa.boxTextMargin,(function(t){return Ba.newLoop(t)}));break;case ia.parser.yy.LINETYPE.LOOP_END:e=Ba.endLoop(),Ma.drawLoop(n,e,"loop",Oa),Ba.bumpVerticalPos(e.stopy-Ba.getVerticalPos()),Ba.models.addLoop(e);break;case ia.parser.yy.LINETYPE.RECT_START:ja(u,t,Oa.boxMargin,Oa.boxMargin,(function(t){return Ba.newLoop(void 0,t.message)}));break;case ia.parser.yy.LINETYPE.RECT_END:e=Ba.endLoop(),Ma.drawBackgroundRect(n,e),Ba.models.addLoop(e),Ba.bumpVerticalPos(e.stopy-Ba.getVerticalPos());break;case ia.parser.yy.LINETYPE.OPT_START:ja(u,t,Oa.boxMargin,Oa.boxMargin+Oa.boxTextMargin,(function(t){return Ba.newLoop(t)}));break;case ia.parser.yy.LINETYPE.OPT_END:e=Ba.endLoop(),Ma.drawLoop(n,e,"opt",Oa),Ba.bumpVerticalPos(e.stopy-Ba.getVerticalPos()),Ba.models.addLoop(e);break;case ia.parser.yy.LINETYPE.ALT_START:ja(u,t,Oa.boxMargin,Oa.boxMargin+Oa.boxTextMargin,(function(t){return Ba.newLoop(t)}));break;case ia.parser.yy.LINETYPE.ALT_ELSE:ja(u,t,Oa.boxMargin+Oa.boxTextMargin,Oa.boxMargin,(function(t){return Ba.addSectionToLoop(t)}));break;case ia.parser.yy.LINETYPE.ALT_END:e=Ba.endLoop(),Ma.drawLoop(n,e,"alt",Oa),Ba.bumpVerticalPos(e.stopy-Ba.getVerticalPos()),Ba.models.addLoop(e);break;case ia.parser.yy.LINETYPE.PAR_START:ja(u,t,Oa.boxMargin,Oa.boxMargin+Oa.boxTextMargin,(function(t){return Ba.newLoop(t)}));break;case ia.parser.yy.LINETYPE.PAR_AND:ja(u,t,Oa.boxMargin+Oa.boxTextMargin,Oa.boxMargin,(function(t){return Ba.addSectionToLoop(t)}));break;case ia.parser.yy.LINETYPE.PAR_END:e=Ba.endLoop(),Ma.drawLoop(n,e,"par",Oa),Ba.bumpVerticalPos(e.stopy-Ba.getVerticalPos()),Ba.models.addLoop(e);break;default:try{(a=t.msgModel).starty=Ba.getVerticalPos(),a.sequenceIndex=l,function(t,e){Ba.bumpVerticalPos(10);var n=e.startx,r=e.stopx,i=e.starty,a=e.message,o=e.type,s=e.sequenceIndex,c=_.splitBreaks(a).length,u=V.calculateTextDimensions(a,Na(Oa)),l=u.height/c;e.height+=l,Ba.bumpVerticalPos(l);var h=Ma.getTextObj();h.x=n,h.y=i+10,h.width=r-n,h.class="messageText",h.dy="1em",h.text=a,h.fontFamily=Oa.messageFontFamily,h.fontSize=Oa.messageFontSize,h.fontWeight=Oa.messageFontWeight,h.anchor=Oa.messageAlign,h.valign=Oa.messageAlign,h.textMargin=Oa.wrapPadding,h.tspan=!1,wa(t,h);var f,d,p=u.height-10,y=u.width;if(n===r){d=Ba.getVerticalPos()+p,Oa.rightAngles?f=t.append("path").attr("d","M ".concat(n,",").concat(d," H ").concat(n+Math.max(Oa.width/2,y/2)," V ").concat(d+25," H ").concat(n)):(p+=Oa.boxMargin,d=Ba.getVerticalPos()+p,f=t.append("path").attr("d","M "+n+","+d+" C "+(n+60)+","+(d-10)+" "+(n+60)+","+(d+30)+" "+n+","+(d+20))),p+=30;var g=Math.max(y/2,Oa.width/2);Ba.insert(n-g,Ba.getVerticalPos()-10+p,r+g,Ba.getVerticalPos()+30+p)}else p+=Oa.boxMargin,d=Ba.getVerticalPos()+p,(f=t.append("line")).attr("x1",n),f.attr("y1",d),f.attr("x2",r),f.attr("y2",d),Ba.insert(n,d-10,r,d);o===ia.parser.yy.LINETYPE.DOTTED||o===ia.parser.yy.LINETYPE.DOTTED_CROSS||o===ia.parser.yy.LINETYPE.DOTTED_POINT||o===ia.parser.yy.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");var v="";Oa.arrowMarkerAbsolute&&(v=(v=(v=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","none"),f.style("fill","none"),o!==ia.parser.yy.LINETYPE.SOLID&&o!==ia.parser.yy.LINETYPE.DOTTED||f.attr("marker-end","url("+v+"#arrowhead)"),o!==ia.parser.yy.LINETYPE.SOLID_POINT&&o!==ia.parser.yy.LINETYPE.DOTTED_POINT||f.attr("marker-end","url("+v+"#filled-head)"),o!==ia.parser.yy.LINETYPE.SOLID_CROSS&&o!==ia.parser.yy.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+v+"#crosshead)"),(_a.showSequenceNumbers()||Oa.showSequenceNumbers)&&(f.attr("marker-start","url("+v+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",d+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("textLength","16px").attr("class","sequenceNumber").text(s)),Ba.bumpVerticalPos(p),e.height+=p,e.stopy=e.starty+e.height,Ba.insert(e.fromBounds,e.starty,e.toBounds,e.stopy)}(n,a),Ba.models.addMessage(a)}catch(t){c.error("error while drawing message",t)}}[ia.parser.yy.LINETYPE.SOLID_OPEN,ia.parser.yy.LINETYPE.DOTTED_OPEN,ia.parser.yy.LINETYPE.SOLID,ia.parser.yy.LINETYPE.DOTTED,ia.parser.yy.LINETYPE.SOLID_CROSS,ia.parser.yy.LINETYPE.DOTTED_CROSS,ia.parser.yy.LINETYPE.SOLID_POINT,ia.parser.yy.LINETYPE.DOTTED_POINT].includes(t.type)&&l++})),Oa.mirrorActors&&(Ba.bumpVerticalPos(2*Oa.boxMargin),Ia(n,r,i,Ba.getVerticalPos()));var f=Ba.getBounds().bounds;c.debug("For line height fix Querying: #"+e+" .actor-line"),Object(h.selectAll)("#"+e+" .actor-line").attr("y2",f.stopy);var d=f.stopy-f.starty+2*Oa.diagramMarginY;Oa.mirrorActors&&(d=d-Oa.boxMargin+Oa.bottomMarginAdj);var p=f.stopx-f.startx+2*Oa.diagramMarginX;o&&n.append("text").text(o).attr("x",(f.stopx-f.startx)/2-2*Oa.diagramMarginX).attr("y",-25),W(n,d,p,Oa.useMaxWidth);var y=o?40:0;n.attr("viewBox",f.startx-Oa.diagramMarginX+" -"+(Oa.diagramMarginY+y)+" "+p+" "+(d+y)),c.debug("models:",Ba.models)}},qa=n(22),Wa=n.n(qa);function Va(t){return(Va="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ha,Ga=function(t){return JSON.parse(JSON.stringify(t))},Xa=[],Za={root:{relations:[],states:{},documents:{}}},Qa=Za.root,Ka=0,Ja=function(t,e,n,r,i){void 0===Qa.states[t]?Qa.states[t]={id:t,descriptions:[],type:e,doc:n,note:i}:(Qa.states[t].doc||(Qa.states[t].doc=n),Qa.states[t].type||(Qa.states[t].type=e)),r&&(c.info("Adding state ",t,r),"string"==typeof r&&no(t,r.trim()),"object"===Va(r)&&r.forEach((function(e){return no(t,e.trim())}))),i&&(Qa.states[t].note=i)},to=function(){Qa=(Za={root:{relations:[],states:{},documents:{}}}).root,Qa=Za.root,Ka=0,0,io=[]},eo=function(t,e,n){var r=t,i=e,a="default",o="default";"[*]"===t&&(r="start"+ ++Ka,a="start"),"[*]"===e&&(i="end"+Ka,o="end"),Ja(r,a),Ja(i,o),Qa.relations.push({id1:r,id2:i,title:n})},no=function(t,e){var n=Qa.states[t],r=e;":"===r[0]&&(r=r.substr(1).trim()),n.descriptions.push(r)},ro=0,io=[],ao="TB",oo={parseDirective:function(t,e,n){vs.parseDirective(this,t,e,n)},getConfig:function(){return _t().state},addState:Ja,clear:to,getState:function(t){return Qa.states[t]},getStates:function(){return Qa.states},getRelations:function(){return Qa.relations},getClasses:function(){return io},getDirection:function(){return ao},addRelation:eo,getDividerId:function(){return"divider-id-"+ ++ro},setDirection:function(t){ao=t},cleanupLabel:function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},lineType:{LINE:0,DOTTED_LINE:1},relationType:{AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3},logDocuments:function(){c.info("Documents = ",Za)},getRootDoc:function(){return Xa},setRootDoc:function(t){c.info("Setting root doc",t),Xa=t},getRootDocV2:function(){return function t(e,n,r){if("relation"===n.stmt)t(e,n.state1,!0),t(e,n.state2,!1);else if("state"===n.stmt&&"[*]"===n.id&&(n.id=r?e.id+"_start":e.id+"_end",n.start=r),n.doc){var i=[],a=0,o=[];for(a=0;a0&&o.length>0){var c={stmt:"state",id:R(),type:"divider",doc:Ga(o)};i.push(Ga(c)),n.doc=i}n.doc.forEach((function(e){return t(n,e,!0)}))}}({id:"root"},{id:"root",doc:Xa},!0),{id:"root",doc:Xa}},extract:function(t){var e;e=t.doc?t.doc:t,c.info(e),to(),c.info("Extract",e),e.forEach((function(t){"state"===t.stmt&&Ja(t.id,t.type,t.doc,t.description,t.note),"relation"===t.stmt&&eo(t.state1.id,t.state2.id,t.description)}))},trimColon:function(t){return t&&":"===t[0]?t.substr(1).trim():t.trim()}},so={},co=function(t,e){so[t]=e},uo=function(t,e){var n=t.append("text").attr("x",2*_t().state.padding).attr("y",_t().state.textHeight+1.3*_t().state.padding).attr("font-size",_t().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",_t().state.padding).attr("y",r+.4*_t().state.padding+_t().state.dividerMargin+_t().state.textHeight).attr("class","state-description"),a=!0,o=!0;e.descriptions.forEach((function(t){a||(!function(t,e,n){var r=t.append("tspan").attr("x",2*_t().state.padding).text(e);n||r.attr("dy",_t().state.textHeight)}(i,t,o),o=!1),a=!1}));var s=t.append("line").attr("x1",_t().state.padding).attr("y1",_t().state.padding+r+_t().state.dividerMargin/2).attr("y2",_t().state.padding+r+_t().state.dividerMargin/2).attr("class","descr-divider"),c=i.node().getBBox(),u=Math.max(c.width,n.width);return s.attr("x2",u+3*_t().state.padding),t.insert("rect",":first-child").attr("x",_t().state.padding).attr("y",_t().state.padding).attr("width",u+2*_t().state.padding).attr("height",c.height+r+2*_t().state.padding).attr("rx",_t().state.radius),t},lo=function(t,e,n){var r,i=_t().state.padding,a=2*_t().state.padding,o=t.node().getBBox(),s=o.width,c=o.x,u=t.append("text").attr("x",0).attr("y",_t().state.titleShift).attr("font-size",_t().state.fontSize).attr("class","state-title").text(e.id),l=u.node().getBBox().width+a,h=Math.max(l,s);h===s&&(h+=a);var f=t.node().getBBox();e.doc,r=c-i,l>s&&(r=(s-h)/2+i),Math.abs(c-f.x)s&&(r=c-(l-s)/2);var d=1-_t().state.textHeight;return t.insert("rect",":first-child").attr("x",r).attr("y",d).attr("class",n?"alt-composit":"composit").attr("width",h).attr("height",f.height+_t().state.textHeight+_t().state.titleShift+1).attr("rx","0"),u.attr("x",r+i),l<=s&&u.attr("x",c+(h-a)/2-l/2+i),t.insert("rect",":first-child").attr("x",r).attr("y",_t().state.titleShift-_t().state.textHeight-_t().state.padding).attr("width",h).attr("height",3*_t().state.textHeight).attr("rx",_t().state.radius),t.insert("rect",":first-child").attr("x",r).attr("y",_t().state.titleShift-_t().state.textHeight-_t().state.padding).attr("width",h).attr("height",f.height+3+2*_t().state.textHeight).attr("rx",_t().state.radius),t},ho=function(t,e){e.attr("class","state-note");var n=e.append("rect").attr("x",0).attr("y",_t().state.padding),r=function(t,e,n,r){var i=0,a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");var o=t.replace(/\r\n/g,"
"),s=(o=o.replace(/\n/g,"
")).split(_.lineBreakRegex),c=1.25*_t().state.noteMargin,u=!0,l=!1,h=void 0;try{for(var f,d=s[Symbol.iterator]();!(u=(f=d.next()).done);u=!0){var p=f.value.trim();if(p.length>0){var y=a.append("tspan");if(y.text(p),0===c)c+=y.node().getBBox().height;i+=c,y.attr("x",e+_t().state.noteMargin),y.attr("y",n+i+1.25*_t().state.noteMargin)}}}catch(t){l=!0,h=t}finally{try{u||null==d.return||d.return()}finally{if(l)throw h}}return{textWidth:a.node().getBBox().width,textHeight:i}}(t,0,0,e.append("g")),i=r.textWidth,a=r.textHeight;return n.attr("height",a+2*_t().state.noteMargin),n.attr("width",i+2*_t().state.noteMargin),n},fo=function(t,e){var n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&function(t){t.append("circle").attr("class","start-state").attr("r",_t().state.sizeUnit).attr("cx",_t().state.padding+_t().state.sizeUnit).attr("cy",_t().state.padding+_t().state.sizeUnit)}(i),"end"===e.type&&function(t){t.append("circle").attr("class","end-state-outer").attr("r",_t().state.sizeUnit+_t().state.miniPadding).attr("cx",_t().state.padding+_t().state.sizeUnit+_t().state.miniPadding).attr("cy",_t().state.padding+_t().state.sizeUnit+_t().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",_t().state.sizeUnit).attr("cx",_t().state.padding+_t().state.sizeUnit+2).attr("cy",_t().state.padding+_t().state.sizeUnit+2)}(i),"fork"!==e.type&&"join"!==e.type||function(t,e){var n=_t().state.forkWidth,r=_t().state.forkHeight;if(e.parentId){var i=n;n=r,r=i}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",_t().state.padding).attr("y",_t().state.padding)}(i,e),"note"===e.type&&ho(e.note.text,i),"divider"===e.type&&function(t){t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",_t().state.textHeight).attr("class","divider").attr("x2",2*_t().state.textHeight).attr("y1",0).attr("y2",0)}(i),"default"===e.type&&0===e.descriptions.length&&function(t,e){var n=t.append("text").attr("x",2*_t().state.padding).attr("y",_t().state.textHeight+2*_t().state.padding).attr("font-size",_t().state.fontSize).attr("class","state-title").text(e.id),r=n.node().getBBox();t.insert("rect",":first-child").attr("x",_t().state.padding).attr("y",_t().state.padding).attr("width",r.width+2*_t().state.padding).attr("height",r.height+2*_t().state.padding).attr("rx",_t().state.radius)}(i,e),"default"===e.type&&e.descriptions.length>0&&uo(i,e);var a=i.node().getBBox();return r.width=a.width+2*_t().state.padding,r.height=a.height+2*_t().state.padding,co(n,r),r},po=0;qa.parser.yy=oo;var yo={},go=function t(e,n,r,i){var a,o=new Ut.a.Graph({compound:!0,multigraph:!0}),s=!0;for(a=0;a "+t.w+": "+JSON.stringify(o.edge(t))),function(t,e,n){e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var r=e.points,i=Object(h.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(h.curveBasis),a=t.append("path").attr("d",i(r)).attr("id","edge"+po).attr("class","transition"),o="";if(_t().state.arrowMarkerAbsolute&&(o=(o=(o=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),a.attr("marker-end","url("+o+"#"+function(t){switch(t){case oo.relationType.AGGREGATION:return"aggregation";case oo.relationType.EXTENSION:return"extension";case oo.relationType.COMPOSITION:return"composition";case oo.relationType.DEPENDENCY:return"dependency"}}(oo.relationType.DEPENDENCY)+"End)"),void 0!==n.title){for(var s=t.append("g").attr("class","stateLabel"),u=V.calcLabelPosition(e.points),l=u.x,f=u.y,d=_.getRows(n.title),p=0,y=[],g=0,v=0,m=0;m<=d.length;m++){var b=s.append("text").attr("text-anchor","middle").text(d[m]).attr("x",l).attr("y",f+p),x=b.node().getBBox();if(g=Math.max(g,x.width),v=Math.min(v,x.x),c.info(x.x,l,f+p),0===p){var k=b.node().getBBox();p=k.height,c.info("Title height",p,f)}y.push(b)}var w=p*d.length;if(d.length>1){var E=(d.length-1)*p*.5;y.forEach((function(t,e){return t.attr("y",f+e*p-E)})),w=p*d.length}var T=s.node().getBBox();s.insert("rect",":first-child").attr("class","box").attr("x",l-g/2-_t().state.padding/2).attr("y",f-w/2-_t().state.padding/2-3.5).attr("width",g+_t().state.padding).attr("height",w+_t().state.padding),c.info(T)}po++}(n,o.edge(t),o.edge(t).relation))})),w=k.getBBox();var E={id:r||"root",label:r||"root",width:0,height:0};return E.width=w.width+2*Ha.padding,E.height=w.height+2*Ha.padding,c.debug("Doc rendered",E,o),E},vo=function(){},mo=function(t,e){Ha=_t().state,qa.parser.yy.clear(),qa.parser.parse(t),c.debug("Rendering diagram "+t);var n=Object(h.select)("[id='".concat(e,"']"));n.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z"),new Ut.a.Graph({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}}));var r=oo.getRootDoc();go(r,n,void 0,!1);var i=Ha.padding,a=n.node().getBBox(),o=a.width+2*i,s=a.height+2*i;W(n,s,1.75*o,Ha.useMaxWidth),n.attr("viewBox","".concat(a.x-Ha.padding," ").concat(a.y-Ha.padding," ")+o+" "+s)},bo={},xo={},_o=function(t,e,n,r){if("root"!==n.id){var i="rect";!0===n.start&&(i="start"),!1===n.start&&(i="end"),"default"!==n.type&&(i=n.type),xo[n.id]||(xo[n.id]={id:n.id,shape:i,description:n.id,classes:"statediagram-state"}),n.description&&(Array.isArray(xo[n.id].description)?(xo[n.id].shape="rectWithTitle",xo[n.id].description.push(n.description)):xo[n.id].description.length>0?(xo[n.id].shape="rectWithTitle",xo[n.id].description===n.id?xo[n.id].description=[n.description]:xo[n.id].description=[xo[n.id].description,n.description]):(xo[n.id].shape="rect",xo[n.id].description=n.description)),!xo[n.id].type&&n.doc&&(c.info("Setting cluster for ",n.id,Eo(n)),xo[n.id].type="group",xo[n.id].dir=Eo(n),xo[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",xo[n.id].classes=xo[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var a={labelStyle:"",shape:xo[n.id].shape,labelText:xo[n.id].description,classes:xo[n.id].classes,style:"",id:n.id,dir:xo[n.id].dir,domId:"state-"+n.id+"-"+ko,type:xo[n.id].type,padding:15};if(n.note){var o={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note-"+ko,domId:"state-"+n.id+"----note-"+ko,type:xo[n.id].type,padding:15},s={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:xo[n.id].classes,style:"",id:n.id+"----parent",domId:"state-"+n.id+"----parent-"+ko,type:"group",padding:0};ko++,t.setNode(n.id+"----parent",s),t.setNode(o.id,o),t.setNode(n.id,a),t.setParent(n.id,n.id+"----parent"),t.setParent(o.id,n.id+"----parent");var u=n.id,l=o.id;"left of"===n.note.position&&(u=o.id,l=n.id),t.setEdge(u,l,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else t.setNode(n.id,a)}e&&"root"!==e.id&&(c.trace("Setting node ",n.id," to be child of its parent ",e.id),t.setParent(n.id,e.id)),n.doc&&(c.trace("Adding nodes children "),wo(t,n,n.doc,!r))},ko=0,wo=function(t,e,n,r){c.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)_o(t,e,n,r);else if("relation"===n.stmt){_o(t,e,n.state1,r),_o(t,e,n.state2,r);var i={id:"edge"+ko,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:n.description,arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},a=n.state1.id,o=n.state2.id;t.setEdge(a,o,i,ko),ko++}}))},Eo=function(t,e){var n=e||"TB";if(t.doc)for(var r=0;r/gi," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(n),r},Yo=-1,zo=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},Uo=function(){function t(t,e,n,i,a,o,s,c){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("font-color",c).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c,u){for(var l=c.taskFontSize,h=c.taskFontFamily,f=t.split(//gi),d=0;d3?function(t){var e=Object(h.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+o.cx+","+(o.cy+2)+")")}(s):o.score<3?function(t){var e=Object(h.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+o.cx+","+(o.cy+7)+")")}(s):function(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",o.cx-5).attr("y1",o.cy+7).attr("x2",o.cx+5).attr("y2",o.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(s);var c=zo();c.x=e.x,c.y=e.y,c.fill=e.fill,c.width=n.width,c.height=n.height,c.class="task task-type-"+e.num,c.rx=3,c.ry=3,Fo(i,c);var u=e.x+14;e.people.forEach((function(t){var n=e.actors[t],r={cx:u,cy:e.y,r:7,fill:n,stroke:"#000",title:t};Po(i,r),u+=10})),Uo(n)(e.task,i,c.x,c.y,c.width,c.height,{class:"task"},n,e.colour)},Ho=function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")};Io.parser.yy=Lo;var Go={};var Xo=_t().journey,Zo=_t().journey.leftMargin,Qo={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i,a=_t().journey,o=this,s=0;this.sequenceItems.forEach((function(c){s++;var u=o.sequenceItems.length-s+1;o.updateVal(c,"starty",e-u*a.boxMargin,Math.min),o.updateVal(c,"stopy",r+u*a.boxMargin,Math.max),o.updateVal(Qo.data,"startx",t-u*a.boxMargin,Math.min),o.updateVal(Qo.data,"stopx",n+u*a.boxMargin,Math.max),"activation"!==i&&(o.updateVal(c,"startx",t-u*a.boxMargin,Math.min),o.updateVal(c,"stopx",n+u*a.boxMargin,Math.max),o.updateVal(Qo.data,"starty",e-u*a.boxMargin,Math.min),o.updateVal(Qo.data,"stopy",r+u*a.boxMargin,Math.max))}))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(Qo.data,"startx",i,Math.min),this.updateVal(Qo.data,"starty",o,Math.min),this.updateVal(Qo.data,"stopx",a,Math.max),this.updateVal(Qo.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},Ko=Xo.sectionFills,Jo=Xo.sectionColours,ts=function(t,e,n){for(var r=_t().journey,i="",a=n+(2*r.height+r.diagramMarginY),o=0,s="#CCC",c="black",u=0,l=0;l tspan {\n fill: ").concat(t.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(t.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(t.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(t.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(t.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .messageText {\n fill: ").concat(t.signalTextColor,";\n stroke: ").concat(t.signalTextColor,";\n }\n\n .labelBox {\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(t.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(t.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n")},gantt:function(t){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: '.concat(t.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(t.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(t.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n // font-size: ").concat(t.ganttFontSize,";\n // text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(t.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(t.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n // .taskText:not([font-size]) {\n // font-size: ").concat(t.ganttFontSize,";\n // }\n\n .taskTextOutsideRight {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: start;\n // font-size: ").concat(t.ganttFontSize,";\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: end;\n // font-size: ").concat(t.ganttFontSize,";\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(t.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(t.taskBkgColor,";\n stroke: ").concat(t.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(t.activeTaskBkgColor,";\n stroke: ").concat(t.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(t.doneTaskBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(t.textColor," ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n")},classDiagram:os,"classDiagram-v2":os,class:os,stateDiagram:cs,state:cs,git:function(){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n"},info:function(){return""},pie:function(t){return"\n .pieCircle{\n stroke: ".concat(t.pieStrokeColor,";\n stroke-width : ").concat(t.pieStrokeWidth,";\n opacity : ").concat(t.pieOpacity,";\n }\n .pieTitleText {\n text-anchor: middle;\n font-size: ").concat(t.pieTitleTextSize,";\n fill: ").concat(t.pieTitleTextColor,";\n font-family: ").concat(t.fontFamily,";\n }\n .slice {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.pieSectionTextColor,";\n font-size:").concat(t.pieSectionTextSize,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(t.pieLegendTextColor,";\n font-family: ").concat(t.fontFamily,";\n font-size: ").concat(t.pieLegendTextSize,";\n }\n")},er:function(t){return"\n .entityBox {\n fill: ".concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxOdd {\n fill: #ffffff;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxEven {\n fill: #f2f2f2;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(t.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(t.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(t.lineColor,";\n }\n")},journey:function(t){return".label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ".concat(t.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(t.textColor,"\n }\n\n .legend {\n fill: ").concat(t.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(t.textColor,"\n }\n\n .face {\n fill: #FFF8DC;\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType7):"",";\n }\n")},requirement:function(t){return"\n\n marker {\n fill: ".concat(t.relationColor,";\n stroke: ").concat(t.relationColor,";\n }\n\n marker.cross {\n stroke: ").concat(t.lineColor,";\n }\n\n svg {\n font-family: ").concat(t.fontFamily,";\n font-size: ").concat(t.fontSize,";\n }\n\n .reqBox {\n fill: ").concat(t.requirementBackground,";\n fill-opacity: 100%;\n stroke: ").concat(t.requirementBorderColor,";\n stroke-width: ").concat(t.requirementBorderSize,";\n }\n \n .reqTitle, .reqLabel{\n fill: ").concat(t.requirementTextColor,";\n }\n .reqLabelBox {\n fill: ").concat(t.relationLabelBackground,";\n fill-opacity: 100%;\n }\n\n .req-title-line {\n stroke: ").concat(t.requirementBorderColor,";\n stroke-width: ").concat(t.requirementBorderSize,";\n }\n .relationshipLine {\n stroke: ").concat(t.relationColor,";\n stroke-width: 1;\n }\n .relationshipLabel {\n fill: ").concat(t.relationLabelColor,";\n }\n\n")}},ls=function(t,e,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n stroke: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(us[t](n),"\n\n ").concat(e,"\n")};function hs(t){return(hs="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var fs={},ds=function(t,e,n){switch(c.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),e.args,wt(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;default:c.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}};function ps(t){xi(t.git),rr(t.flowchart),ur(t.flowchart),void 0!==t.sequenceDiagram&&$a.setConf(P(t.sequence,t.sequenceDiagram)),$a.setConf(t.sequence),Vr(t.gantt),ie(t.class),vo(t.state),To(t.state),Ai(t.class),cn(t.er),es(t.journey),na(t.requirement),is(t.class)}function ys(){}var gs=Object.freeze({render:function(t,e,n,r){Et();var i=e,a=V.detectInit(i);a&&wt(a);var o=_t();if(e.length>o.maxTextSize&&(i="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),void 0!==r)r.innerHTML="",Object(h.select)(r).append("div").attr("id","d"+t).attr("style","font-family: "+o.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var s=document.getElementById(t);s&&s.remove();var u=document.querySelector("#d"+t);u&&u.remove(),Object(h.select)("body").append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=i,i=function(t){var e=t;return e=(e=(e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/#\w+;/g,(function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"}))}(i);var l=Object(h.select)("#d"+t).node(),f=V.detectType(i,o),y=l.firstChild,g=y.firstChild,v="";if(void 0!==o.themeCSS&&(v+="\n".concat(o.themeCSS)),void 0!==o.fontFamily&&(v+="\n:root { --mermaid-font-family: ".concat(o.fontFamily,"}")),void 0!==o.altFontFamily&&(v+="\n:root { --mermaid-alt-font-family: ".concat(o.altFontFamily,"}")),"flowchart"===f||"flowchart-v2"===f||"graph"===f){var m=ir(i),b=o.htmlLabels||o.flowchart.htmlLabels;for(var x in m)b?(v+="\n.".concat(x," > * { ").concat(m[x].styles.join(" !important; ")," !important; }"),v+="\n.".concat(x," span { ").concat(m[x].styles.join(" !important; ")," !important; }")):(v+="\n.".concat(x," path { ").concat(m[x].styles.join(" !important; ")," !important; }"),v+="\n.".concat(x," rect { ").concat(m[x].styles.join(" !important; ")," !important; }"),v+="\n.".concat(x," polygon { ").concat(m[x].styles.join(" !important; ")," !important; }"),v+="\n.".concat(x," ellipse { ").concat(m[x].styles.join(" !important; ")," !important; }"),v+="\n.".concat(x," circle { ").concat(m[x].styles.join(" !important; ")," !important; }"),m[x].textStyles&&(v+="\n.".concat(x," tspan { ").concat(m[x].textStyles.join(" !important; ")," !important; }")))}var _=(new d.a)("#".concat(t),ls(f,v,o.themeVariables)),k=document.createElement("style");k.innerHTML=_,y.insertBefore(k,g);try{switch(f){case"git":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,xi(o.git),_i(i,t,!1);break;case"flowchart":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,rr(o.flowchart),ar(i,t,!1);break;case"flowchart-v2":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,ur(o.flowchart),lr(i,t,!1);break;case"sequence":o.sequence.arrowMarkerAbsolute=o.arrowMarkerAbsolute,o.sequenceDiagram?($a.setConf(Object.assign(o.sequence,o.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")):$a.setConf(o.sequence),$a.draw(i,t);break;case"gantt":o.gantt.arrowMarkerAbsolute=o.arrowMarkerAbsolute,Vr(o.gantt),Hr(i,t);break;case"class":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,ie(o.class),ae(i,t);break;case"classDiagram":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,qe(o.class),We(i,t);break;case"state":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,vo(o.state),mo(i,t);break;case"stateDiagram":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,To(o.state),Co(i,t);break;case"info":o.class.arrowMarkerAbsolute=o.arrowMarkerAbsolute,Ai(o.class),Mi(i,t,p.version);break;case"pie":Fi(i,t,p.version);break;case"er":cn(o.er),un(i,t,p.version);break;case"journey":es(o.journey),ns(i,t,p.version);break;case"requirement":na(o.requirement),ra(i,t,p.version)}}catch(e){throw as(t,p.version),e}Object(h.select)('[id="'.concat(t,'"]')).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var w=Object(h.select)("#d"+t).node().innerHTML;if(c.debug("cnf.arrowMarkerAbsolute",o.arrowMarkerAbsolute),o.arrowMarkerAbsolute&&"false"!==o.arrowMarkerAbsolute||(w=w.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),w=(w=function(t){var e=t;return e=(e=(e=e.replace(/fl°°/g,(function(){return"&#"}))).replace(/fl°/g,(function(){return"&"}))).replace(/¶ß/g,(function(){return";"}))}(w)).replace(/
/g,"
"),void 0!==n)switch(f){case"flowchart":case"flowchart-v2":n(w,Ln.bindFunctions);break;case"gantt":n(w,zr.bindFunctions);break;case"class":case"classDiagram":n(w,Pt.bindFunctions);break;default:n(w)}else c.debug("CB = undefined!");var E=Object(h.select)("#d"+t).node();return null!==E&&"function"==typeof E.remove&&Object(h.select)("#d"+t).node().remove(),w},parse:function(t){var e=_t(),n=V.detectInit(t,e);n&&c.debug("reinit ",n);var r,i=V.detectType(t,e);switch(c.debug("Type "+i),i){case"git":(r=ui.a).parser.yy=si;break;case"flowchart":case"flowchart-v2":Ln.clear(),(r=Rn.a).parser.yy=Ln;break;case"sequence":(r=aa.a).parser.yy=_a;break;case"gantt":(r=qr.a).parser.yy=zr;break;case"class":case"classDiagram":(r=qt.a).parser.yy=Pt;break;case"state":case"stateDiagram":(r=Wa.a).parser.yy=oo;break;case"info":c.debug("info info info"),(r=Ci.a).parser.yy=Ei;break;case"pie":c.debug("pie"),(r=Bi.a).parser.yy=Ii;break;case"er":c.debug("er"),(r=Je.a).parser.yy=Qe;break;case"journey":c.debug("Journey"),(r=Ro.a).parser.yy=Lo;break;case"requirement":case"requirementDiagram":c.debug("RequirementDiagram"),(r=ji.a).parser.yy=Wi}return r.parser.yy.graphType=i,r.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},r.parse(t),r},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":fs={};break;case"type_directive":fs.type=e.toLowerCase();break;case"arg_directive":fs.args=JSON.parse(e);break;case"close_directive":ds(t,fs,r),fs=null}}catch(t){c.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),c.error(t.message)}},initialize:function(t){t&&t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),pt=P({},t),t&&t.theme&<[t.theme]?t.themeVariables=lt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=lt.default.getThemeVariables(t.themeVariables));var e="object"===hs(t)?function(t){return gt=P({},yt),gt=P(gt,t),t.theme&&(gt.themeVariables=lt[t.theme].getThemeVariables(t.themeVariables)),mt=bt(gt,vt),gt}(t):xt();ps(e),u(e.logLevel)},reinitialize:ys,getConfig:_t,setConfig:function(t){return P(mt,t),_t()},getSiteConfig:xt,updateSiteConfig:function(t){return gt=P(gt,t),bt(gt,vt),gt},reset:function(){Et()},globalReset:function(){Et(),ps(_t())},defaultConfig:yt});u(_t().logLevel),Et(_t());var vs=gs,ms=function(){bs.startOnLoad?vs.getConfig().startOnLoad&&bs.init():void 0===bs.startOnLoad&&(c.debug("In start, no config"),vs.getConfig().startOnLoad&&bs.init())};"undefined"!=typeof document&& +t.exports={graphlib:n(316),dagre:n(153),intersect:n(375),render:n(377),util:n(15),version:n(389)}},function(t,e,n){"use strict";var r=n(4),i=n(20).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=u*o/s,r=u):(o<0&&(c=-c),n=c,r=c*s/o);return{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};arguments.length>=4&&(i.rank=n,i.order=r);return a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},function(t,e,n){t.exports={graphlib:n(20),layout:n(317),debug:n(373),util:{time:n(9).time,notime:n(9).notime},version:n(374)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(172),i=n(173),a=n(174),o={channel:r.default,lang:i.default,unit:a.default};e.default=o},function(t,e){var n,r,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var c,u=[],l=!1,h=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(c=u,u=[];++h1)for(var n=1;nh&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},F={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),18;case 1:return 7;case 2:return 8;case 3:return 9;case 4:return 10;case 5:return this.begin("type_directive"),19;case 6:return this.popState(),this.begin("arg_directive"),16;case 7:return this.popState(),this.popState(),21;case 8:return 20;case 9:case 10:break;case 11:return 15;case 12:break;case 13:case 14:return 22;case 15:return this.begin("struct"),39;case 16:return"EOF_IN_STRUCT";case 17:return"OPEN_IN_STRUCT";case 18:return this.popState(),41;case 19:break;case 20:return"MEMBER";case 21:return 37;case 22:return 63;case 23:return 56;case 24:return 57;case 25:return 59;case 26:return 42;case 27:return 43;case 28:this.begin("generic");break;case 29:this.popState();break;case 30:return"GENERICTYPE";case 31:this.begin("string");break;case 32:this.popState();break;case 33:return"STR";case 34:this.begin("bqstring");break;case 35:this.popState();break;case 36:return"BQUOTE_STR";case 37:this.begin("href");break;case 38:this.popState();break;case 39:return 62;case 40:this.begin("callback_name");break;case 41:this.popState();break;case 42:this.popState(),this.begin("callback_args");break;case 43:return 60;case 44:this.popState();break;case 45:return 61;case 46:case 47:case 48:case 49:return 58;case 50:case 51:return 51;case 52:case 53:return 53;case 54:return 52;case 55:return 50;case 56:return 54;case 57:return 55;case 58:return 31;case 59:return 38;case 60:return 75;case 61:return"DOT";case 62:return"PLUS";case 63:return 72;case 64:case 65:return"EQUALS";case 66:return 79;case 67:return"PUNCTUATION";case 68:return 78;case 69:return 77;case 70:return 74;case 71:return 24}},rules:[/^(?:%%\{)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:[`])/,/^(?:[`])/,/^(?:[^`]+)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[7,8],inclusive:!1},type_directive:{rules:[6,7],inclusive:!1},open_directive:{rules:[5],inclusive:!1},callback_args:{rules:[44,45],inclusive:!1},callback_name:{rules:[41,42,43],inclusive:!1},href:{rules:[38,39],inclusive:!1},struct:{rules:[16,17,18,19,20],inclusive:!1},generic:{rules:[29,30],inclusive:!1},bqstring:{rules:[35,36],inclusive:!1},string:{rules:[32,33],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,13,14,15,21,22,23,24,25,26,27,28,31,34,37,40,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71],inclusive:!0}}};function P(){this.yy={}}return R.lexer=F,P.prototype=R,R.Parser=P,new P}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e){},function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,i="/"===o.charAt(0))}return(i?"/":"")+(e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"))||"."},e.normalize=function(t){var a=e.isAbsolute(t),o="/"===i(t,-1);return(t=n(r(t.split("/"),(function(t){return!!t})),!a).join("/"))||a||(t="."),t&&o&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=function(t){"string"!=typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=o+1;break}}return-1===e||-1===r||0===a||1===a&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n(12))},function(t,e,n){var r=n(109),i="object"==typeof self&&self&&self.Object===Object&&self,a=r||i||Function("return this")();t.exports=a},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,30],d=[1,23],p=[1,24],y=[1,25],g=[1,26],m=[1,27],v=[1,32],b=[1,33],x=[1,34],_=[1,35],k=[1,31],w=[1,38],T=[1,4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],E=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],C=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],S=[4,5,14,15,17,19,20,22,23,24,25,26,27,36,37,38,39,42,45],A={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CHOICE:25,CONCURRENT:26,note:27,notePosition:28,NOTE_TEXT:29,direction:30,openDirective:31,typeDirective:32,closeDirective:33,":":34,argDirective:35,direction_tb:36,direction_bt:37,direction_rl:38,direction_lr:39,eol:40,";":41,EDGE_STATE:42,left_of:43,right_of:44,open_directive:45,type_directive:46,arg_directive:47,close_directive:48,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CHOICE",26:"CONCURRENT",27:"note",29:"NOTE_TEXT",34:":",36:"direction_tb",37:"direction_bt",38:"direction_rl",39:"direction_lr",41:";",42:"EDGE_STATE",43:"left_of",44:"right_of",45:"open_directive",46:"type_directive",47:"arg_directive",48:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[10,1],[6,3],[6,5],[30,1],[30,1],[30,1],[30,1],[40,1],[40,1],[11,1],[11,1],[28,1],[28,1],[31,1],[32,1],[35,1],[33,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:a[s],type:"choice"};break;case 23:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 24:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:r.setDirection("TB"),this.$={stmt:"dir",value:"TB"};break;case 31:r.setDirection("BT"),this.$={stmt:"dir",value:"BT"};break;case 32:r.setDirection("RL"),this.$={stmt:"dir",value:"RL"};break;case 33:r.setDirection("LR"),this.$={stmt:"dir",value:"LR"};break;case 36:case 37:this.$=a[s];break;case 40:r.parseDirective("%%{","open_directive");break;case 41:r.parseDirective(a[s],"type_directive");break;case 42:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 43:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,31:6,45:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,31:6,45:i},{3:9,4:e,5:n,6:4,7:r,31:6,45:i},{3:10,4:e,5:n,6:4,7:r,31:6,45:i},t([1,4,5,14,15,17,20,22,23,24,25,26,27,36,37,38,39,42,45],a,{8:11}),{32:12,46:[1,13]},{46:[2,40]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},{33:36,34:[1,37],48:w},t([34,48],[2,41]),t(T,[2,6]),{6:28,10:39,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(T,[2,8]),t(T,[2,9]),t(T,[2,10],{12:[1,40],13:[1,41]}),t(T,[2,14]),{16:[1,42]},t(T,[2,16],{18:[1,43]}),{21:[1,44]},t(T,[2,20]),t(T,[2,21]),t(T,[2,22]),t(T,[2,23]),{28:45,29:[1,46],43:[1,47],44:[1,48]},t(T,[2,26]),t(T,[2,27]),t(E,[2,36]),t(E,[2,37]),t(T,[2,30]),t(T,[2,31]),t(T,[2,32]),t(T,[2,33]),t(C,[2,28]),{35:49,47:[1,50]},t(C,[2,43]),t(T,[2,7]),t(T,[2,11]),{11:51,22:f,42:k},t(T,[2,15]),t(S,a,{8:52}),{22:[1,53]},{22:[1,54]},{21:[1,55]},{22:[2,38]},{22:[2,39]},{33:56,48:w},{48:[2,42]},t(T,[2,12],{12:[1,57]}),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,58],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(T,[2,18],{18:[1,59]}),{29:[1,60]},{22:[1,61]},t(C,[2,29]),t(T,[2,13]),t(T,[2,17]),t(S,a,{8:62}),t(T,[2,24]),t(T,[2,25]),{4:o,5:s,6:28,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,63],20:h,22:f,23:d,24:p,25:y,26:g,27:m,30:29,31:6,36:v,37:b,38:x,39:_,42:k,45:i},t(T,[2,19])],defaultActions:{7:[2,40],8:[2,1],9:[2,2],10:[2,3],47:[2,38],48:[2,39],50:[2,42]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 36;case 1:return 37;case 2:return 38;case 3:return 39;case 4:return this.begin("open_directive"),45;case 5:return this.begin("type_directive"),46;case 6:return this.popState(),this.begin("arg_directive"),34;case 7:return this.popState(),this.popState(),48;case 8:return 47;case 9:case 10:break;case 11:return 5;case 12:case 13:case 14:case 15:break;case 16:return this.pushState("SCALE"),15;case 17:return 16;case 18:this.popState();break;case 19:this.pushState("STATE");break;case 20:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 21:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 22:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 23:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 24:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 25:return this.popState(),e.yytext=e.yytext.slice(0,-10).trim(),25;case 26:return 36;case 27:return 37;case 28:return 38;case 29:return 39;case 30:this.begin("STATE_STRING");break;case 31:return this.popState(),this.pushState("STATE_ID"),"AS";case 32:return this.popState(),"ID";case 33:this.popState();break;case 34:return"STATE_DESCR";case 35:return 17;case 36:this.popState();break;case 37:return this.popState(),this.pushState("struct"),18;case 38:return this.popState(),19;case 39:break;case 40:return this.begin("NOTE"),27;case 41:return this.popState(),this.pushState("NOTE_ID"),43;case 42:return this.popState(),this.pushState("NOTE_ID"),44;case 43:this.popState(),this.pushState("FLOATING_NOTE");break;case 44:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 45:break;case 46:return"NOTE_TEXT";case 47:return this.popState(),"ID";case 48:return this.popState(),this.pushState("NOTE_TEXT"),22;case 49:return this.popState(),e.yytext=e.yytext.substr(2).trim(),29;case 50:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),29;case 51:case 52:return 7;case 53:return 14;case 54:return 42;case 55:return 22;case 56:return e.yytext=e.yytext.trim(),12;case 57:return 13;case 58:return 26;case 59:return 5;case 60:return"INVALID"}},rules:[/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:.*\[\[choice\]\])/i,/^(?:.*direction\s+TB[^\n]*)/i,/^(?:.*direction\s+BT[^\n]*)/i,/^(?:.*direction\s+RL[^\n]*)/i,/^(?:.*direction\s+LR[^\n]*)/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[13,14],inclusive:!1},close_directive:{rules:[13,14],inclusive:!1},arg_directive:{rules:[7,8,13,14],inclusive:!1},type_directive:{rules:[6,7,13,14],inclusive:!1},open_directive:{rules:[5,13,14],inclusive:!1},struct:{rules:[13,14,19,26,27,28,29,38,39,40,54,55,56,57,58],inclusive:!1},FLOATING_NOTE_ID:{rules:[47],inclusive:!1},FLOATING_NOTE:{rules:[44,45,46],inclusive:!1},NOTE_TEXT:{rules:[49,50],inclusive:!1},NOTE_ID:{rules:[48],inclusive:!1},NOTE:{rules:[41,42,43],inclusive:!1},SCALE:{rules:[17,18],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[32],inclusive:!1},STATE_STRING:{rules:[33,34],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[13,14,20,21,22,23,24,25,30,31,35,36,37],inclusive:!1},ID:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,9,10,11,12,14,15,16,19,37,40,51,52,53,54,55,56,57,59,60],inclusive:!0}}};function O(){this.yy={}}return A.lexer=M,O.prototype=A,A.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t){t.exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n>>0,r=0;rgt(t)?(a=t+1,s-gt(t)):(a=t,s),{year:a,dayOfYear:o}}function It(t,e,n){var r,i,a=Dt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+Rt(i=t.year()-1,e,n):o>Rt(t.year(),e,n)?(r=o-Rt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Rt(t,e,n){var r=Dt(t,e,n),i=Dt(t+1,e,n);return(gt(t)-r+i)/7}function Ft(t,e){return t.slice(e,7).concat(t.slice(0,e))}q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),P("week",5),P("isoWeek",5),lt("w",Q),lt("ww",Q,G),lt("W",Q),lt("WW",Q,G),yt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),q("d",0,"do","day"),q("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),q("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),q("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),P("day",11),P("weekday",11),P("isoWeekday",11),lt("d",Q),lt("e",Q),lt("E",Q),lt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),lt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),lt("dddd",(function(t,e){return e.weekdaysRegex(t)})),yt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),yt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var Pt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),jt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Yt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zt=ct,Ut=ct,$t=ct;function qt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],u=[];for(e=0;e<7;e++)n=d([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),u.push(r),u.push(i),u.push(a);for(o.sort(t),s.sort(t),c.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),c[e]=ft(c[e]),u[e]=ft(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Wt(){return this.hours()%12||12}function Ht(t,e){q(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Vt(t,e){return e._meridiemParse}q("H",["HH",2],0,"hour"),q("h",["hh",2],0,Wt),q("k",["kk",2],0,(function(){return this.hours()||24})),q("hmm",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)})),q("hmmss",0,0,(function(){return""+Wt.apply(this)+j(this.minutes(),2)+j(this.seconds(),2)})),q("Hmm",0,0,(function(){return""+this.hours()+j(this.minutes(),2)})),q("Hmmss",0,0,(function(){return""+this.hours()+j(this.minutes(),2)+j(this.seconds(),2)})),Ht("a",!0),Ht("A",!1),L("hour","h"),P("hour",13),lt("a",Vt),lt("A",Vt),lt("H",Q),lt("h",Q),lt("k",Q),lt("HH",Q,G),lt("hh",Q,G),lt("kk",Q,G),lt("hmm",J),lt("hmmss",tt),lt("Hmm",J),lt("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var Gt,Xt=xt("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Et,monthsShort:Ct,week:{dow:0,doy:6},weekdays:Pt,weekdaysMin:Yt,weekdaysShort:jt,meridiemParse:/[ap]\.?m?\.?/i},Kt={},Qt={};function Jt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Kt[e]&&void 0!==t&&t&&t.exports)try{r=Gt._abbr,n(202)("./"+e),ee(r)}catch(e){}return Kt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?Gt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),Gt._abbr}function ne(t,e){if(null===e)return delete Kt[t],null;var n,r=Zt;if(e.abbr=t,null!=Kt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Kt[t]._config;else if(null!=e.parentLocale)if(null!=Kt[e.parentLocale])r=Kt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Qt[e.parentLocale]||(Qt[e.parentLocale]=[]),Qt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Kt[t]=new B(N(r,e)),Qt[t]&&Qt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Kt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Gt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a=e&&T(i,n,!0)>=e-1)break;e--}a++}return Gt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11wt(n[0],n[1])?2:n[3]<0||24Rt(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>gt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Bt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Bt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ue=/Z|[+-]\d\d(?::?\d\d)?/,le=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fe=/^\/?Date\((\-?\d+)/i;function de(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=le.length;en.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=De,on.isUTC=De,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Je),on.months=C("months accessor is deprecated. Use month instead",At),on.years=C("years accessor is deprecated. Use year instead",bt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(v(t,this),(t=ve(t))._a){var e=t._isUTC?d(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&0h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},m={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),33;case 1:return this.begin("type_directive"),34;case 2:return this.popState(),this.begin("arg_directive"),26;case 3:return this.popState(),this.popState(),36;case 4:return 35;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 31;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 29;case 19:this.popState();break;case 20:return 30;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 28;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return 17;case 31:return"date";case 32:return 18;case 33:return 19;case 34:return 21;case 35:return 22;case 36:return 26;case 37:return 7;case 38:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:topAxis\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}};function v(){this.yy={}}return g.lexer=m,v.prototype=g,g.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){var r=n(39),i=n(82);t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},function(t,e,n){var r=n(261),i=n(271),a=n(36),o=n(5),s=n(278);t.exports=function(t){return"function"==typeof t?t:null==t?a:"object"==typeof t?o(t)?i(t[0],t[1]):r(t):s(t)}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,9],n=[1,7],r=[1,6],i=[1,8],a=[1,20,21,22,23,38,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],o=[2,10],s=[1,20],c=[1,21],u=[1,22],l=[1,23],h=[1,30],f=[1,59],d=[1,33],p=[1,34],y=[1,35],g=[1,36],m=[1,37],v=[1,53],b=[1,48],x=[1,50],_=[1,45],k=[1,49],w=[1,52],T=[1,56],E=[1,57],C=[1,38],S=[1,39],A=[1,40],M=[1,41],O=[1,58],N=[1,47],B=[1,51],D=[1,54],L=[1,55],I=[1,46],R=[1,62],F=[1,67],P=[1,20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],j=[1,71],Y=[1,70],z=[1,72],U=[20,21,23,70,71],$=[1,93],q=[1,98],W=[1,95],H=[1,100],V=[1,103],G=[1,101],X=[1,102],Z=[1,96],K=[1,108],Q=[1,107],J=[1,97],tt=[1,99],et=[1,104],nt=[1,105],rt=[1,106],it=[1,109],at=[20,21,22,23,70,71],ot=[20,21,22,23,48,70,71],st=[20,21,22,23,40,47,48,50,52,54,56,58,60,62,63,65,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ct=[20,21,23],ut=[20,21,23,47,70,71,81,95,96,99,100,101,103,104,114,115,116,117,118,119],lt=[1,12,20,21,22,23,24,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],ht=[47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],ft=[1,141],dt=[1,149],pt=[1,150],yt=[1,151],gt=[1,152],mt=[1,136],vt=[1,137],bt=[1,133],xt=[1,144],_t=[1,145],kt=[1,146],wt=[1,147],Tt=[1,148],Et=[1,153],Ct=[1,154],St=[1,139],At=[1,142],Mt=[1,138],Ot=[1,135],Nt=[20,21,22,23,38,42,47,76,77,78,79,80,81,95,96,99,100,101,103,104,110,111,112,113,114,115,116,117,118,119],Bt=[1,157],Dt=[20,21,22,23,26,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],Lt=[20,21,22,23,24,26,38,40,41,42,47,51,53,55,57,59,61,62,64,66,70,71,72,76,77,78,79,80,81,82,85,95,96,99,100,101,103,104,105,106,114,115,116,117,118,119],It=[12,21,22,24],Rt=[22,96],Ft=[1,238],Pt=[1,242],jt=[1,239],Yt=[1,236],zt=[1,233],Ut=[1,234],$t=[1,235],qt=[1,237],Wt=[1,240],Ht=[1,241],Vt=[1,243],Gt=[1,260],Xt=[20,21,23,96],Zt=[20,21,22,23,76,92,95,96,99,100,101,102,103,104,105],Kt={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,openDirective:6,typeDirective:7,closeDirective:8,separator:9,":":10,argDirective:11,open_directive:12,type_directive:13,arg_directive:14,close_directive:15,graphConfig:16,document:17,line:18,statement:19,SEMI:20,NEWLINE:21,SPACE:22,EOF:23,GRAPH:24,NODIR:25,DIR:26,FirstStmtSeperator:27,ending:28,endToken:29,spaceList:30,spaceListNewline:31,verticeStatement:32,styleStatement:33,linkStyleStatement:34,classDefStatement:35,classStatement:36,clickStatement:37,subgraph:38,text:39,SQS:40,SQE:41,end:42,direction:43,link:44,node:45,vertex:46,AMP:47,STYLE_SEPARATOR:48,idString:49,PS:50,PE:51,"(-":52,"-)":53,STADIUMSTART:54,STADIUMEND:55,SUBROUTINESTART:56,SUBROUTINEEND:57,CYLINDERSTART:58,CYLINDEREND:59,DIAMOND_START:60,DIAMOND_STOP:61,TAGEND:62,TRAPSTART:63,TRAPEND:64,INVTRAPSTART:65,INVTRAPEND:66,linkStatement:67,arrowText:68,TESTSTR:69,START_LINK:70,LINK:71,PIPE:72,textToken:73,STR:74,keywords:75,STYLE:76,LINKSTYLE:77,CLASSDEF:78,CLASS:79,CLICK:80,DOWN:81,UP:82,textNoTags:83,textNoTagsToken:84,DEFAULT:85,stylesOpt:86,alphaNum:87,CALLBACKNAME:88,CALLBACKARGS:89,HREF:90,LINK_TARGET:91,HEX:92,numList:93,INTERPOLATE:94,NUM:95,COMMA:96,style:97,styleComponent:98,ALPHA:99,COLON:100,MINUS:101,UNIT:102,BRKT:103,DOT:104,PCT:105,TAGSTART:106,alphaNumToken:107,idStringToken:108,alphaNumStatement:109,direction_tb:110,direction_bt:111,direction_rl:112,direction_lr:113,PUNCTUATION:114,UNICODE_TEXT:115,PLUS:116,EQUALS:117,MULT:118,UNDERSCORE:119,graphCodeTokens:120,ARROW_CROSS:121,ARROW_POINT:122,ARROW_CIRCLE:123,ARROW_OPEN:124,QUOTE:125,$accept:0,$end:1},terminals_:{2:"error",10:":",12:"open_directive",13:"type_directive",14:"arg_directive",15:"close_directive",20:"SEMI",21:"NEWLINE",22:"SPACE",23:"EOF",24:"GRAPH",25:"NODIR",26:"DIR",38:"subgraph",40:"SQS",41:"SQE",42:"end",47:"AMP",48:"STYLE_SEPARATOR",50:"PS",51:"PE",52:"(-",53:"-)",54:"STADIUMSTART",55:"STADIUMEND",56:"SUBROUTINESTART",57:"SUBROUTINEEND",58:"CYLINDERSTART",59:"CYLINDEREND",60:"DIAMOND_START",61:"DIAMOND_STOP",62:"TAGEND",63:"TRAPSTART",64:"TRAPEND",65:"INVTRAPSTART",66:"INVTRAPEND",69:"TESTSTR",70:"START_LINK",71:"LINK",72:"PIPE",74:"STR",76:"STYLE",77:"LINKSTYLE",78:"CLASSDEF",79:"CLASS",80:"CLICK",81:"DOWN",82:"UP",85:"DEFAULT",88:"CALLBACKNAME",89:"CALLBACKARGS",90:"HREF",91:"LINK_TARGET",92:"HEX",94:"INTERPOLATE",95:"NUM",96:"COMMA",99:"ALPHA",100:"COLON",101:"MINUS",102:"UNIT",103:"BRKT",104:"DOT",105:"PCT",106:"TAGSTART",110:"direction_tb",111:"direction_bt",112:"direction_rl",113:"direction_lr",114:"PUNCTUATION",115:"UNICODE_TEXT",116:"PLUS",117:"EQUALS",118:"MULT",119:"UNDERSCORE",121:"ARROW_CROSS",122:"ARROW_POINT",123:"ARROW_CIRCLE",124:"ARROW_OPEN",125:"QUOTE"},productions_:[0,[3,1],[3,2],[5,4],[5,6],[6,1],[7,1],[11,1],[8,1],[4,2],[17,0],[17,2],[18,1],[18,1],[18,1],[18,1],[18,1],[16,2],[16,2],[16,2],[16,3],[28,2],[28,1],[29,1],[29,1],[29,1],[27,1],[27,1],[27,2],[31,2],[31,2],[31,1],[31,1],[30,2],[30,1],[19,2],[19,2],[19,2],[19,2],[19,2],[19,2],[19,9],[19,6],[19,4],[19,1],[9,1],[9,1],[9,1],[32,3],[32,4],[32,2],[32,1],[45,1],[45,5],[45,3],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,4],[46,6],[46,4],[46,4],[46,4],[46,4],[46,4],[46,1],[44,2],[44,3],[44,3],[44,1],[44,3],[67,1],[68,3],[39,1],[39,2],[39,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[75,1],[83,1],[83,2],[35,5],[35,5],[36,5],[37,2],[37,4],[37,3],[37,5],[37,2],[37,4],[37,4],[37,6],[37,2],[37,4],[37,2],[37,4],[37,4],[37,6],[33,5],[33,5],[34,5],[34,5],[34,9],[34,9],[34,7],[34,7],[93,1],[93,3],[86,1],[86,3],[97,1],[97,2],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[98,1],[73,1],[73,1],[73,1],[73,1],[73,1],[73,1],[84,1],[84,1],[84,1],[84,1],[49,1],[49,2],[87,1],[87,2],[109,1],[109,1],[109,1],[109,1],[43,1],[43,1],[43,1],[43,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[107,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[108,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1],[120,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:r.parseDirective("%%{","open_directive");break;case 6:r.parseDirective(a[s],"type_directive");break;case 7:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 8:r.parseDirective("}%%","close_directive","flowchart");break;case 10:this.$=[];break;case 11:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 12:case 77:case 79:case 91:case 147:case 149:case 150:this.$=a[s];break;case 19:r.setDirection("TB"),this.$="TB";break;case 20:r.setDirection(a[s-1]),this.$=a[s-1];break;case 35:this.$=a[s-1].nodes;break;case 36:case 37:case 38:case 39:case 40:this.$=[];break;case 41:this.$=r.addSubGraph(a[s-6],a[s-1],a[s-4]);break;case 42:this.$=r.addSubGraph(a[s-3],a[s-1],a[s-3]);break;case 43:this.$=r.addSubGraph(void 0,a[s-1],void 0);break;case 48:r.addLink(a[s-2].stmt,a[s],a[s-1]),this.$={stmt:a[s],nodes:a[s].concat(a[s-2].nodes)};break;case 49:r.addLink(a[s-3].stmt,a[s-1],a[s-2]),this.$={stmt:a[s-1],nodes:a[s-1].concat(a[s-3].nodes)};break;case 50:this.$={stmt:a[s-1],nodes:a[s-1]};break;case 51:this.$={stmt:a[s],nodes:a[s]};break;case 52:this.$=[a[s]];break;case 53:this.$=a[s-4].concat(a[s]);break;case 54:this.$=[a[s-2]],r.setClass(a[s-2],a[s]);break;case 55:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 56:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 57:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 58:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"stadium");break;case 59:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"subroutine");break;case 60:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"cylinder");break;case 61:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 62:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 63:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"hexagon");break;case 64:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 65:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"trapezoid");break;case 66:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"inv_trapezoid");break;case 67:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_right");break;case 68:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"lean_left");break;case 69:this.$=a[s],r.addVertex(a[s]);break;case 70:a[s-1].text=a[s],this.$=a[s-1];break;case 71:case 72:a[s-2].text=a[s-1],this.$=a[s-2];break;case 73:this.$=a[s];break;case 74:var c=r.destructLink(a[s],a[s-2]);this.$={type:c.type,stroke:c.stroke,length:c.length,text:a[s-1]};break;case 75:c=r.destructLink(a[s]);this.$={type:c.type,stroke:c.stroke,length:c.length};break;case 76:this.$=a[s-1];break;case 78:case 92:case 148:this.$=a[s-1]+""+a[s];break;case 93:case 94:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 95:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 96:case 104:this.$=a[s-1],r.setClickEvent(a[s-1],a[s]);break;case 97:case 105:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 98:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 99:this.$=a[s-4],r.setClickEvent(a[s-4],a[s-3],a[s-2]),r.setTooltip(a[s-4],a[s]);break;case 100:case 106:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 101:case 107:this.$=a[s-3],r.setLink(a[s-3],a[s-2]),r.setTooltip(a[s-3],a[s]);break;case 102:case 108:this.$=a[s-3],r.setLink(a[s-3],a[s-2],a[s]);break;case 103:case 109:this.$=a[s-5],r.setLink(a[s-5],a[s-4],a[s]),r.setTooltip(a[s-5],a[s-2]);break;case 110:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 111:case 113:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 112:this.$=a[s-4],r.updateLink([a[s-2]],a[s]);break;case 114:this.$=a[s-8],r.updateLinkInterpolate([a[s-6]],a[s-2]),r.updateLink([a[s-6]],a[s]);break;case 115:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 116:this.$=a[s-6],r.updateLinkInterpolate([a[s-4]],a[s]);break;case 117:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 118:case 120:this.$=[a[s]];break;case 119:case 121:a[s-2].push(a[s]),this.$=a[s-2];break;case 123:this.$=a[s-1]+a[s];break;case 145:this.$=a[s];break;case 146:this.$=a[s-1]+""+a[s];break;case 151:this.$="v";break;case 152:this.$="-";break;case 153:this.$={stmt:"dir",value:"TB"};break;case 154:this.$={stmt:"dir",value:"BT"};break;case 155:this.$={stmt:"dir",value:"RL"};break;case 156:this.$={stmt:"dir",value:"LR"}}},table:[{3:1,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},{1:[3]},{1:[2,1]},{3:10,4:2,5:3,6:5,12:e,16:4,21:n,22:r,24:i},t(a,o,{17:11}),{7:12,13:[1,13]},{16:14,21:n,22:r,24:i},{16:15,21:n,22:r,24:i},{25:[1,16],26:[1,17]},{13:[2,5]},{1:[2,2]},{1:[2,9],18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{8:60,10:[1,61],15:R},t([10,15],[2,6]),t(a,[2,17]),t(a,[2,18]),t(a,[2,19]),{20:[1,64],21:[1,65],22:F,27:63,30:66},t(P,[2,11]),t(P,[2,12]),t(P,[2,13]),t(P,[2,14]),t(P,[2,15]),t(P,[2,16]),{9:68,20:j,21:Y,23:z,44:69,67:73,70:[1,74],71:[1,75]},{9:76,20:j,21:Y,23:z},{9:77,20:j,21:Y,23:z},{9:78,20:j,21:Y,23:z},{9:79,20:j,21:Y,23:z},{9:80,20:j,21:Y,23:z},{9:82,20:j,21:Y,22:[1,81],23:z},t(P,[2,44]),t(U,[2,51],{30:83,22:F}),{22:[1,84]},{22:[1,85]},{22:[1,86]},{22:[1,87]},{26:$,47:q,74:[1,91],81:W,87:90,88:[1,88],90:[1,89],95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(P,[2,153]),t(P,[2,154]),t(P,[2,155]),t(P,[2,156]),t(at,[2,52],{48:[1,110]}),t(ot,[2,69],{108:121,40:[1,111],47:f,50:[1,112],52:[1,113],54:[1,114],56:[1,115],58:[1,116],60:[1,117],62:[1,118],63:[1,119],65:[1,120],81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,114:O,115:N,116:B,117:D,118:L,119:I}),t(st,[2,145]),t(st,[2,170]),t(st,[2,171]),t(st,[2,172]),t(st,[2,173]),t(st,[2,174]),t(st,[2,175]),t(st,[2,176]),t(st,[2,177]),t(st,[2,178]),t(st,[2,179]),t(st,[2,180]),t(st,[2,181]),t(st,[2,182]),t(st,[2,183]),t(st,[2,184]),{9:122,20:j,21:Y,23:z},{11:123,14:[1,124]},t(ct,[2,8]),t(a,[2,20]),t(a,[2,26]),t(a,[2,27]),{21:[1,125]},t(ut,[2,34],{30:126,22:F}),t(P,[2,35]),{45:127,46:42,47:f,49:43,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,114:O,115:N,116:B,117:D,118:L,119:I},t(lt,[2,45]),t(lt,[2,46]),t(lt,[2,47]),t(ht,[2,73],{68:128,69:[1,129],72:[1,130]}),{22:ft,24:dt,26:pt,38:yt,39:131,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t([47,69,72,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,75]),t(P,[2,36]),t(P,[2,37]),t(P,[2,38]),t(P,[2,39]),t(P,[2,40]),{22:ft,24:dt,26:pt,38:yt,39:155,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Nt,o,{17:156}),t(U,[2,50],{47:Bt}),{26:$,47:q,81:W,87:158,92:[1,159],95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{85:[1,160],93:161,95:[1,162]},{26:$,47:q,81:W,85:[1,163],87:164,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:165,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,96],{22:[1,166],89:[1,167]}),t(ct,[2,100],{22:[1,168]}),t(ct,[2,104],{107:94,109:170,22:[1,169],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,106],{22:[1,171]}),t(Dt,[2,147]),t(Dt,[2,149]),t(Dt,[2,150]),t(Dt,[2,151]),t(Dt,[2,152]),t(Lt,[2,157]),t(Lt,[2,158]),t(Lt,[2,159]),t(Lt,[2,160]),t(Lt,[2,161]),t(Lt,[2,162]),t(Lt,[2,163]),t(Lt,[2,164]),t(Lt,[2,165]),t(Lt,[2,166]),t(Lt,[2,167]),t(Lt,[2,168]),t(Lt,[2,169]),{47:f,49:172,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,114:O,115:N,116:B,117:D,118:L,119:I},{22:ft,24:dt,26:pt,38:yt,39:173,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:175,42:gt,47:q,50:[1,174],62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:176,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:177,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:178,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:179,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:180,42:gt,47:q,60:[1,181],62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:182,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:183,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:184,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(st,[2,146]),t(It,[2,3]),{8:185,15:R},{15:[2,7]},t(a,[2,28]),t(ut,[2,33]),t(U,[2,48],{30:186,22:F}),t(ht,[2,70],{22:[1,187]}),{22:[1,188]},{22:ft,24:dt,26:pt,38:yt,39:189,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,70:vt,71:[1,190],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Lt,[2,77]),t(Lt,[2,79]),t(Lt,[2,135]),t(Lt,[2,136]),t(Lt,[2,137]),t(Lt,[2,138]),t(Lt,[2,139]),t(Lt,[2,140]),t(Lt,[2,141]),t(Lt,[2,142]),t(Lt,[2,143]),t(Lt,[2,144]),t(Lt,[2,80]),t(Lt,[2,81]),t(Lt,[2,82]),t(Lt,[2,83]),t(Lt,[2,84]),t(Lt,[2,85]),t(Lt,[2,86]),t(Lt,[2,87]),t(Lt,[2,88]),t(Lt,[2,89]),t(Lt,[2,90]),{9:193,20:j,21:Y,22:ft,23:z,24:dt,26:pt,38:yt,40:[1,192],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,194],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{22:F,30:195},{22:[1,196],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,197]},{22:[1,198]},{22:[1,199],96:[1,200]},t(Rt,[2,118]),{22:[1,201]},{22:[1,202],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:[1,203],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:170,114:J,115:tt,116:et,117:nt,118:rt,119:it},{74:[1,204]},t(ct,[2,98],{22:[1,205]}),{74:[1,206],91:[1,207]},{74:[1,208]},t(Dt,[2,148]),{74:[1,209],91:[1,210]},t(at,[2,54],{108:121,47:f,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,114:O,115:N,116:B,117:D,118:L,119:I}),{22:ft,24:dt,26:pt,38:yt,41:[1,211],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:212,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,213],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,53:[1,214],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,55:[1,215],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,57:[1,216],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,59:[1,217],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,218],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,39:219,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,41:[1,220],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,64:[1,221],66:[1,222],70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,64:[1,224],66:[1,223],70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{9:225,20:j,21:Y,23:z},t(U,[2,49],{47:Bt}),t(ht,[2,72]),t(ht,[2,71]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,62:mt,70:vt,72:[1,226],73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ht,[2,74]),t(Lt,[2,78]),{22:ft,24:dt,26:pt,38:yt,39:227,42:gt,47:q,62:mt,70:vt,73:132,74:bt,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(Nt,o,{17:228}),t(P,[2,43]),{46:229,47:f,49:43,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,114:O,115:N,116:B,117:D,118:L,119:I},{22:Ft,76:Pt,86:230,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:244,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:245,92:jt,94:[1,246],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:247,92:jt,94:[1,248],95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{95:[1,249]},{22:Ft,76:Pt,86:250,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:251,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{26:$,47:q,81:W,87:252,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,97]),{74:[1,253]},t(ct,[2,101],{22:[1,254]}),t(ct,[2,102]),t(ct,[2,105]),t(ct,[2,107],{22:[1,255]}),t(ct,[2,108]),t(ot,[2,55]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,51:[1,256],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,61]),t(ot,[2,57]),t(ot,[2,58]),t(ot,[2,59]),t(ot,[2,60]),t(ot,[2,62]),{22:ft,24:dt,26:pt,38:yt,42:gt,47:q,61:[1,257],62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ot,[2,64]),t(ot,[2,65]),t(ot,[2,67]),t(ot,[2,66]),t(ot,[2,68]),t(It,[2,4]),t([22,47,81,95,96,99,100,101,103,104,114,115,116,117,118,119],[2,76]),{22:ft,24:dt,26:pt,38:yt,41:[1,258],42:gt,47:q,62:mt,70:vt,73:191,75:143,76:xt,77:_t,78:kt,79:wt,80:Tt,81:Et,82:Ct,84:134,85:St,95:H,96:V,99:G,100:X,101:At,103:K,104:Q,105:Mt,106:Ot,107:140,114:J,115:tt,116:et,117:nt,118:rt,119:it},{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,259],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},t(at,[2,53]),t(ct,[2,110],{96:Gt}),t(Xt,[2,120],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt}),t(Zt,[2,122]),t(Zt,[2,124]),t(Zt,[2,125]),t(Zt,[2,126]),t(Zt,[2,127]),t(Zt,[2,128]),t(Zt,[2,129]),t(Zt,[2,130]),t(Zt,[2,131]),t(Zt,[2,132]),t(Zt,[2,133]),t(Zt,[2,134]),t(ct,[2,111],{96:Gt}),t(ct,[2,112],{96:Gt}),{22:[1,262]},t(ct,[2,113],{96:Gt}),{22:[1,263]},t(Rt,[2,119]),t(ct,[2,93],{96:Gt}),t(ct,[2,94],{96:Gt}),t(ct,[2,95],{107:94,109:170,26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,99]),{91:[1,264]},{91:[1,265]},{51:[1,266]},{61:[1,267]},{9:268,20:j,21:Y,23:z},t(P,[2,42]),{22:Ft,76:Pt,92:jt,95:Yt,97:269,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},t(Zt,[2,123]),{26:$,47:q,81:W,87:270,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},{26:$,47:q,81:W,87:271,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,107:94,109:92,114:J,115:tt,116:et,117:nt,118:rt,119:it},t(ct,[2,103]),t(ct,[2,109]),t(ot,[2,56]),t(ot,[2,63]),t(Nt,o,{17:272}),t(Xt,[2,121],{98:261,22:Ft,76:Pt,92:jt,95:Yt,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt}),t(ct,[2,116],{107:94,109:170,22:[1,273],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),t(ct,[2,117],{107:94,109:170,22:[1,274],26:$,47:q,81:W,95:H,96:V,99:G,100:X,101:Z,103:K,104:Q,114:J,115:tt,116:et,117:nt,118:rt,119:it}),{18:18,19:19,20:s,21:c,22:u,23:l,32:24,33:25,34:26,35:27,36:28,37:29,38:h,42:[1,275],43:31,45:32,46:42,47:f,49:43,76:d,77:p,78:y,79:g,80:m,81:v,95:b,96:x,99:_,100:k,101:w,103:T,104:E,108:44,110:C,111:S,112:A,113:M,114:O,115:N,116:B,117:D,118:L,119:I},{22:Ft,76:Pt,86:276,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},{22:Ft,76:Pt,86:277,92:jt,95:Yt,97:231,98:232,99:zt,100:Ut,101:$t,102:qt,103:Wt,104:Ht,105:Vt},t(P,[2,41]),t(ct,[2,114],{96:Gt}),t(ct,[2,115],{96:Gt})],defaultActions:{2:[2,1],9:[2,5],10:[2,2],124:[2,7]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},Qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 76;case 11:return 85;case 12:return 77;case 13:return 94;case 14:return 78;case 15:return 79;case 16:this.begin("href");break;case 17:this.popState();break;case 18:return 90;case 19:this.begin("callbackname");break;case 20:this.popState();break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 88;case 23:this.popState();break;case 24:return 89;case 25:this.begin("click");break;case 26:this.popState();break;case 27:return 80;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 91;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 110;case 48:return 111;case 49:return 112;case 50:return 113;case 51:return 95;case 52:return 103;case 53:return 48;case 54:return 100;case 55:return 47;case 56:return 20;case 57:return 96;case 58:return 118;case 59:case 60:case 61:return 71;case 62:case 63:case 64:return 70;case 65:return 52;case 66:return 53;case 67:return 54;case 68:return 55;case 69:return 56;case 70:return 57;case 71:return 58;case 72:return 59;case 73:return 101;case 74:return 104;case 75:return 119;case 76:return 116;case 77:return 105;case 78:case 79:return 117;case 80:return 106;case 81:return 62;case 82:return 82;case 83:return"SEP";case 84:return 81;case 85:return 99;case 86:return 64;case 87:return 63;case 88:return 66;case 89:return 65;case 90:return 114;case 91:return 115;case 92:return 72;case 93:return 50;case 94:return 51;case 95:return 40;case 96:return 41;case 97:return 60;case 98:return 61;case 99:return 125;case 100:return 21;case 101:return 22;case 102:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:.*direction\s+TB[^\n]*)/,/^(?:.*direction\s+BT[^\n]*)/,/^(?:.*direction\s+RL[^\n]*)/,/^(?:.*direction\s+LR[^\n]*)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102],inclusive:!0}}};function Jt(){this.yy={}}return Kt.lexer=Qt,Jt.prototype=Kt,Kt.Parser=Jt,new Jt}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t,e){return r.default.lang.round(i.default.parse(t)[e])}},function(t,e,n){var r=n(112),i=n(84),a=n(25);t.exports=function(t){return a(t)?r(t):i(t)}},function(t,e,n){var r;if(!r)try{r=n(0)}catch(t){}r||(r=window.d3),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t,e,n){var a=i.default.parse(t),o=a[e],s=r.default.channel.clamp[e](o+n);return o!==s&&(a[e]=s),i.default.stringify(a)}},function(t,e,n){var r=n(215),i=n(221);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(40),i=n(217),a=n(218),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},function(t,e,n){var r=n(112),i=n(241),a=n(25);t.exports=function(t){return a(t)?r(t,!0):i(t)}},function(t,e){t.exports=function(t){return t}},function(t){t.exports=JSON.parse('{"name":"mermaid","version":"8.12.1","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build:development":"webpack --progress --color","build:production":"yarn build:development --mode production --config webpack.config.prod.babel.js","build":"yarn build:development && yarn build:production","postbuild":"documentation build src/mermaidAPI.js src/config.js src/defaultConfig.js --shallow -f md --markdown-toc false > docs/Setup.md","build:watch":"yarn build --watch","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack serve --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","d3":"^5.16.0","dagre":"^0.8.5","dagre-d3":"^0.6.4","dompurify":"2.3.1","graphlib":"^2.1.8","khroma":"^1.4.1","moment-mini":"^2.24.0","stylis":"^4.0.10"},"devDependencies":{"@babel/core":"^7.14.6","@babel/eslint-parser":"^7.14.7","@babel/preset-env":"^7.14.7","@babel/register":"^7.14.5","@percy/cli":"^1.0.0-beta.58","@percy/cypress":"^3.1.0","@percy/migrate":"^0.11.0","babel-jest":"^27.0.6","babel-loader":"^8.2.2","coveralls":"^3.0.2","css-to-string-loader":"^0.1.3","cypress":"8.1.0","documentation":"13.2.0","eslint":"^7.30.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"^3.4.0","husky":"^7.0.1","identity-obj-proxy":"^3.0.0","jest":"^27.0.6","jison":"^0.4.18","js-base64":"3.6.1","moment":"^2.23.0","prettier":"^2.3.2","start-server-and-test":"^1.12.6","terser-webpack-plugin":"^4.2.3","webpack":"^4.41.2","webpack-cli":"^4.7.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^3.0.0"},"files":["dist"],"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(34),i=n(14);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(19).Symbol;t.exports=r},function(t,e,n){(function(t){var r=n(19),i=n(237),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(this,n(7)(t))},function(t,e,n){var r=n(246),i=n(79),a=n(247),o=n(121),s=n(248),c=n(34),u=n(110),l=u(r),h=u(i),f=u(a),d=u(o),p=u(s),y=c;(r&&"[object DataView]"!=y(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=y(new i)||a&&"[object Promise]"!=y(a.resolve())||o&&"[object Set]"!=y(new o)||s&&"[object WeakMap]"!=y(new s))&&(y=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case h:return"[object Map]";case f:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return e}),t.exports=y},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r;try{r={defaults:n(154),each:n(89),isFunction:n(39),isPlainObject:n(158),pick:n(161),has:n(94),range:n(162),uniqueId:n(163)}}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[1,17],i=[2,10],a=[1,21],o=[1,22],s=[1,23],c=[1,24],u=[1,25],l=[1,26],h=[1,19],f=[1,27],d=[1,28],p=[1,31],y=[66,67],g=[5,8,14,35,36,37,38,39,40,48,55,57,66,67],m=[5,6,8,14,35,36,37,38,39,40,48,66,67],v=[1,51],b=[1,52],x=[1,53],_=[1,54],k=[1,55],w=[1,56],T=[1,57],E=[57,58],C=[1,69],S=[1,65],A=[1,66],M=[1,67],O=[1,68],N=[1,70],B=[1,74],D=[1,75],L=[1,72],I=[1,73],R=[5,8,14,35,36,37,38,39,40,48,66,67],F={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,NEWLINE:5,RD:6,diagram:7,EOF:8,openDirective:9,typeDirective:10,closeDirective:11,":":12,argDirective:13,open_directive:14,type_directive:15,arg_directive:16,close_directive:17,requirementDef:18,elementDef:19,relationshipDef:20,requirementType:21,requirementName:22,STRUCT_START:23,requirementBody:24,ID:25,COLONSEP:26,id:27,TEXT:28,text:29,RISK:30,riskLevel:31,VERIFYMTHD:32,verifyType:33,STRUCT_STOP:34,REQUIREMENT:35,FUNCTIONAL_REQUIREMENT:36,INTERFACE_REQUIREMENT:37,PERFORMANCE_REQUIREMENT:38,PHYSICAL_REQUIREMENT:39,DESIGN_CONSTRAINT:40,LOW_RISK:41,MED_RISK:42,HIGH_RISK:43,VERIFY_ANALYSIS:44,VERIFY_DEMONSTRATION:45,VERIFY_INSPECTION:46,VERIFY_TEST:47,ELEMENT:48,elementName:49,elementBody:50,TYPE:51,type:52,DOCREF:53,ref:54,END_ARROW_L:55,relationship:56,LINE:57,END_ARROW_R:58,CONTAINS:59,COPIES:60,DERIVES:61,SATISFIES:62,VERIFIES:63,REFINES:64,TRACES:65,unqString:66,qString:67,$accept:0,$end:1},terminals_:{2:"error",5:"NEWLINE",6:"RD",8:"EOF",12:":",14:"open_directive",15:"type_directive",16:"arg_directive",17:"close_directive",23:"STRUCT_START",25:"ID",26:"COLONSEP",28:"TEXT",30:"RISK",32:"VERIFYMTHD",34:"STRUCT_STOP",35:"REQUIREMENT",36:"FUNCTIONAL_REQUIREMENT",37:"INTERFACE_REQUIREMENT",38:"PERFORMANCE_REQUIREMENT",39:"PHYSICAL_REQUIREMENT",40:"DESIGN_CONSTRAINT",41:"LOW_RISK",42:"MED_RISK",43:"HIGH_RISK",44:"VERIFY_ANALYSIS",45:"VERIFY_DEMONSTRATION",46:"VERIFY_INSPECTION",47:"VERIFY_TEST",48:"ELEMENT",51:"TYPE",53:"DOCREF",55:"END_ARROW_L",57:"LINE",58:"END_ARROW_R",59:"CONTAINS",60:"COPIES",61:"DERIVES",62:"SATISFIES",63:"VERIFIES",64:"REFINES",65:"TRACES",66:"unqString",67:"qString"},productions_:[0,[3,3],[3,2],[3,4],[4,3],[4,5],[9,1],[10,1],[13,1],[11,1],[7,0],[7,2],[7,2],[7,2],[7,2],[7,2],[18,5],[24,5],[24,5],[24,5],[24,5],[24,2],[24,1],[21,1],[21,1],[21,1],[21,1],[21,1],[21,1],[31,1],[31,1],[31,1],[33,1],[33,1],[33,1],[33,1],[19,5],[50,5],[50,5],[50,2],[50,1],[20,5],[20,5],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[56,1],[22,1],[22,1],[27,1],[27,1],[29,1],[29,1],[49,1],[49,1],[52,1],[52,1],[54,1],[54,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","pie");break;case 10:this.$=[];break;case 16:r.addRequirement(a[s-3],a[s-4]);break;case 17:r.setNewReqId(a[s-2]);break;case 18:r.setNewReqText(a[s-2]);break;case 19:r.setNewReqRisk(a[s-2]);break;case 20:r.setNewReqVerifyMethod(a[s-2]);break;case 23:this.$=r.RequirementType.REQUIREMENT;break;case 24:this.$=r.RequirementType.FUNCTIONAL_REQUIREMENT;break;case 25:this.$=r.RequirementType.INTERFACE_REQUIREMENT;break;case 26:this.$=r.RequirementType.PERFORMANCE_REQUIREMENT;break;case 27:this.$=r.RequirementType.PHYSICAL_REQUIREMENT;break;case 28:this.$=r.RequirementType.DESIGN_CONSTRAINT;break;case 29:this.$=r.RiskLevel.LOW_RISK;break;case 30:this.$=r.RiskLevel.MED_RISK;break;case 31:this.$=r.RiskLevel.HIGH_RISK;break;case 32:this.$=r.VerifyType.VERIFY_ANALYSIS;break;case 33:this.$=r.VerifyType.VERIFY_DEMONSTRATION;break;case 34:this.$=r.VerifyType.VERIFY_INSPECTION;break;case 35:this.$=r.VerifyType.VERIFY_TEST;break;case 36:r.addElement(a[s-3]);break;case 37:r.setNewElementType(a[s-2]);break;case 38:r.setNewElementDocRef(a[s-2]);break;case 41:r.addRelationship(a[s-2],a[s],a[s-4]);break;case 42:r.addRelationship(a[s-2],a[s-4],a[s]);break;case 43:this.$=r.Relationships.CONTAINS;break;case 44:this.$=r.Relationships.COPIES;break;case 45:this.$=r.Relationships.DERIVES;break;case 46:this.$=r.Relationships.SATISFIES;break;case 47:this.$=r.Relationships.VERIFIES;break;case 48:this.$=r.Relationships.REFINES;break;case 49:this.$=r.Relationships.TRACES}},table:[{3:1,4:2,6:e,9:4,14:n},{1:[3]},{3:7,4:2,5:[1,6],6:e,9:4,14:n},{5:[1,8]},{10:9,15:[1,10]},{15:[2,6]},{3:11,4:2,6:e,9:4,14:n},{1:[2,2]},{4:16,5:r,7:12,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{11:29,12:[1,30],17:p},t([12,17],[2,7]),{1:[2,1]},{8:[1,32]},{4:16,5:r,7:33,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:34,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:35,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:36,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{4:16,5:r,7:37,8:i,9:4,14:n,18:13,19:14,20:15,21:18,27:20,35:a,36:o,37:s,38:c,39:u,40:l,48:h,66:f,67:d},{22:38,66:[1,39],67:[1,40]},{49:41,66:[1,42],67:[1,43]},{55:[1,44],57:[1,45]},t(y,[2,23]),t(y,[2,24]),t(y,[2,25]),t(y,[2,26]),t(y,[2,27]),t(y,[2,28]),t(g,[2,52]),t(g,[2,53]),t(m,[2,4]),{13:46,16:[1,47]},t(m,[2,9]),{1:[2,3]},{8:[2,11]},{8:[2,12]},{8:[2,13]},{8:[2,14]},{8:[2,15]},{23:[1,48]},{23:[2,50]},{23:[2,51]},{23:[1,49]},{23:[2,56]},{23:[2,57]},{56:50,59:v,60:b,61:x,62:_,63:k,64:w,65:T},{56:58,59:v,60:b,61:x,62:_,63:k,64:w,65:T},{11:59,17:p},{17:[2,8]},{5:[1,60]},{5:[1,61]},{57:[1,62]},t(E,[2,43]),t(E,[2,44]),t(E,[2,45]),t(E,[2,46]),t(E,[2,47]),t(E,[2,48]),t(E,[2,49]),{58:[1,63]},t(m,[2,5]),{5:C,24:64,25:S,28:A,30:M,32:O,34:N},{5:B,34:D,50:71,51:L,53:I},{27:76,66:f,67:d},{27:77,66:f,67:d},t(R,[2,16]),{26:[1,78]},{26:[1,79]},{26:[1,80]},{26:[1,81]},{5:C,24:82,25:S,28:A,30:M,32:O,34:N},t(R,[2,22]),t(R,[2,36]),{26:[1,83]},{26:[1,84]},{5:B,34:D,50:85,51:L,53:I},t(R,[2,40]),t(R,[2,41]),t(R,[2,42]),{27:86,66:f,67:d},{29:87,66:[1,88],67:[1,89]},{31:90,41:[1,91],42:[1,92],43:[1,93]},{33:94,44:[1,95],45:[1,96],46:[1,97],47:[1,98]},t(R,[2,21]),{52:99,66:[1,100],67:[1,101]},{54:102,66:[1,103],67:[1,104]},t(R,[2,39]),{5:[1,105]},{5:[1,106]},{5:[2,54]},{5:[2,55]},{5:[1,107]},{5:[2,29]},{5:[2,30]},{5:[2,31]},{5:[1,108]},{5:[2,32]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[1,109]},{5:[2,58]},{5:[2,59]},{5:[1,110]},{5:[2,60]},{5:[2,61]},{5:C,24:111,25:S,28:A,30:M,32:O,34:N},{5:C,24:112,25:S,28:A,30:M,32:O,34:N},{5:C,24:113,25:S,28:A,30:M,32:O,34:N},{5:C,24:114,25:S,28:A,30:M,32:O,34:N},{5:B,34:D,50:115,51:L,53:I},{5:B,34:D,50:116,51:L,53:I},t(R,[2,17]),t(R,[2,18]),t(R,[2,19]),t(R,[2,20]),t(R,[2,37]),t(R,[2,38])],defaultActions:{5:[2,6],7:[2,2],11:[2,1],32:[2,3],33:[2,11],34:[2,12],35:[2,13],36:[2,14],37:[2,15],39:[2,50],40:[2,51],42:[2,56],43:[2,57],47:[2,8],88:[2,54],89:[2,55],91:[2,29],92:[2,30],93:[2,31],95:[2,32],96:[2,33],97:[2,34],98:[2,35],100:[2,58],101:[2,59],103:[2,60],104:[2,61]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},P={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),14;case 1:return this.begin("type_directive"),15;case 2:return this.popState(),this.begin("arg_directive"),12;case 3:return this.popState(),this.popState(),17;case 4:return 16;case 5:return 5;case 6:case 7:case 8:break;case 9:return 8;case 10:return 6;case 11:return 23;case 12:return 34;case 13:return 26;case 14:return 25;case 15:return 28;case 16:return 30;case 17:return 32;case 18:return 35;case 19:return 36;case 20:return 37;case 21:return 38;case 22:return 39;case 23:return 40;case 24:return 41;case 25:return 42;case 26:return 43;case 27:return 44;case 28:return 45;case 29:return 46;case 30:return 47;case 31:return 48;case 32:return 59;case 33:return 60;case 34:return 61;case 35:return 62;case 36:return 63;case 37:return 64;case 38:return 65;case 39:return 51;case 40:return 53;case 41:return 55;case 42:return 58;case 43:return 57;case 44:this.begin("string");break;case 45:this.popState();break;case 46:return"qString";case 47:return e.yytext=e.yytext.trim(),66}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:$)/i,/^(?:requirementDiagram\b)/i,/^(?:\{)/i,/^(?:\})/i,/^(?::)/i,/^(?:id\b)/i,/^(?:text\b)/i,/^(?:risk\b)/i,/^(?:verifyMethod\b)/i,/^(?:requirement\b)/i,/^(?:functionalRequirement\b)/i,/^(?:interfaceRequirement\b)/i,/^(?:performanceRequirement\b)/i,/^(?:physicalRequirement\b)/i,/^(?:designConstraint\b)/i,/^(?:low\b)/i,/^(?:medium\b)/i,/^(?:high\b)/i,/^(?:analysis\b)/i,/^(?:demonstration\b)/i,/^(?:inspection\b)/i,/^(?:test\b)/i,/^(?:element\b)/i,/^(?:contains\b)/i,/^(?:copies\b)/i,/^(?:derives\b)/i,/^(?:satisfies\b)/i,/^(?:verifies\b)/i,/^(?:refines\b)/i,/^(?:traces\b)/i,/^(?:type\b)/i,/^(?:docref\b)/i,/^(?:<-)/i,/^(?:->)/i,/^(?:-)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[\w][^\r\n\{\<\>\-\=]*)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},unqString:{rules:[],inclusive:!1},token:{rules:[],inclusive:!1},string:{rules:[45,46],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47],inclusive:!0}}};function j(){this.yy={}}return F.lexer=P,j.prototype=F,F.Parser=j,new j}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=new(n(175).default)({r:0,g:0,b:0,a:0},"transparent");e.default=r},function(t,e,n){var r=n(59),i=n(60);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s-1&&t%1==0&&t-1}(s)?s:(n=s.match(a))?(e=n[0],r.test(e)?"about:blank":s):"about:blank"}}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){a.length;switch(i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,11,13,20,21,22,23],s=[2,5],c=[1,6,11,13,20,21,22,23],u=[20,21,22],l=[2,8],h=[1,18],f=[1,19],d=[1,24],p=[6,20,21,22,23],y={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,showData:8,line:9,statement:10,txt:11,value:12,title:13,title_value:14,openDirective:15,typeDirective:16,closeDirective:17,":":18,argDirective:19,NEWLINE:20,";":21,EOF:22,open_directive:23,type_directive:24,arg_directive:25,close_directive:26,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",8:"showData",11:"txt",12:"value",13:"title",14:"title_value",18:":",20:"NEWLINE",21:";",22:"EOF",23:"open_directive",24:"type_directive",25:"arg_directive",26:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,3],[7,0],[7,2],[9,2],[10,0],[10,2],[10,2],[10,1],[5,3],[5,5],[4,1],[4,1],[4,1],[15,1],[16,1],[19,1],[17,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:r.setShowData(!0);break;case 7:this.$=a[s-1];break;case 9:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 10:this.$=a[s].trim(),r.setTitle(this.$);break;case 17:r.parseDirective("%%{","open_directive");break;case 18:r.parseDirective(a[s],"type_directive");break;case 19:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 20:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{1:[3]},{3:10,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},{3:11,4:2,5:3,6:e,15:8,20:n,21:r,22:i,23:a},t(o,s,{7:12,8:[1,13]}),t(c,[2,14]),t(c,[2,15]),t(c,[2,16]),{16:14,24:[1,15]},{24:[2,17]},{1:[2,1]},{1:[2,2]},t(u,l,{15:8,9:16,10:17,5:20,1:[2,3],11:h,13:f,23:a}),t(o,s,{7:21}),{17:22,18:[1,23],26:d},t([18,26],[2,18]),t(o,[2,6]),{4:25,20:n,21:r,22:i},{12:[1,26]},{14:[1,27]},t(u,[2,11]),t(u,l,{15:8,9:16,10:17,5:20,1:[2,4],11:h,13:f,23:a}),t(p,[2,12]),{19:28,25:[1,29]},t(p,[2,20]),t(o,[2,7]),t(u,[2,9]),t(u,[2,10]),{17:30,26:d},{26:[2,19]},t(p,[2,13])],defaultActions:{9:[2,17],10:[2,1],11:[2,2],29:[2,19]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),23;case 1:return this.begin("type_directive"),24;case 2:return this.popState(),this.begin("arg_directive"),18;case 3:return this.popState(),this.popState(),26;case 4:return 25;case 5:case 6:break;case 7:return 20;case 8:case 9:break;case 10:return this.begin("title"),13;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return 8;case 17:return"value";case 18:return 22}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?:showData\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17,18],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,37],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,34,35],f=[4,6,9,11,23,37],d=[30,31,32,33],p=[22,27],y={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,ATTRIBUTE_WORD:27,cardinality:28,relType:29,ZERO_OR_ONE:30,ZERO_OR_MORE:31,ONE_OR_MORE:32,ONLY_ONE:33,NON_IDENTIFYING:34,IDENTIFYING:35,WORD:36,open_directive:37,type_directive:38,arg_directive:39,close_directive:40,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",27:"ATTRIBUTE_WORD",30:"ZERO_OR_ONE",31:"ZERO_OR_MORE",32:"ONE_OR_MORE",33:"ONLY_ONE",34:"NON_IDENTIFYING",35:"IDENTIFYING",36:"WORD",37:"open_directive",38:"type_directive",39:"arg_directive",40:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[25,1],[26,1],[18,3],[28,1],[28,1],[28,1],[28,1],[29,1],[29,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:this.$=a[s];break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:case 21:this.$=a[s];break;case 22:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 23:this.$=r.Cardinality.ZERO_OR_ONE;break;case 24:this.$=r.Cardinality.ZERO_OR_MORE;break;case 25:this.$=r.Cardinality.ONE_OR_MORE;break;case 26:this.$=r.Cardinality.ONLY_ONE;break;case 27:this.$=r.Identification.NON_IDENTIFYING;break;case 28:this.$=r.Identification.IDENTIFYING;break;case 29:this.$=a[s].replace(/"/g,"");break;case 30:this.$=a[s];break;case 31:r.parseDirective("%%{","open_directive");break;case 32:r.parseDirective(a[s],"type_directive");break;case 33:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 34:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,37:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,37:n},{13:8,38:[1,9]},{38:[2,31]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,37:n},{1:[2,2]},{14:18,15:[1,19],40:a},t([15,40],[2,32]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,37:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,28:24,20:[1,23],30:o,31:s,32:c,33:u}),t([6,9,11,15,20,23,30,31,32,33,37],[2,16]),{11:[1,29]},{16:30,39:[1,31]},{11:[2,34]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,27:l},{29:38,34:[1,39],35:[1,40]},t(h,[2,23]),t(h,[2,24]),t(h,[2,25]),t(h,[2,26]),t(f,[2,9]),{14:41,40:a},{40:[2,33]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,27:l},{26:45,27:[1,46]},{27:[2,20]},{28:47,30:o,31:s,32:c,33:u},t(d,[2,27]),t(d,[2,28]),{11:[1,48]},{19:49,23:[1,51],36:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19]),t(p,[2,21]),{23:[2,22]},t(f,[2,10]),t(r,[2,12]),t(r,[2,29]),t(r,[2,30])],defaultActions:{5:[2,31],7:[2,2],20:[2,34],31:[2,33],37:[2,20],44:[2,18],47:[2,22]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),y={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(y.yy[g]=this.yy[g]);p.setInput(t,y.yy),y.yy.lexer=p,y.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var m=p.yylloc;a.push(m);var v=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,T,E,C,S,A,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(E in A=[],o[k])this.terminals_[E]&&E>h&&A.push("'"+this.terminals_[E]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:m,expected:A})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,m=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},v&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(T=this.performAction.apply(M,[s,u,c,y.yy,w[1],i,a].concat(d))))return T;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),S=o[n[n.length-2]][n[n.length-1]],n.push(S);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),37;case 1:return this.begin("type_directive"),38;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),40;case 4:return 39;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 36;case 11:return 4;case 12:return this.begin("block"),20;case 13:break;case 14:return 27;case 15:break;case 16:return this.popState(),22;case 17:return e.yytext[0];case 18:return 30;case 19:return 31;case 20:return 32;case 21:return 33;case 22:return 30;case 23:return 31;case 24:return 32;case 25:return 34;case 26:return 35;case 27:case 28:return 34;case 29:return 23;case 30:return e.yytext[0];case 31:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31],inclusive:!0}}};function m(){this.yy={}}return y.lexer=g,m.prototype=y,y.Parser=m,new m}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(17).readFileSync(n(18).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(12),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(6);e.default=function(t){var e=i.default.parse(t),n=e.r,a=e.g,o=e.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(a)+.0722*r.default.channel.toLinear(o);return r.default.lang.round(s)}},function(t,e,n){"use strict";var r=n(13);t.exports=i;function i(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function s(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+""+o+""+(r.isUndefined(i)?"\0":i)}function c(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return s(t,e.v,e.w,e.name)}i.prototype._nodeCount=0,i.prototype._edgeCount=0,i.prototype.isDirected=function(){return this._isDirected},i.prototype.isMultigraph=function(){return this._isMultigraph},i.prototype.isCompound=function(){return this._isCompound},i.prototype.setGraph=function(t){return this._label=t,this},i.prototype.graph=function(){return this._label},i.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},i.prototype.nodeCount=function(){return this._nodeCount},i.prototype.nodes=function(){return r.keys(this._nodes)},i.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},i.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},i.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},i.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]="\0",this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},i.prototype.node=function(t){return this._nodes[t]},i.prototype.hasNode=function(t){return r.has(this._nodes,t)},i.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},i.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e="\0";else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},i.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},i.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if("\0"!==e)return e}},i.prototype.children=function(t){if(r.isUndefined(t)&&(t="\0"),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if("\0"===t)return this.nodes();if(this.hasNode(t))return[]}},i.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},i.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},i.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},i.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},i.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,function t(r){var a=n.parent(r);return void 0===a||e.hasNode(a)?(i[r]=a,a):a in i?i[a]:t(a)}(t))})),e},i.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},i.prototype.edgeCount=function(){return this._edgeCount},i.prototype.edges=function(){return r.values(this._edgeObjs)},i.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},i.prototype.setEdge=function(){var t,e,n,i,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var l=s(this._isDirected,t,e,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=c(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},i.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return this._edgeLabels[r]},i.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},i.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},i.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},i.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},i.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){var r=n(33)(n(19),"Map");t.exports=r},function(t,e,n){var r=n(222),i=n(229),a=n(231),o=n(232),s=n(233);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){(function(t){var r=n(109),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{var t=a&&a.require&&a.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(this,n(7)(t))},function(t,e,n){var r=n(63),i=n(239),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(116),i=n(117),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(t,e,n){var r=n(43);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i4,u=c?1:17,l=c?8:4,h=s?0:-1,f=c?255:15;return r.default.set({r:(i>>l*(h+3)&f)*u,g:(i>>l*(h+2)&f)*u,b:(i>>l*(h+1)&f)*u,a:s?(i&f)*u/255:1},t)}}},stringify:function(t){var e=t.r,n=t.g,r=t.b,a=t.a;return a<1?"#"+i.DEC2HEX[Math.round(e)]+i.DEC2HEX[Math.round(n)]+i.DEC2HEX[Math.round(r)]+i.DEC2HEX[Math.round(255*a)]:"#"+i.DEC2HEX[Math.round(e)]+i.DEC2HEX[Math.round(n)]+i.DEC2HEX[Math.round(r)]}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=n(46),a=n(6);e.default=function(t,e,n,o){void 0===o&&(o=1);var s=i.default.set({h:r.default.channel.clamp.h(t),s:r.default.channel.clamp.s(e),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(o)});return a.default.stringify(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"a")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(77);e.default=function(t){return r.default(t)>=.5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6),i=n(53);e.default=function(t,e){var n=r.default.parse(t),a={};for(var o in e)e[o]&&(a[o]=n[o]+e[o]);return i.default(t,a)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(6),i=n(52);e.default=function(t,e,n){void 0===n&&(n=50);var a=r.default.parse(t),o=a.r,s=a.g,c=a.b,u=a.a,l=r.default.parse(e),h=l.r,f=l.g,d=l.b,p=l.a,y=n/100,g=2*y-1,m=u-p,v=((g*m==-1?g:(g+m)/(1+g*m))+1)/2,b=1-v,x=o*v+h*b,_=s*v+f*b,k=c*v+d*b,w=u*y+p*(1-y);return i.default(x,_,k,w)}},function(t,e){},function(t,e,n){var r=n(54),i=n(81),a=n(59),o=n(234),s=n(240),c=n(114),u=n(115),l=n(243),h=n(244),f=n(119),d=n(245),p=n(42),y=n(249),g=n(250),m=n(124),v=n(5),b=n(41),x=n(254),_=n(14),k=n(256),w=n(30),T=n(35),E={};E["[object Arguments]"]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object DataView]"]=E["[object Boolean]"]=E["[object Date]"]=E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Map]"]=E["[object Number]"]=E["[object Object]"]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[object Symbol]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Error]"]=E["[object Function]"]=E["[object WeakMap]"]=!1,t.exports=function t(e,n,C,S,A,M){var O,N=1&n,B=2&n,D=4&n;if(C&&(O=A?C(e,S,A,M):C(e)),void 0!==O)return O;if(!_(e))return e;var L=v(e);if(L){if(O=y(e),!N)return u(e,O)}else{var I=p(e),R="[object Function]"==I||"[object GeneratorFunction]"==I;if(b(e))return c(e,N);if("[object Object]"==I||"[object Arguments]"==I||R&&!A){if(O=B||R?{}:m(e),!N)return B?h(e,s(O,e)):l(e,o(O,e))}else{if(!E[I])return A?e:{};O=g(e,I,N)}}M||(M=new r);var F=M.get(e);if(F)return F;M.set(e,O),k(e)?e.forEach((function(r){O.add(t(r,n,C,r,e,M))})):x(e)&&e.forEach((function(r,i){O.set(i,t(r,n,C,i,e,M))}));var P=L?void 0:(D?B?d:f:B?T:w)(e);return i(P||e,(function(r,i){P&&(r=e[i=r]),a(O,i,t(r,n,C,i,e,M))})),O}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(216))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(33),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(235),i=n(48),a=n(5),o=n(41),s=n(61),c=n(49),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),h=!n&&!l&&o(t),f=!n&&!l&&!h&&c(t),d=n||l||h||f,p=d?r(t.length,String):[],y=p.length;for(var g in t)!e&&!u.call(t,g)||d&&("length"==g||h&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||s(g,y))||p.push(g);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(19),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(7)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var f=c.get(t),d=c.get(e);if(f&&d)return f==e&&d==t;var p=-1,y=!0,g=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++p0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(u);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){var r=n(13);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority2?e[2]:void 0;for(u&&a(e[0],e[1],u)&&(r=1);++n1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o);return{x:i+n,y:a+r}}},function(t,e,n){ +/*! @license DOMPurify 2.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.1/LICENSE */ +t.exports=function(){"use strict";var t=Object.hasOwnProperty,e=Object.setPrototypeOf,n=Object.isFrozen,r=Object.getPrototypeOf,i=Object.getOwnPropertyDescriptor,a=Object.freeze,o=Object.seal,s=Object.create,c="undefined"!=typeof Reflect&&Reflect,u=c.apply,l=c.construct;u||(u=function(t,e,n){return t.apply(e,n)}),a||(a=function(t){return t}),o||(o=function(t){return t}),l||(l=function(t,e){return new(Function.prototype.bind.apply(t,[null].concat(function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1?n-1:0),i=1;i/gm),j=o(/^data-[\-\w.\u00B7-\uFFFF]/),Y=o(/^aria-[\-\w]+$/),z=o(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),U=o(/^(?:\w+script|data):/i),$=o(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function W(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e0&&void 0!==arguments[0]?arguments[0]:H(),n=function(e){return t(e)};if(n.version="2.3.1",n.removed=[],!e||!e.document||9!==e.document.nodeType)return n.isSupported=!1,n;var r=e.document,i=e.document,o=e.DocumentFragment,s=e.HTMLTemplateElement,c=e.Node,u=e.Element,l=e.NodeFilter,h=e.NamedNodeMap,k=void 0===h?e.NamedNodeMap||e.MozNamedAttrMap:h,G=e.Text,X=e.Comment,Z=e.DOMParser,K=e.trustedTypes,Q=u.prototype,J=E(Q,"cloneNode"),tt=E(Q,"nextSibling"),et=E(Q,"childNodes"),nt=E(Q,"parentNode");if("function"==typeof s){var rt=i.createElement("template");rt.content&&rt.content.ownerDocument&&(i=rt.content.ownerDocument)}var it=V(K,r),at=it&&Ft?it.createHTML(""):"",ot=i,st=ot.implementation,ct=ot.createNodeIterator,ut=ot.createDocumentFragment,lt=ot.getElementsByTagName,ht=r.importNode,ft={};try{ft=T(i).documentMode?i.documentMode:{}}catch(t){}var dt={};n.isSupported="function"==typeof nt&&st&&void 0!==st.createHTMLDocument&&9!==ft;var pt=F,yt=P,gt=j,mt=Y,vt=U,bt=$,xt=z,_t=null,kt=w({},[].concat(W(C),W(S),W(A),W(O),W(B))),wt=null,Tt=w({},[].concat(W(D),W(L),W(I),W(R))),Et=null,Ct=null,St=!0,At=!0,Mt=!1,Ot=!1,Nt=!1,Bt=!1,Dt=!1,Lt=!1,It=!1,Rt=!0,Ft=!1,Pt=!0,jt=!0,Yt=!1,zt={},Ut=null,$t=w({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),qt=null,Wt=w({},["audio","video","img","source","image","track"]),Ht=null,Vt=w({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Gt="http://www.w3.org/1998/Math/MathML",Xt="http://www.w3.org/2000/svg",Zt="http://www.w3.org/1999/xhtml",Kt=Zt,Qt=!1,Jt=null,te=i.createElement("form"),ee=function(t){Jt&&Jt===t||(t&&"object"===(void 0===t?"undefined":q(t))||(t={}),t=T(t),_t="ALLOWED_TAGS"in t?w({},t.ALLOWED_TAGS):kt,wt="ALLOWED_ATTR"in t?w({},t.ALLOWED_ATTR):Tt,Ht="ADD_URI_SAFE_ATTR"in t?w(T(Vt),t.ADD_URI_SAFE_ATTR):Vt,qt="ADD_DATA_URI_TAGS"in t?w(T(Wt),t.ADD_DATA_URI_TAGS):Wt,Ut="FORBID_CONTENTS"in t?w({},t.FORBID_CONTENTS):$t,Et="FORBID_TAGS"in t?w({},t.FORBID_TAGS):{},Ct="FORBID_ATTR"in t?w({},t.FORBID_ATTR):{},zt="USE_PROFILES"in t&&t.USE_PROFILES,St=!1!==t.ALLOW_ARIA_ATTR,At=!1!==t.ALLOW_DATA_ATTR,Mt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,Ot=t.SAFE_FOR_TEMPLATES||!1,Nt=t.WHOLE_DOCUMENT||!1,Lt=t.RETURN_DOM||!1,It=t.RETURN_DOM_FRAGMENT||!1,Rt=!1!==t.RETURN_DOM_IMPORT,Ft=t.RETURN_TRUSTED_TYPE||!1,Dt=t.FORCE_BODY||!1,Pt=!1!==t.SANITIZE_DOM,jt=!1!==t.KEEP_CONTENT,Yt=t.IN_PLACE||!1,xt=t.ALLOWED_URI_REGEXP||xt,Kt=t.NAMESPACE||Zt,Ot&&(At=!1),It&&(Lt=!0),zt&&(_t=w({},[].concat(W(B))),wt=[],!0===zt.html&&(w(_t,C),w(wt,D)),!0===zt.svg&&(w(_t,S),w(wt,L),w(wt,R)),!0===zt.svgFilters&&(w(_t,A),w(wt,L),w(wt,R)),!0===zt.mathMl&&(w(_t,O),w(wt,I),w(wt,R))),t.ADD_TAGS&&(_t===kt&&(_t=T(_t)),w(_t,t.ADD_TAGS)),t.ADD_ATTR&&(wt===Tt&&(wt=T(wt)),w(wt,t.ADD_ATTR)),t.ADD_URI_SAFE_ATTR&&w(Ht,t.ADD_URI_SAFE_ATTR),t.FORBID_CONTENTS&&(Ut===$t&&(Ut=T(Ut)),w(Ut,t.FORBID_CONTENTS)),jt&&(_t["#text"]=!0),Nt&&w(_t,["html","head","body"]),_t.table&&(w(_t,["tbody"]),delete Et.tbody),a&&a(t),Jt=t)},ne=w({},["mi","mo","mn","ms","mtext"]),re=w({},["foreignobject","desc","title","annotation-xml"]),ie=w({},S);w(ie,A),w(ie,M);var ae=w({},O);w(ae,N);var oe=function(t){var e=nt(t);e&&e.tagName||(e={namespaceURI:Zt,tagName:"template"});var n=y(t.tagName),r=y(e.tagName);if(t.namespaceURI===Xt)return e.namespaceURI===Zt?"svg"===n:e.namespaceURI===Gt?"svg"===n&&("annotation-xml"===r||ne[r]):Boolean(ie[n]);if(t.namespaceURI===Gt)return e.namespaceURI===Zt?"math"===n:e.namespaceURI===Xt?"math"===n&&re[r]:Boolean(ae[n]);if(t.namespaceURI===Zt){if(e.namespaceURI===Xt&&!re[r])return!1;if(e.namespaceURI===Gt&&!ne[r])return!1;var i=w({},["title","style","font","a","script"]);return!ae[n]&&(i[n]||!ie[n])}return!1},se=function(t){p(n.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){try{t.outerHTML=at}catch(e){t.remove()}}},ce=function(t,e){try{p(n.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){p(n.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!wt[t])if(Lt||It)try{se(e)}catch(t){}else try{e.setAttribute(t,"")}catch(t){}},ue=function(t){var e=void 0,n=void 0;if(Dt)t=""+t;else{var r=g(t,/^[\r\n\t ]+/);n=r&&r[0]}var a=it?it.createHTML(t):t;if(Kt===Zt)try{e=(new Z).parseFromString(a,"text/html")}catch(t){}if(!e||!e.documentElement){e=st.createDocument(Kt,"template",null);try{e.documentElement.innerHTML=Qt?"":a}catch(t){}}var o=e.body||e.documentElement;return t&&n&&o.insertBefore(i.createTextNode(n),o.childNodes[0]||null),Kt===Zt?lt.call(e,Nt?"html":"body")[0]:Nt?e.documentElement:o},le=function(t){return ct.call(t.ownerDocument||t,t,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT,null,!1)},he=function(t){return!(t instanceof G||t instanceof X||"string"==typeof t.nodeName&&"string"==typeof t.textContent&&"function"==typeof t.removeChild&&t.attributes instanceof k&&"function"==typeof t.removeAttribute&&"function"==typeof t.setAttribute&&"string"==typeof t.namespaceURI&&"function"==typeof t.insertBefore)},fe=function(t){return"object"===(void 0===c?"undefined":q(c))?t instanceof c:t&&"object"===(void 0===t?"undefined":q(t))&&"number"==typeof t.nodeType&&"string"==typeof t.nodeName},de=function(t,e,r){dt[t]&&f(dt[t],(function(t){t.call(n,e,r,Jt)}))},pe=function(t){var e=void 0;if(de("beforeSanitizeElements",t,null),he(t))return se(t),!0;if(g(t.nodeName,/[\u0080-\uFFFF]/))return se(t),!0;var r=y(t.nodeName);if(de("uponSanitizeElement",t,{tagName:r,allowedTags:_t}),!fe(t.firstElementChild)&&(!fe(t.content)||!fe(t.content.firstElementChild))&&x(/<[/\w]/g,t.innerHTML)&&x(/<[/\w]/g,t.textContent))return se(t),!0;if("select"===r&&x(/